One platform. Privacy enforced in the database.
A pragmatic, modern stack chosen so the most important guarantee lives in Postgres, not in app code — and so the cost of every conversation is engineered, not hoped for. The conversation has no read-path to a guardian. The person, guardian and specialist run as one Next.js app.
One line the data never crosses.
Every feature on this page sits on one side of this line or the other. What the person says stays left of it. What the caring side sees is derived, paraphrased and aggregated — and crosses alone.
Three roles, one product — installed once.
No second codebase, no app-store gatekeeping, no separate portal per role. The same app installs on a phone, runs at a desk, and signs everyone in at one screen.
Install it like an app — because it is one.
Folk AI ships as one installable product, tuned per person rather than forked per audience.
- Installable PWA — real brand icons, a manifest, standalone install straight to the home screen.
- Windows desktop wrapper — the same app at a desk, for the people who live there.
- Per-person sensory palettes — colour, type size and motion tuned to the person, driven by design tokens.
- Seven languages — across chat, voice and easy-read cards.

One sign-in for everyone — with a lock on every role.
A person, a caregiver and a specialist all sign in at the same screen, on three tabs. The boundary between roles is enforced at the door, not styled over.
- Role lock — an address registered as a person’s account cannot sign in through a panel role. Ever.
- Honest errors — when a code fails, the screen says the real reason, not “try again”.
- A splash that holds — no white-screen loop on launch: the splash stays up until the session is genuinely verified, hard-capped so it can never hold forever.

A consumer price point is an engineering result.
Folk AI is priced for families, so the cost of a conversation is treated like a feature: decided in code, capped deterministically and pinned by tests — not discovered on an invoice.
Every model, named in one file
Each model in the system is declared by purpose in a single file, with documented cache minimums. Changing the economics is a reviewed one-line change — not a hunt through the codebase.
one file · documented cache minimumsCheap by default, deeper on demand
Ordinary conversation runs on a fast model. A deterministic rule escalates to a deeper one only on remember-and-find turns — hourly-capped, and fail-closed: when in doubt, it stays on the cheap path.
deterministic · hourly-capped · fail-closedThe prompt splits on the cache boundary
The stable half of the system prompt is byte-identical from turn to turn, so provider-side caching actually fires. Everything volatile rides behind the split.
stable half cached · volatile half behind itMemory that never re-reads the past
The hot tail — about ten messages — goes in word-for-word, one short paragraph digests the active day, and typo-tolerant search recalls what the companion has learned. The full history is never replayed.
~10 messages verbatim + a one-paragraph digestScheduled work earns its model call
Every gate runs before any model is invoked: companion photo generation is capped at about three days a week per person, and dormant accounts are skipped entirely.
~3 days/week cap · dormant accounts skippedPinned by ~60 test files
Safety, privacy, memory, consent, permissions and motion behaviour are held in place by tests — an honest number, not a coverage slogan.
an honest count, not “100% coverage”The boring parts, done properly.
None of this demos well. All of it decides whether a platform can be trusted with special-category data.
- Media behind an app proxyPhotos are served through the app, so storage stays private — nothing lives on a public bucket URL.
- Uploads verified by actual bytesA file is what its bytes say it is — not what its extension claims to be.
- Rate limits & schema validation on every routeEvery payload is validated at the boundary, and every endpoint has a ceiling.
- Environment validated at bootA misconfigured server refuses to start instead of half-working in production.
- One tested gate for all scheduled jobsBackground work authenticates through a single gate, and a test proves the gate is actually in its path.
- Prompt-injection hardeningAnything a human typed is framed as data before it reaches the model, and names are sanitised before they touch instruction space.
Where it is, and where it’s going.
The core loop — talk, understand, protect — is live in production today across all three roles.
Done
- One app: PWA install, Windows desktop wrapper, unified sign-in with role lock
- Streamed chat with working memory & proactive messages
- 3-layer safety + session analysis → mood / themes / memories / alerts
- Guardian dashboard, alerts, analytics & weekly reports; specialist panel with auto DAP notes
- Companion avatars, contextual photos & scheduled feed posts — capped by design
- RLS privacy line on every table · cost controls declared in one file · ~60 test files
In progress
- Photo-post upload & moderation polish for the feed
- Hardening voice / call UX across iOS Safari
- First controlled pilot (5-10 participants) as case study #1
Planned
- Billing & plan-based usage limits — pricing shown on The model page is planned, not live
- DPIA + final legal review before public launch
- MDR Class IIa — the certification course we are on
- Expansion: Denmark → Scandinavia → Europe
The AI is built on Anthropic and Google AI Studio (Gemini). Anthropic models carry the conversation and the analysis behind wellbeing observations; Google AI Studio powers voice and the vision that lets the companion see a photo the person chose to share. Both are contracted sub-processors under a signed DPA, and the deterministic safety screen runs outside any model — so it still fires if a provider is unavailable.