Senior Health App¶
A phone-first companion for older adults, built by Equal Entry. Accessibility is a build requirement here rather than a later audit pass: CI fails on accessibility lint violations, component tests query by role and label so they break when the accessibility layer breaks, and content that cannot be described is never shown.
Start here¶
| Guide | What it covers |
|---|---|
| Accessibility | The conformance target, the assistive-technology test matrix, and the conventions every surface follows |
| Design system | Daybreak: the color, spacing, and type tokens, and the primitives built on them |
| Testing | The layers, the shared helpers, and how to add a case without inventing a pattern |
| Media catalog | How to add a new video or photo, and the description gate every asset must pass |
| Multiple seniors | A concept sketch: two people's memories on one device, switched from Settings |
| Launching the app | Every way to run it: simulator, Accessibility Inspector, Wi-Fi to a phone, TestFlight, and what to do when Wi-Fi will not connect |
| Deploy to iPhone | Installing the dev client once, then iterating over Wi-Fi with no rebuilds |
| Backend over Cloudflare Tunnel | Giving the laptop backend a stable public hostname for TestFlight builds |
The features¶
| Feature | What it does |
|---|---|
| Stories from the Past | A gentle, one-question-at-a-time memory session built from the senior's own life story |
| Accessible Video Quiz | A video quiz that cannot reach a senior without both an audio description and captions |
| Voice Answers | Answering by speaking, with automatic endpointing, so no tap is required |
| Photo Questions | An EXIF-driven photo prompt. Prototype only; not yet built |
| Faces | Learning a name from a face in three steps, one person at a time |
How the repo is laid out¶
The Architecture page has the full picture, including the Cloudflare data plane and the Loved One web app. The short version:
apps/mobile/ Expo app (SDK 57, React Native 0.86, TypeScript strict, Expo Router)
backend/ FastAPI service: image and video processing, Deepgram transcription
docs/ This site
compose.yaml Runs the backend in Docker
Two principles run through all of it:
Born Accessible. The data model itself enforces access. A video quiz without an audio description and captions is not publishable and the screen refuses to play it. A photo without a description is never rendered. This is checked by tests over the shipped content, so it cannot rot.
Laptop or cloud, the app does not care. The mobile app derives its backend
URL from the Expo dev server in development and from EXPO_PUBLIC_API_URL in
preview and production builds, so simulators, emulators, and physical devices
all reach the right place with no configuration.
Working on the docs¶
The site is Material for MkDocs,
built from the docs/ directory and hosted on Cloudflare Pages. The settings
Cloudflare needs are in the repository README.
pnpm docs:serve # live-reloading preview
pnpm docs:build # strict build; a broken internal link fails it
The preview lives at http://127.0.0.1:8001, on port 8001 rather than the MkDocs default of 8000 because the FastAPI backend uses 8000.
A new page has to be listed in the nav in mkdocs.yml, or the strict build
fails.