CareReady
A serverless belongings checklist with no-login family access and share-code facility templates
When an older relative moves between care settings — a hospital admission, a short stay, a day-service morning — the family has to pack the right belongings, and forgetting one essential can derail the day. CareReady is a serverless PWA where a facility publishes a belongings template and the family redeems it on any browser to get a checklist that works offline and flips into a return-check at the end of the stay.
It is honest about its scope: in development, and not a medical device — it makes no clinical recommendations. The whole project is open source, backend tests and CDK infrastructure included.
Design constraint: no install, no login for families
The family side is a plain PWA — vanilla JS, a service worker, and IndexedDB. Once a template is redeemed it lives on the device, so the checklist works on the ward, in the car, anywhere with no signal. A dedicated return-check mode turns the same list around at the end of a stay to confirm nothing is left behind. No framework, no frontend build step, and no account for the family: the lowest-friction path is a deliberate product decision, because the person using it is often improvising during a hard transition — not sitting down to configure an app.
Architecture
Family (mobile PWA, IndexedDB) Facility staff (PC, /ready/admin/)
│ /ready/ │ sign-in
▼ ▼
AWS CloudFront ──▶ CloudFront Function (URL rewriter) ──▶ S3 (static PWA)
│
├─ POST /v1/templates/redeem (no auth) ──┐
│ ▼
└─ Staff: template CRUD + JWT ──▶ API Gateway (HTTP API)
│ Cognito JWT authorizer
▼
Lambda (Python 3.12, careready-api)
│
▼
DynamoDB (careready-main, single-table)
Auth: Amazon Cognito user pool (careready-facility) — staff only
IaC: AWS CDK v2 (Python), backend/infra/ · Region: ap-northeast-1
The share code is the whole trust model
Families never create an account. A facility publishes a belongings template and gets a 6-character share code; the family types that code and pulls the facility-specific list onto their phone. That single anonymous path — POST /v1/templates/redeem, no auth — is served by a DynamoDB global secondary index: the code lives in GSI1PK as CODE#<shareCode>, so one query resolves a code straight to its template without the family ever knowing (or needing) the facility ID. Staff writes go to the authenticated FAC#<facilityId> partition behind a Cognito JWT authorizer. The public read path and the private write path are the same single table, split by index — anonymous families and authenticated staff coexist without an account wall.
Codes exclude the ambiguous characters I, O, 0, and 1, because the person typing one is a stressed family member on a phone, not a developer.
Infrastructure as Code
The entire backend is provisioned with AWS CDK v2 in Python (backend/infra/) — nothing is clicked together in the console. A cdk synth produces the API Gateway HTTP API, the Python 3.12 Lambda (boto3 only, no bundled dependencies), the single DynamoDB table (on-demand billing, RemovalPolicy.RETAIN so data survives a stack teardown), and the Cognito user pool for facility staff.
Tech stack
| Layer | Choice |
|---|---|
| Frontend | Vanilla JS PWA · Service Worker · IndexedDB |
| Hosting | AWS S3 + CloudFront + CloudFront Functions |
| API | API Gateway HTTP API + Lambda (Python 3.12, boto3 only) |
| Database | DynamoDB single-table, on-demand, RemovalPolicy.RETAIN |
| Auth | Amazon Cognito user pool (staff only) |
| IaC | AWS CDK v2 (Python), backend/infra/ |
| CI/CD | GitHub Actions — headless-Chrome smoke test + S3 deploy |
Also a product-management portfolio
CareReady doubles as a working PM artifact — a real product taken from problem to deployed system, solo and AI-assisted, with the delivery discipline kept in public:
- Evidence-based delivery — features are gated on pilot evidence, and the write-ups are explicit about what is working versus not yet validated (the facility admin portal is still in progress).
- Stakeholder management — two users with conflicting needs: families who need zero-friction, no-login use, and facility staff who publish templates via a share code — served by one design without an account wall.
- Agile in practice — a live GitHub Project — CareReady Product Delivery, run as experiments, decisions, tasks and risks with a traceable Definition of Ready / Definition of Done, plus issues.
Tested
Backend tests run on pytest + moto (mocked DynamoDB): 9 cases covering the redeem happy path and 404, a full facility-template CRUD round-trip, input-validation limits (empty name, >200 items, item name >100 chars), and the facilityId fallback to the Cognito sub when the custom claim is absent. The frontend gets a syntax check and a headless-Chrome smoke test on every push via GitHub Actions.
The repository is public — github.com/larai-w/careready-belongings-checker.
