Case study

CarePrints

Printable, personalized activities for older adults and the people who care for them: crosswords, word searches, memory games, coloring pages, and long-form keepsakes like the Me-Book and memoirs, generated on demand and laid out for print. Built under Geriatric Care Solution. I have led the platform from the original agency site in 2024 through the shared activity engine that Anaya Care now runs on.

CarePrints — Small activities. Meaningful moments. A crossword, sunflower coloring sheet, memory card, and colored pencils.

What it is

A caregiver or a care facility picks an activity, personalizes it with a resident's name, their era, a family photo, or a difficulty level, and gets a print-ready sheet. The engine holds nearly thirty activity types, from word grids and mazes to story sequencing, paint-by-numbers, and picture memory cards, plus longer products: memoirs generated chapter by chapter, a Me-Book, and Stories2Connect reading pages. Everything is drawn once, as SVG, and the same render serves the on-screen preview and the printed page.

What I did

  • The activity engine. A teammate first extracted the activity code into packages; I consolidated every activity's prompts, previews, and customization into them, wrote the UI package, and built a Storybook that catalogs each type offline. The core holds per-activity config, prompt templates, response schemas, puzzle generators, and page planners; the renderer registry draws preview and print from one function. The same packages are vendored into Anaya Care with checksummed manifests, so both products render worksheets identically.
  • Print parity. Pages are planned in the font they are drawn in, exports report exact page counts, and the print registry stays out of the browser bundle. I documented parity per activity by rendering both products' paths to markup and comparing them.
  • One front door for AI. Every structured generation goes through a single helper on the Vercel AI SDK: native structured output on Claude with a JSON-tool fallback, a retry policy with backoff, a widening retry when output is truncated, timeouts, and token usage logs. Model tiers are chosen per task with an OpenAI escape hatch, and image generation runs on Gemini behind key rotation and a circuit breaker.
  • Durable generation. Long jobs such as bingo sets, ebook segmentation, and training content run as Restate workflows on the backend, so a redeploy or a crash resumes the journal instead of restarting the job. The journal labels are pinned by tests as a replay contract.
  • The product split. In September 2026 I separated CarePrints from the agency site it grew up inside: forked the configuration, pruned everything that belonged to the other product, moved the marketing pages out, gave each brand its own sending domain, and tightened authorization in the activity API on the way.
  • The origin. This repository began as Geriatric Care Solution's marketing site in January 2024. I built that, then the catalog, subscriptions, the ebook generator, the AI activity registry, and the email sequences the platform still runs on.

Human review

Generated catalog items stay unreleased until a person releases them, with a log of who released what and when. Nothing unreleased is visible to customers.


Focus & stack