
An LMS focused on interactive voice‑AI sessions, designed to scale and integrate onboarding, payments, user management, content, and error tracking. Sessions are low‑latency, multilingual, and customizable by subject, topic, and teaching style.
Clerk powers user and subscription management with embeddable components and centralized policies. Access is gated per plan/tier. Examples: auth().userId for the current user, currentUser() for profile data, hasActivePlan(userId) to guard premium features.
Vapi enables real‑time voice conversations with TTS/STT and model selection. Tutors are persisted with metadata (subject, topic, tone). Typical startup: new VapiClient({ token: process.env.NEXT_PUBLIC_VAPI_WEB_TOKEN }) and client.start({ assistant: ..., user: ... }).
Supabase provides managed Postgres with instant APIs and realtime channels for session state, user preferences, and tutor catalogs. Common pattern: createClient(url, anonKey) and typed CRUD with server‑side validation.
Accessible UI via Tailwind + shadcn/ui, dark mode, and composable primitives. Forms use React Hook Form with Zod resolvers for robust validation. Example: useForm({ resolver: zodResolver(schema) }) with z.object({ ... }) to keep client and server in sync.
Sentry captures errors and performance metrics with breadcrumbs and release tracking to accelerate debugging. Structured logs and UI boundaries make critical flows (auth, payments, AI session) resilient.
I implemented Clerk/Supabase/Vapi integrations, feature gating by plan, tutor flow definition and validations, plus Sentry observability and the shadcn/ui design system.