Account access
Invite acceptance checklist
Owner sent invites 26 Aug 2026. Developer confirms each portal manually — platform consoles cannot be verified from the dev machine alone.
GitHub (NtelUpApps)Write access
Apple DeveloperConfirm in email
App Store ConnectConfirm in email
Google Play ConsoleConfirm in email
Google Cloud (lekturer-app)Confirm in email
DigitalOcean dropletConfirm in email
GitHub verified programmatically: NtelUpApps/lekture-mobile-app and lekture-api both show WRITE. Remaining portals — log in once each and reply to owner if any invite expired or wrong email.
Timeline
Four-week plan (Aug 27 → Sep 23)
Security lockout moved to week 1 per owner request. Digital reader MVP in week 3. Assumes one developer, Android-first local QA, TestFlight for child validation.
Week 1 · Security lockout + §4 tutor
Aug 27 – Sep 2
- Days 1–2: SSH — new keys only, disable root password login, revoke previous team access
- Days 1–2: Rotate OpenAI key, JWT secret, PostgreSQL password, SMTP password; update droplet env + redeploy API
- Days 2–5: Cherry-pick §4 commits (VAD, Pause/Prompt/Praise, read-ahead ban) onto
v4
- Days 3–5: Fix backend read-ahead leak in
openai.service.ts + API deploy
Week 2 · Round-two tutor + TestFlight
Sep 3 – Sep 9
- Beginner leniency 70–80% wired to reading level
- Pass
profileId → age/grade through session API and WebRTC prompt
- Android smoke test on physical device
- Fresh TestFlight build → owner child QA (waits, hears, no read-ahead)
Week 3 · Digital reading mode MVP
Sep 10 – Sep 16
- Dashboard entry: third mode “Digital Reading”
- Paste URL → backend article extraction → paginated text
- Reuse
ReadingPage + WebRTC tutor + auto page turn on 85% completion
- Testable build for owner on iOS + Android (Share extension deferred)
Week 4 · Hardening + iterate
Sep 17 – Sep 23
- Digital mode feedback loop from owner testing
- COPPA:
store:false on live voice path, PII out of logs
- Disable TypeORM
synchronize in production; subscription plan values
- PDF import or Share extension — scope based on week 3 feedback
After week 4 · Pre-launch backlog
Sep 24+
- Remote push (APNs + FCM), Apple App Store Server Notifications
- Google Play content declarations, parental consent live verification
- OpenAI model evaluation (§6.7)
From owner messages
Immediate owner priorities
These override generic handover ordering. P0 items block the child QA loop on TestFlight.
§4 AI tutor foundation
Open
Cherry-pick b0807d5 (VAD + Pause/Prompt/Praise) and 1264b1d (read-ahead ban) onto clean v4. Skip EAS experiments from ai-tutor-round1.
VAD is unified via getTurnDetection/applyTurnDetection — verify unmute keeps level-scaled wait time.
Beginner leniency 70–80%
Test
Wire textUtils.js strict mode to reading level. Accept ~70–80% for beginners; flag “could be improved” without forced re-read.
Beginners use lenient scoring at 70% pass; experts stay strict at 95%.
Pass age & grade to tutor
Test
Profile data exists in Redux. Mobile must send profileId to session API so backend and WebRTC prompt get age/grade.
Mobile now sends profileId on session create — verify age/grade appear in tutor prompt on device.
Backend read-ahead leak
Test · deploy
Fix openai.service.ts — remove full passage in instructions and first-word hint example (~line 70).
Instructions no longer embed passage text — deploy API and verify tutor waits for app text.
TestFlight baseline
Guidance
Ignore builds 18 (31) and 18 (33). Treat 18 (23) as stable. Build fresh from repo.
Do not debug owner EAS compile attempts.
Account access
Pending owner
Invites to Apple Developer, App Store Connect, Play Console, Google Cloud. Developer sends Apple ID + Google emails.
Blocks TestFlight push and Play Console work.
Third reading mode (Digital)
Design
Owner wants background mic + auto screen OCR while reading in other apps. Full auto not viable on iOS — see tiered options below.
Recommended: in-app reader + Share extension, not file upload UX.
This pass · 2 September 2026
In testing
Code-fixable handover bugs are implemented on the open PRs. Features, ops, legal, and device QA remain. Amber Test means: exercise on device / logs, then mark done.
lekture-mobile-app PR #1 (base v4) · lekture-api PR #1 (base v3)
-
4.1
Fix dual VAD values
BugMobile PR
Unmute used to reset wait to 1500ms / 0.5. Now applyTurnDetection() reuses the connect config. Verify after the tutor speaks: wait time stays at the level value.
Test
-
4.2
Level-scaled silence + mic sensitivity
BugMobile PR
Beginner 4000ms / 0.3 · intermediate 3000ms / 0.35 · expert 2500ms / 0.4. Confirm a beginner profile gets a longer pause before the tutor talks.
Test
-
4.4
Never read ahead (app prompt)
BugMobile PR
WebRTC practice prompt now forbids previewing upcoming words. Pause should get “take your time”, not the next word.
Test
-
6.4a
Beginner leniency 70–80%
BugMobile PR
Scoring options follow reading level. Beginner: lenient match, 70% pass, gentle “could improve” up to 80%. Expert: strict, 95% excellent.
Test
-
6.4b
Pass age/grade to tutor
BugMobile PR
profileId is sent on session create. Live WebRTC prompt also includes age and grade via setProfileContext. Confirm tutor vocabulary matches the child’s profile.
Test
-
6.4c
Backend read-ahead leak
BugAPI PR
Server session instructions no longer embed the passage or a first-word hint. Needs API merge + deploy before production sessions change.
Test · deploy
-
6.2a
Disable TypeORM synchronize in prod
BugAPI PR
synchronize is off when NODE_ENV=production. Confirm production boot does not auto-rewrite schema.
Test
-
6.2b
Remove PII from logs (COPPA)
BugAPI PR
Auth, mail, weekly-report, purchase, and session logs no longer print passwords, parent emails, or child profile names. Grep logs after social login or cron.
Test
-
6.3c
Subscription trial 7d / 150 pages
BugAPI PR
New signups get 7 days and 150 pages. Mobile trial banner/status now reads trialDaysRemaining / isTrial (was looking at wrong field names). Confirm on a new account after API deploy.
Test · deploy
-
6.5a
Realtime voice tracing off
BugAPI + Mobile PR
Live Realtime sessions send tracing: null. OCR and mock-test GPT calls now send store: false. Needs API deploy for the Realtime path.
Test · deploy
-
7.4
Exact line for realtime voice retention off
BugAPI PR
Same change as 6.5a — openai.service.ts session payload includes tracing: null.
Test
-
—
Push registration stub (dummy token)
BugMobile + API PR
App no longer POSTs dummy-token-*. API rejects those tokens. Real push is still 6.3a.
Test
-
2.4
Apple sign-up crash / Hide My Email
BugMobile + API PR
Apple button is iOS-only. providerUserId is always the Apple user id. Returning users can log in without an email; first signup still needs the relay/email. Confirm on TestFlight with Hide My Email.
Test
Section 4 + 6.4
AI tutoring behavior
Root defect confirmed
On connect: VAD is 2500ms / threshold 0.4. After tutor speaks and mic unmutes: resets to 1500ms / 0.5. Child gets less thinking time and a less sensitive mic for the rest of the session — exactly the handover bug.
Unified turn detection
Test
getTurnDetection() + applyTurnDetection(). Beginner 4000ms/0.3 · intermediate 3000ms/0.35 · expert 2500ms/0.4.
WebRTCService.js
Pause → Prompt → Praise
Not done
Full prompt ladder from behaviour spec. Smallest hint first; supply word only after two failed hints.
WebRTCService.js · b0807d5
Never read ahead
Test
Absolute ban on previewing upcoming words. “Keep going” without content leaks.
WebRTCService.js · 1264b1d
Natural tutor persona
Partial
Calm teacher tone, varied praise, per-sentence / per-page feedback modes.
WebRTCService.js
Reading level in prompt
Partial
setReadingLevel() injects level guidance into prompt.
WebRTCService.js
Beginner scoring tolerance
Test
70–80% acceptance band; summary flags “could be improved”.
textUtils.js · WebRTCService.js
Age/grade in tutor context
Test
Backend + mobile prompt use profile age and grade on session create and in the live WebRTC practice prompt.
RealTimeMode.jsx · openai.service.ts
Backend session leak
Test
Remove full-text injection and first-word example from server instructions.
openai.service.ts
Child QA on TestFlight
Blocked
Owner tests with child: waits, hears, does not read ahead.
Needs §4 + round-two + fresh build.
Product request
Digital Reading Mode
Owner vision: background mic, auto screen OCR, page-turn detection while child reads in Kindle, Safari, or any app — zero manual steps.
Reality: iOS blocks silent cross-app capture. We can still build a modern experience in tiers.
Recommended tiers (best UX we can ship)
Recommended
Tier 2 — In-app reader
Paste URL, import PDF, or Share → Lekture from Safari. Tutor greets child; auto page turn inside app. Identical iOS + Android. No policy roulette.
Power mode
Tier 1 — Screen helper session
One broadcast tap per session (parent). Then auto page-turn via OCR on frames. Not per-page manual steps. Kindle DRM still blocked.
Android only
Tier 3 — Overlay assist
Floating tutor + MediaProjection. Closer to true background — requires explicit owner approval for Android-only feature.
Platform limits
Reading modes today
Live camera
RealTimeMode + Vision Camera OCR + WebRTC. Physical books.
Scan & read
Photo OCR → compiled book → ReadingPage. Manual scan steps.
Digital mode (new)
Approved. Week 3 MVP: URL paste + in-app reader + tutor. Share/PDF after owner test.
Handover doc §2–7
Full requirements matrix
Source of truth for the August 2026 work package. Each row: what it is, what’s wrong, who acts, and how to classify it.
Bug broken, wrong, or unfinished wiring of intended behavior
Feature new capability not in the codebase yet
Ops access, infra, forms, handover
QA verify on device / staging
Shipped already in app — inventory only
Legal lawyer / owner sign-off
Developer engineering
Owner owner-only action
Both split responsibility
Bug vs Feature: If data or APIs already exist but aren’t connected (age/grade, leniency, profileId), that’s a Bug. If nothing exists yet (remote push, Apple ASN, digital reader), that’s a Feature.
Phase 1 — Onboarding
- 2.1
Clone repos v4 / v3OpsDeveloper
Get mobile and API source from NtelUpApps GitHub onto the correct default branches — foundation for all other work. Done
- 2.2
Understand stack (RN, WebRTC, NestJS)OpsDeveloper
Map how camera OCR, Realtime voice, profiles, and the droplet-hosted API fit together before changing tutor behavior. Done
- 2.3
Local build setupOpsDeveloper
yarn, Node 20.19.4, Android dev loop working on a physical device; iOS via EAS or Mac when needed. Partial
- 2.4
Physical iPhone test; sign-up crashBugDeveloper
Owner saw a crash on sign-up in their EAS build — may be build-specific or a real Apple/Google Sign-In config bug; needs repro on a fresh build. Test
- 3
Account access invitesOpsBoth
Owner sends invites; developer accepts and confirms GitHub, Apple, Google Play/Cloud, DigitalOcean, OpenAI, and EAS access. Partial
Phase 3 — §4 AI tutor
- 4.1
Fix dual VAD valuesBugDeveloper
Mic wait time resets from 2500ms to 1500ms after the tutor speaks — causes interruptions and missed quiet speech mid-session. Test
- 4.2
Level-scaled silence + mic sensitivityBugDeveloper
Handover spec requires level-based VAD (beginner vs expert); code uses one-size values and overrides them worse after unmute — part of the same §4 fix as 4.1. Test
- 4.3
Pause/Prompt/Praise promptFeatureDeveloper
New tutoring protocol from behaviour spec — replaces generic prompt text; not a regression fix, net-new coaching rules. Open
- 4.4
Never read ahead rulesBugDeveloper
Tutor must not say upcoming words aloud — child was repeating the AI instead of decoding the page. Test
- 4.5
TestFlight + child validationQABoth
Developer ships TestFlight build; owner tests with a real child — tutor waits, hears quiet speech, does not preview text. Open
Section 6.4 — Tutor round two
- 6.4a
Beginner leniency 70–80%BugDeveloper
Scoring machinery exists but strict mode is hardcoded off — young/accented readers get marked wrong when they’re close enough to move on. Test
- 6.4b
Pass age/grade to tutorBugDeveloper
Profile stores age and grade but mobile never sends profileId to the session API — tutor can’t adapt vocabulary to the child. Test
- 6.4c
Backend read-ahead leakBugDeveloper
Server session instructions embed the full page text and a first-word hint example — primes the model to read ahead before app rules apply. Test
Section 6 — Security, subscriptions, launch
- 6.1
Rotate all secrets at handoverOpsBoth
Previous team had plaintext access to OpenAI, JWT, DB, SMTP, Apple .p8, and SSH — owner provides new secrets; developer rotates and deploys. Open
- 6.2a
Disable TypeORM synchronize in prodBugDeveloper
Live DB schema auto-rewrites on every API boot — one bad deploy can corrupt production data; needs migrations instead. Test
- 6.2b
Remove PII from logs (COPPA)BugDeveloper
Parent emails are written to application logs on social login and weekly report cron — privacy and COPPA violation risk. Test
- 6.2c
Replace hardcoded admin loginFeatureDeveloper
Admin dashboard uses a single shared account (admin@lekture.com) — no individual users, roles, or audit trail. Open
- 6.3a
Real remote push (APNs + FCM)FeatureDeveloper
Not built — only local Notifee alerts and a dummy device token in DB. No Firebase/APNs, no server send path. Milestone reminders cannot reach users off-app. Not built
- 6.3b
Apple App Store Server NotificationsFeatureDeveloper
Google Play renewals/cancels are handled server-side; Apple subscriptions are client-only — renewals and refunds can desync. Not built
- 6.3c
Subscription plans (7d / 150·450·900 pages)BugDeveloper
Product spec is 7-day trial and tiered page limits; code still runs test values (30 days, 10,000 pages). Test
- 6.5a
OpenAI store:false on live voice pathBugDeveloper
Zero-retention is set for level analysis but not confirmed on the child’s live Realtime voice session — COPPA data-retention concern. Test
- 6.5b
Verify parental consent on iOS social sign-inQABoth
Consent modal exists in code — developer verifies flow on TestFlight iPhone; owner confirms it meets product/COPPA expectations. Unverified
- 6.5c
Parent email verification / legal reviewLegalOwner
Social sign-in marks parent email verified without a verification email — whether that meets COPPA “verifiable parental consent” needs legal sign-off. Legal
- 6.5d
Google Play content declarations (12 pending)OpsBoth
Play Console requires privacy, data safety, target audience, and related forms — developer supplies accurate answers; owner submits in Play Console. Open
- 6.6
Scaling (managed DB, backups, LB)OpsBoth
App and PostgreSQL share one droplet with no autoscale — owner approves spend; developer implements when traffic requires it. Future
- 6.7
Evaluate newer OpenAI realtime modelsOpsDeveloper
App uses gpt-realtime-2 + whisper-1 — check if newer models sound better, transcribe more accurately, or cost less before scaling usage. Open
Section 7 — Pending from previous team
- 7.1
Real Figma files / asset exportOpsOwner
Only a prototype link exists so far — owner must obtain from previous team; limits matching new UI to the original design system. Pending
- 7.2
Confirm push notifications workOpsDeveloper
Handover question to previous team — closed by code audit: local Notifee only, dummy device tokens, no APNs/FCM. Real push is separate item 6.3a. Closed
- 7.3
Confirm 7-day / 150-page trial in deployed buildQABoth
Code shows test values (30d / 10k pages) — developer confirms in source; owner confirms on live/TestFlight build. Pending
- 7.4
Exact line for realtime voice retention offBugDeveloper
Same gap as 6.5a — live Realtime voice path lacks confirmed store:false; developer must locate or add it for COPPA audit. Test
- 7.5
Which TestFlight build has consent gateOpsBoth
Unknown which build first shipped the parental consent modal — check App Store Connect build history vs git tags. Pending
- 7.6
Cleaned git history force-pushedOpsOwner
Previous team was supposed to remove committed secrets from history — owner confirms with previous team / GitHub. Pending
- 7.7
Written IP transfer on final paymentLegalOwner
Formal ownership transfer of code, designs, and assets — legal/handover dependency, not engineering. Legal
Approved add-on — Digital reading mode
- DM
Digital reading mode MVP (in-app reader)FeatureDeveloper
Owner-approved week 3 work — URL paste, backend article extract, in-app reading with existing WebRTC tutor + auto page turn. Not in original handover numbering. Approved
Already built (inventory)
- —
Live camera + OCR + WebRTC tutorShipped—
Core product loop: point camera at book, on-device OCR, Realtime voice tutor listens and coaches pronunciation. Built
- —
Scan → OCR → ReadingPage flowShipped—
Photograph pages, compile a digital book, read pre-extracted text with the same tutor stack — manual scan steps. Built
- —
Profiles, level analysis, progressShipped—
Child profiles with reading level assessment, session history, goals, and weekly progress reporting. Built
- —
Local notifications (Notifee)Shipped—
On-device alerts and scheduled notifications via Notifee — works locally only. Built
- —
Push registration stub (dummy token)BugDeveloper
App registers fake device tokens with the API — implies push works but nothing can be sent. Fixed by building 6.3a. Test
- —
Apple + Google sign-in, consent UIShipped—
Social auth and consent modal exist in code — live verification still open (see 6.5b). Unverified
- —
IAP + Google RTDNShipped—
Google Play subscriptions with server-side RTDN — Apple server notifications still missing (see 6.3b). Partial
- —
Admin dashboard (lektureadmin)Shipped—
React admin UI on the API droplet — functional but weak auth (see 6.2c). Built
- —
EAS / cloud iOS build pipelineShipped—
Expo EAS builds iOS without a Mac — baseline build 18 (23); ignore owner experiments 18 (31)/(33). Built
- —
TestFlight betaShippedBoth
Live TestFlight staging — developer builds; owner manages App Store Connect testers. Live
Recommended
Build order
1
Confirm account invites — GitHub done; Apple, Google, DO logins verified.
2
Security lockout P0 — SSH keys, disable root password, rotate OpenAI / JWT / DB / SMTP. Lock out previous team.
3
Cherry-pick §4 commits onto v4 — unified VAD, Pause/Prompt/Praise, read-ahead ban.
4
Fix backend read-ahead leak in openai.service.ts deploy.
5
Round-two tutor — leniency band, age/grade via profileId.
6
TestFlight build → owner child QA.
7
Digital reader MVP — URL paste, article extract, in-app reading + tutor + auto page turn.
8
COPPA + stability — store:false, PII logs, disable synchronize, plan values.
9
Pre-launch backlog — push, Apple ASN, Play declarations, Share/PDF extensions.
Sources
References
Lekture - New Developer Handover and Work Package.docx — August 2026
- Owner messages — TestFlight baseline, tutor priorities, digital mode thread
- Repo audit —
lekture-mobile-app @ v4, lekture-api @ v3
- Commits
b0807d5, 1264b1d on ai-tutor-round1
- Workspace
AGENTS.md — dual-platform rule