- Branch:
main - Latest commit at handoff:
891eb97 - Status: pushed to
origin/main - Working tree: clean
- Implementation plan:
IMPLEMENTATION_PLAN.md
- Replaced default landing page.
- Added missing pages linked by dashboard:
src/app/learn/deconstruct/page.tsxsrc/app/speak/page.tsxsrc/app/progress/page.tsx
- Updated metadata and README status alignment.
- Added vocab rating API with auth + ownership checks:
src/app/api/vocab/rate/route.ts
- Added lightweight FSRS-style scheduler helper:
src/lib/srs/rating.ts
- Persisted review state, due dates, reps/lapses, XP/level/streak updates, and achievement unlocks.
- Added grammar completion API:
src/app/api/grammar/complete/route.ts
- Added deconstruction completion UI button:
src/app/learn/deconstruct/CompleteButton.tsx
- Completion updates grammar profile, XP/level/streak, and grammar achievement.
- Added speaking session start/end APIs:
src/app/api/speak/session/start/route.tssrc/app/api/speak/session/end/route.ts
- Added interactive speaking client:
src/app/speak/SpeakClient.tsx
- Added shared scenario definitions:
src/lib/speak/scenarios.ts
- Session end awards XP, conversation achievements, and updates user progression.
- Added LiveKit JWT helper:
src/lib/livekit/token.ts
- Start API now mints room token and includes participant metadata.
- Metadata payload includes learner context:
- known words
- grammar profile
- goal type
- scenario + mode
- language info
- session id
- Agent metadata resolution now reads:
- room metadata
- fallback: participant metadata
src/agent/index.ts
- Added event ingestion endpoint:
src/app/api/speak/session/event/route.ts
SpeakClientlistens to LiveKitDataReceivedand persistsuser_utterance/agent_utteranceevents.- Event API appends transcript, updates
wordsEncountered, and stores error events.
- Enhanced session end analytics in:
src/app/api/speak/session/end/route.ts
- Added inferred metrics:
- inferred unknown-word count (vs known vocab)
- inferred accuracy (from transcript user turns + logged errors, when explicit accuracy missing)
- Progress page now includes speaking insights in:
src/app/progress/page.tsx- recent sessions
- user turns
- logged errors
- average accuracy
- potential unknown-word sample
- Replaced Clerk runtime auth usage in app routes and APIs with local session user helper:
src/lib/session-user.tssrc/app/dashboard/page.tsxsrc/app/learn/vocab/page.tsxsrc/app/learn/deconstruct/page.tsxsrc/app/speak/page.tsxsrc/app/progress/page.tsxsrc/app/api/vocab/rate/route.tssrc/app/api/grammar/complete/route.tssrc/app/api/speak/session/start/route.tssrc/app/api/speak/session/event/route.tssrc/app/api/speak/session/end/route.ts
- Added local Postgres compose config:
docker-compose.dev.yml
- Added Prisma 7 config entrypoint and updated schema datasource block:
prisma.config.tsprisma/schema.prisma
- Prisma 7 adapter pattern implemented in runtime DB client:
src/lib/db.ts(uses@prisma/adapter-pg)
- Local Docker Postgres mapped to host port
5433to avoid local5432conflicts. - Updated docs/scripts for local dev session mode and Docker DB workflow:
README.mdpackage.json
- PR #1: web MVP loops + scaffolding merged to
main - PR #2: learner metadata wiring to agent merged to
main
- Debug and verify voice flow end-to-end (highest priority):
- LiveKit room connect
- agent join + audio round-trip
- transcript/event persistence
- session end XP/analytics writeback
- Run full manual French loop walkthrough and patch broken UX paths before new feature work.
- Enable Docker daemon locally and run DB bootstrapping:
npm run db:upnpm run db:migratenpm run db:seed
- Replace lightweight scheduler with full
ts-fsrsintegration. - Harden live room orchestration (reconnects, edge cases, session cleanup guarantees).
- Improve transcript analytics:
- error taxonomy (grammar/vocab/pronunciation/hesitation)
- corrected-form extraction
- trend views on
/progress
- Add automated coverage for critical loops:
- vocab rating -> review scheduling -> XP/achievements
- speak start/end/event -> transcript + analytics + XP
- Add production readiness checks (rate limits, payload limits, audit logging, retries).
- No secrets are committed;
.envremains local-only. - Voice flow remains unverified and should be treated as the first validation task.
- If picking up
ts-fsrs, start by isolating scheduler logic currently insrc/lib/srs/rating.ts. - If picking up analytics, extend
errorsLoggedschema shape consistently and keep backward compatibility with existing array payloads. @clerk/nextjsstill exists inpackage.jsonbut is currently unused at runtime.