The student app is live, verified, and ready to share at
learn.dreythomas.com. It's an invite-only AI mentor in your voice
that helps students learn, understand repos, and get unstuck — paste a Claude Code error, get the fix.
The only thing parked for later is your real cloned voice (it needs a ~45s recording from you).
Until then it speaks in a free male voice as the beta stand-in.
Shipped
Debugging mentor + broader help. Paste an error / stack trace / code → it names what broke, the first fix, then why. Now helps with repos, codebases, tools, Git/GitHub, not just AI theory. (d310c1f)
New welcome cards + paste flow. "Fix an error" and "I'm stuck" pre-fill the box so students paste their error then send; others send right away. (d310c1f)
Male voice. Swapped the free voice from thalia (female) to arcas (male) on the student app only — chat.dreythomas.com untouched. (6661eaa)
Self-host voice hook. Added TTS_PROXY_URL to /api/speak — set one env var and the app uses your future free clone. Inert until set. (72848d7)
Verified tonight
OK Production build green (tsc + next build, exit 0)
OK Push to Vercel Ready (deploy heq1zfaw2) to learn.dreythomas.com 200 to /api/speak 200 (male voice still works)
OK Enrollment gate: enrolled email to true, random email to false
OK Security pass earlier: every public Convex function checks auth + ownership; npm audit = 5 moderate transitive only (no safe fix)
Send it to students
Gate: each student's email must be enrolled first or they can't log in. Run from the repo (or hand me the emails):
npx convex run enrollments:enroll '{"email":"student@example.com"}' --prod
Then send them this (also texted to your phone):
Hey — I built you something. This is Pocket Drey, my AI mentor clone. It helps you learn AI, understand repos and code, and get unstuck — paste any Claude Code error and it'll tell you what broke and how to fix it, in my voice.
Getting in:
1. Go to learn.dreythomas.com (on your phone, tap Share then Add to Home Screen so it lives like an app)
2. Sign in with your email — you'll get a login code in your inbox, type it in
3. Start talking: ask anything, paste an error you're stuck on, or drop a repo you're working on. It remembers you between chats.
It's in beta, so if anything feels off, tell me. — Drey
The real voice — your call
It's free either way; the only input needed is a ~45s recording of you talking (any clone needs a voice sample). Two free-ish paths:
Path
Cost
Speed
Catch
Self-host on your DO box (Chatterbox / NeuTTS Air)
$0
~10–30s / reply
2 CPU, no GPU = slow; box is 93% full + memory-tight, and it runs your 1BB posting — we'd retire unused apps first (full audit in the morning report)
fal / Replicate (same free model, rented GPU)
~cents / reply
~1–2s
tiny pay-per-use; fast + reliable + zero maintenance
Honest read: your DO box is more loaded than expected (it serves 1BB posting + a few apps), so the free route means clearing room carefully. fal is near-free and instant. Either way the route's already wired — set TTS_PROXY_URL (self-host) or DREY_VOICE_ID (managed) and redeploy.
Open items — need you
~45s voice recording — the one unavoidable input for the clone.
Pick the voice host — free self-host (retire some DO apps first) vs fal pennies.
Student emails — send them and I'll enroll the first batch.
Resume this chat
Paste this into a new session to pick up exactly here:
Continue the Pocket Drey for Students voice work. State: app live + verified at learn.dreythomas.com (invite-only, debugging mentor + paste-your-error cards, free male "arcas" voice as beta). /api/speak now has a TTS_PROXY_URL hook (commit 72848d7) — set it to a self-hosted TTS endpoint to use a real clone; DREY_VOICE_ID is the managed-clone path. Decision pending: free self-host a clone (Chatterbox or NeuTTS Air) on my DO droplet (hermes) AFTER retiring unused apps — careful, it runs my 1BB posting (posting.1bbcommunity.com) + temporal is part of the postiz stack — OR use fal (pennies, instant). I will give you a ~45s voice recording; clone it, wire the route, deploy, and verify (push exit 0 → Vercel Ready → live 200 → /api/speak 200). Also enroll students via: npx convex run enrollments:enroll '{"email":"..."}' --prod. Full detail in ~/Desktop/MORNING-REPORT-POCKET-DREY.md.