TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
לומדים ספרדית בשיחה אמיתית עם מורה וירטואלית
Translation pending
EducationGitHub @elazar1997OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Spanish conversation practice for Hebrew speakers, with two virtual teachers (Lucía and Vale) and real-time voice. Invite-only beta, 18+.
Stack: Next.js 16 on Vercel, Supabase (Auth + Postgres), OpenAI Realtime API over WebRTC.
/api/realtime/session to start a call (Supabase session cookie).start_session), and reserves the worst-case cost./api/realtime/end bills the real time (capped by the server clock), books the cost, and stores the transcript encrypted with AES-256-GCM.| Limit | Default | Where |
|---|---|---|
| Talk time per user per day (Israel time) | 15 min | DAILY_LIMIT_MINUTES |
| Longest single call | 10 min | MAX_SESSION_MINUTES |
| Monthly API budget | $50 | MONTHLY_BUDGET_USD |
| New calls blocked at | 90% of budget ($45) | BUDGET_BLOCK_RATIO |
| Cost booked per minute (at least) | $0.10 | RESERVE_USD_PER_MINUTE |
| Transcript retention | 30 days | pg_cron job in the migration |
The booked cost per call is the larger of the client-reported token cost and the per-minute estimate, so the cap holds even if a client lies. As a second safety net, set a budget limit on the OpenAI project that owns the key.
supabase/migrations (SQL editor, or npx supabase db push).
<APP_URL>/** to Redirect URLs./auth/callback handles Supabase's default links..env.example to .env.local and fill it in. On Vercel, add the same variables and mark secrets as Sensitive.node --env-file=.env.local scripts/create-invite.mjs [email protected] "beta wave 1".PERSONA_TEST_KEY (24+ random characters, Sensitive, Preview only), then open <PREVIEW_URL>/api/admin/persona-test?key=.... A second model plays a learner through each scenario in src/lib/persona-test.ts and the endpoint returns the transcripts. Add &persona=vale or &scenario=injection to run one.npm run dev # local dev server
npm test # unit tests (crypto, cost)
npm run lint
npm run typecheck
npm run build