presentation mode Β· current system + roadmap
AAC Analytics β a
living
architecture
child speaks β data explains β adults understand
current
future deployment
βΈ Pause story
β swipe to explore the full system β
A child uses an AAC communication board. Events flow through a Next.js backend into PostgreSQL, a deterministic analytics pipeline creates explainable findings, and a scoped dashboard chatbot uses the shared MCP tool seam with cloud or future locally deployed models.
EXPERIENCES
APP SERVER + DATA
GROUNDED AI
events
valid only
scoped insights
the question
read-only
outbound
accounts Β· settings
components/kid/board-app.tsx Β· lib/kid/log.ts (IndexedDB queue) Β· lib/kid/speech.ts
KID APP
/
the communication board
π
π§
π»
β
π
β
π¨
π€
π β
π
π¦ IndexedDB queue Β· offline-safe
π§
π tap
π£ speak
π§ nav
π€ spell
app/dashboard/* Β· lib/metrics.ts Β· lib/baseline.ts Β· components/insight-card.tsx Β· components/chat/*
DASHBOARD
/dashboard
teacher Β· SLT Β· parent
I4
I1
I8
baseline: 14d+40u
π¬ Ask about Miaβ¦
β€
π§βπ«
app/api/* Β· lib/ingest.ts (grid-coord gate) Β· lib/access.ts (role + consent scoping)
NEXT.JS SERVER
one app Β· two surfaces
/api/events β ingest β β
/api/chat β ask agent
/api/mcp β HTTP door
π‘ role + consent are filtered in the
query layer β never in a component
db/schema.sql Β· db/views_metrics.sql Β· db/views_insights.sql Β· lib/db.ts (4-statement WRITABLE whitelist) Β· tools/rollup.py Β· tools/run_rules.py Β· tools/verify.py
DATA CORE
aac_app.db
accounts Β· passcodes Β· overrides
aac.db
analytics Β· PostgreSQL Β· WAL
β app writes: 4 statements only
βοΈ
PIPELINE
rollup β SQL rules β fired_rules
verify: 42 β
lib/chat/ β agent Β· guard (forbidden actions) Β· tool bridge Β· settings
π€
ASK AGENT
runs inside the server
π‘ guard: no move / resize advice
π§ tool bridge β MCP tools
answers must cite real numbers
lib/chat/vertex Β· openai Β· anthropic Β· gemini β switch at /dashboard/settings
MODEL PROVIDERS
choose at /dashboard/settings
βοΈ Vertex Gemini 3 β
βοΈ OpenAI
βοΈ Anthropic
βοΈ AI-Studio Gemini
π keys stay server-side only
mcp/ β server (JSON-RPC/stdio) Β· tools.ts (14 tools) Β· db.ts (query_only + deny-ATTACH) Β· app/api/mcp
π MCP SERVER
one read-only tool surface Β· 14 tools
doors: bridge Β· stdio Β· HTTP
π query_only + deny-ATTACH
π« utterance text unreadable
insights must cite a fired_rule_id
Future: Gemma 3 4B on a separate device β outbound MCP client (docs/mcp-clients.md)
π»
GEMMA 3 4B
local model Β· its own device
connects
outbound
as an
MCP client β reads metrics,
writes rule-backed insights
FUTURE