SheafCompliance Packet Builder
What it does for you
An intake form that assembles a 14-page home care licensure application packet with a real table of contents, a generated org chart, readiness scoring, and MISSING stamps, clearly labeled a sample template and not legal advice.

Screenshots

In more detail
Sheaf takes one intake form for a new home care agency and assembles a print-ready licensure application packet: cover, table of contents with real page numbers, org chart, ownership disclosure, staff roster, attestations, signature pages, and an appendix tracker. Anything still missing gets a MISSING stamp, so the gaps are obvious. It is clearly labeled a sample template and not legal advice.
Honest limits
The content is generic and state-agnostic on purpose. The state only appears as a filled token. I assumed a non-medical agency, two key roles, owners adding to exactly 100 percent, and Letter paper. Row budgets are a conservative fixed count, so pages can run looser than needed. Screenshots use fallback fonts because Google Fonts could not load in the sandbox. I have no record of the Cowork skill running against a real Drive or Gmail account.
How I built it
This came out of the September 23 push, when I said "one shot all the Cowork projects." I gave the spec (intake form, configurable recipe, readiness score, validation, tokens, a print layout with page numbers, a Playwright PDF, and a disclaimer on every page), and Claude Cowork built, tested, screenshotted, and documented it in one pass.
It wrote the core first (packet.js, no DOM), then 214 assertions against it, then the page on top of the same module. It rendered the 14-page sample PDF with Playwright, rasterized every page into a contact sheet, and fixed what it saw: sidebar fields spilling out of their column, and binder tabs that wrapped back to the top of the page after the eighth section. It also packaged the workflow as a Cowork skill with read-only Drive and Gmail and a draft-only hand-off.
One rule I cared about: the sample names no statutes, form numbers, or fees, and a test scans the recipe for anything shaped like a citation.
What I learned
- A table of contents with real page numbers is easy once the page count cannot depend on the numbers. Pass one builds and paginates every section. Pass two resolves the TOC and checklist page references. One assertion (every entry lands on the first page of its section) covers reorders, exclusions, and a two-page TOC.
- Print pagination worked better as fixed 8.5 by 11 inch page boxes with row budgets than as flowing content with break hints. The PDF matched the preview page for page, and a
scrollHeightcheck catches any page that overflows. - CSS grid children default to
min-width: auto. A select with a long option stretched a1fr 1frrow past its card until I switched tominmax(0, 1fr). - Ownership percents need rounding. Thirds entered as 33.33, 33.33, 33.34 add to 100.00000000000001 in floating point, which would flag a correct disclosure as wrong.
What carried forward
It uses the pattern from the first week: one pure logic module imported by both the page and verify.mjs, so the shipped code is the tested code, plus the tiny serve.mjs. It sits in the same home care track as #22 (Hearth) and #24 (Attest), with the same "sample, not legal advice" labeling, though no code was imported between them. Its sibling in the Cowork batch, #84, used the same Playwright PDF approach.
If I took it further
I would measure real row heights in the browser and feed them back into the page budgets. Then I would add per-state recipe files with a source field on every row, filled only from documents an agency actually gets from its licensing office.
#081 Built with Claude Cowork September 23, 2026 214 automated checks