Back to work
02 / Case study

FoloUp AI

An AI-powered interview platform that combines LLM-driven interview flows, conversational voice, organization-aware authentication and persistent application data.

Next.jsTypeScriptClerkSupabaseRetell AI

The problem

Interview practice often breaks into separate pieces: a user configures an interview, reads generated questions, talks through answers and then loses continuity between those steps. FoloUp explores a single product workflow where AI, voice and application state work together.

The outcome

The product connects interview setup, AI-generated interaction, conversational voice and persistent data into one full-stack experience. The result is an application architecture designed around a continuous interview workflow rather than isolated AI features.

The approach

I used Next.js and TypeScript for the application layer, Clerk for authentication and organization-aware access, Supabase for persistence, OpenAI for AI capabilities and Retell AI for conversational voice. The important part was not any single API—it was making multiple external services behave like one coherent product.

User ↓ Clerk authentication / organization ↓ Next.js + React application ↓ Interview workflow ↙ ↘ OpenAI Retell AI AI reasoning Voice conversation ↘ ↙ Application state + Supabase ↓ Persistent interview data

What I built

Next.js + React application
TypeScript product architecture
OpenAI integration
Retell AI conversational voice
Clerk authentication
Clerk organizations / org-aware workflows
Supabase persistence
AI-powered interview workflow

The integration stack

The product is strongest when its services are viewed as one workflow. Each integration has a clear responsibility, while the Next.js application connects those responsibilities into the user experience.

AI layerOpenAI

LLM-powered interview experiences.

Voice layerRetell AI

Conversational interview interaction.

IdentityClerk

Authentication and organization-aware access.

DataSupabase

Persistent application and interview data.

Engineering decisions

The engineering focus was integration boundaries. Authentication should remain an identity concern, Supabase should own persistence, AI services should handle intelligence and voice should remain a conversational interface. Keeping those responsibilities separate makes failures easier to isolate and future changes less invasive.

Integration challenges

Working across AI, voice, authentication and persistence creates failure points at the boundaries. These were the areas I treated as engineering problems rather than simply SDK setup.

Multi-service integration

When several external systems participate in one user flow, an issue in one integration can look like a frontend, auth or data problem. I learned to isolate each boundary and verify the request and response contract before changing application logic.

Authentication + organizations

The product needed more than a simple login. Clerk organization context had to align with the application workflow so authenticated users reached the correct product experience.

AI workflow state

AI output is only useful when it fits the surrounding application state. The interview flow therefore has to treat generated content as part of a product workflow rather than as an isolated model response.

Voice integration

Conversational voice adds another asynchronous service boundary. Retell AI had to fit naturally into the interview experience without making the rest of the application depend on voice-specific implementation details.

What I learned

FoloUp reinforced a practical AI engineering lesson: building an AI product is mostly systems integration. The model or voice API is only one component; authentication, state, persistence, failure handling and user experience determine whether the feature becomes a reliable product.