Skip to content
All builds

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.

Sheaf screenshot

Screenshots

Sheaf screenshot 1

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 scrollHeight check catches any page that overflows.
  • CSS grid children default to min-width: auto. A select with a long option stretched a 1fr 1fr row past its card until I switched to minmax(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

Want one like this?