Pawprint is a Progressive Web App that lives on each family member's phone. Devices in the same family sync directly with each other โ no central database, no cloud accounting, no per-family run cost. The family holds the encryption key; the storage backend never sees the data unencrypted.
Add to home screen on iOS Safari (Share โ Add to Home Screen) or Android Chrome (menu โ Install). Pawprint becomes a real app icon โ full-screen, offline-cached, no app-store gatekeeper.
First device creates a new family workspace. The app generates a fresh family ID and a symmetric encryption key, both stored locally on that device.
The first device shows an "Add family device" screen with a QR code that encodes the family ID and key.
The second device โ phone B โ scans it. Phone B's Pawprint reads the QR, stores the same key, and joins the family.
From that moment, both devices encrypted-sync their local stores. New devices get added the same way: scan from any already-paired family device.
Removing a device (a babysitter who's no longer welcome, a co-parent splitting away) = a parent rotates the family key on remaining devices. The departed device's key becomes useless.
family_id: f-7b3a2c91
key: (symmetric AES-256 key)
added_role: caregiver
scope_until: 2026-08-01T22:00Z
That last field is what makes a babysitter pairing different from a co-parent pairing. Caregivers get scoped time windows. Co-parents don't.
Each state change (chore submitted, chore approved, calendar event added) is written to the local store first โ instant, offline-tolerant. Then it gets serialized, encrypted with the family key, and pushed to a blob-storage backend.
Other family devices poll, pull the blob, decrypt with their copy of the family key, and merge into their local store using CRDT semantics โ last-writer-wins for non-monetary changes, with explicit conflict-resolution UI for chore approvals where it matters.
The storage backend never sees the family's data unencrypted. Any opaque storage works: Supabase as a dumb bucket, Firebase, S3, even iCloud Drive in a future version. The architecture treats storage as interchangeable plumbing.
Each device keeps working against its local store. Chores get submitted, approved, marked done. Allowance balances update. The next time the cloud is reachable, all the queued blobs sync. The family is never blocked by the storage backend.
Pawprint inherits CHERP's role hierarchy, mapped to the family. Kids interact with the system but cannot edit the rules โ same envelope a grown-up has when someone hands them a real responsibility.
| Surface | Kid | Parent / Co-parent | Caregiver | Guardian admin |
|---|---|---|---|---|
| Mark chores done | โ | โ | โ (in scope) | โ |
| Approve / reject submissions | โ | โ | โ (in scope) | โ |
| Add / edit chores + values | โ | โ | โ | โ |
| Add calendar events | โ | โ | โ (in scope) | โ |
| Mark calendar events attended | โ | โ | โ | โ |
| Adjust allowance rates / split | โ | โ (mutual approval to loosen) | โ | โ |
| Set / edit own goals | propose only | approve / edit | โ | โ |
| Add / remove caregivers | โ | โ | โ | โ |
| Rotate family key | โ | โ | โ | โ |
A settings toggle inside Pawprint switches between sub-modes. Each sub-mode adjusts default rules, role assignments, and the visible feature set.
Single guardian-admin. Optional caregiver federation for grandparents / babysitters.
Two equal guardian-admins. Mutual-approval to loosen rules; either parent can tighten unilaterally. Custody-schedule overlay.
Three+ generations under one roof. Multiple guardian-admins. Per-generation default thresholds.
Sensory-friendly programming flagged separately. Medication interaction lookups. IEP / 504 tracker.
Audit log surface for caseworker review. Court-document tracker. Trauma-informed default thresholds.
Optional denominational threshold packs distributed by partner organizations.
The demo runs the chore + allowance + goal flows against your browser's localStorage. Toggle the role switch to see how the kid and parent surfaces differ.
Open the app โ