Inspiration
AI is moving into the spaces where families already live, and the hardest question is no longer what a model can do — it is when a model should stop. For parents, homework is a nightly negotiation of time, focus, and trust. Families told us the same thing repeatedly: a child needs room to practice independently, and a parent needs visibility without surveillance. No existing agent respected that boundary.
FadFada began as an Arabic-first family companion built on one conviction: a person must feel heard before they can be helped. The Alexa+ track gave that conviction a second surface — ambient, hands-free, and woven into the household routine. Family Flow is our answer: an agent that plans homework, earns a parent's explicit approval, and only then hands off to the child.
What it does
Family Flow converts an open-ended request — "25 minutes of math before bedtime" — into a structured, time-boxed routine:
- The engine generates three steps (settle / guided practice / parent review) in an
awaiting_parent_approvalstate. - Constraints can change on demand ("make it 10 minutes"). The plan rebuilds, completed progress is preserved, and the routine returns to
awaiting_parent_approvalbecause the child-facing plan has materially changed. - An explicit parent approval records the authorizing event. Only then can practice begin.
- The child workspace receives approved output exclusively. Every parent-only route returns
403 PARENT_WORKSPACE_REQUIREDto a child-mode session.
The design principle is simple: no approval, no handoff. Safety is enforced structurally, not stated as a disclaimer.
How we built it
- Next.js, React 19, TypeScript, Prisma, and Neon Postgres on the existing FadFada stack.
- A deterministic Family Flow engine (
src/lib/familyFlow.ts) — pure and unit-tested, so safety behavior is reproducible and provable. - A parent-only API (
/api/parent/family-flow) with child-ownership checks. Routine state is persisted as append-onlyInteractionEventrecords, preserving a full audit trail. - A self-hosted Streamable HTTP MCP server (
/api/mcp/family-flow) built on the official@modelcontextprotocol/sdk, protocol version2025-11-25, with bearer authentication and server-derived parent binding. Exposed tools:get_family_routine,create_family_routine,reschedule_family_routine,approve_family_routine. - Workspace-identity guards (
src/lib/workspaceIdentity.ts) with dedicated unit tests, plus a parent-facing workspace surface (FamilyFlowPanel). - The demo video is generated entirely by our own pipeline: two-voice dialogue synthesis and per-line lip-synced avatars composited over live application footage.
A single approval-gated engine serves both the human parent UI and the Alexa+ MCP surface, guaranteeing the two channels can never diverge.
Challenges we ran into
- Streamable HTTP is unforgiving. Requests returned
406until we satisfied the specification's requiredAccept: application/json, text/event-streamheader — a subtle detail that blocks naive clients. - Serverless and long-lived transport. We architect the MCP connection to be short-lived and stateless per request; authoritative routine state lives in the event store rather than in server memory.
- Designing approval semantics. Rescheduling initially preserved approval. We revised the model so that any material change to the child-facing plan requires a fresh parent decision, and enforced this with unit tests.
Accomplishments that we're proud of
- A production MCP server with a verified
2025-11-25handshake and a complete create → reschedule → approve → read lifecycle recorded against real data. - Cross-surface consistency: a routine created over MCP appears in the parent UI API, and vice versa.
- Verified isolation: in child mode, every
/api/parent/*route and/api/profilereturns403 PARENT_WORKSPACE_REQUIRED. - Transparent engineering practice: a dated
CHANGELOG.mdand an honestFRICTION_LOG.mdat the repository root for reviewers.
What we learned
- A clean domain model — a pure routine engine — turns safety from an aspiration into something testable and explainable.
- Append-only events kept two independent surfaces consistent without a schema migration.
- Rigorous, honest packaging (friction logs, dated changelogs) is part of a credible submission, not an afterthought.
What's next for FadFada
- Stronger localized crisis resources and escalation workflows.
- Official cloud speech-to-text and text-to-speech for higher-fidelity Arabic dialect support.
- Expanded parent reporting and child progress insights.
- Live subscription checkout for founding beta access, alongside pilots with schools and community programs across the GCC.
Built With
- alexa
- alexa+
- capacitor
- edge
- ffmpeg
- gemini
- google-genai-sdk
- model-context-protocol-(mcp)
- neon
- nextauth
- no-code-block.next.js
- node.js
- playwright
- postgresql
- prisma
- pwa
- react
- stripe
- tailwind-css
- typescript
- vercel
- vertex-ai
- vitest
- websocket
- zod

Log in or sign up for Devpost to join the conversation.