Skip to content

electro-geek/PrepStudio

Repository files navigation

PrepStudio

AI-powered study and voice interview preparation platform.

PrepStudio takes a topic and a deadline, builds a personalized day-by-day study curriculum, generates deep technical reading material, teaches it to you through an interactive ElevenLabs voice tutor, runs a full voice interview conducted by an AI interviewer, and gives you a detailed performance report — all saved to your account.


What Makes PrepStudio Different

Most study tools are passive. PrepStudio is not.

Two ElevenLabs Conversational AI agents are at the core of the experience:

  • Nova — an AI tutor who teaches each topic to you by voice. She doesn't read the article aloud; she explains it with analogies, examples, and real-time Q&A. You can interrupt her mid-lesson and ask anything.
  • Alex — an AI interviewer who conducts a full technical voice interview based on your study plan. He asks questions one at a time, listens to your spoken answers, and when the interview is done, Gemini evaluates your complete transcript and generates a personalised score report.

Both agents are created dynamically per session with a custom system prompt injected at runtime — personalised to exactly what you are studying.


Features

AI Study Plans

Tell PrepStudio what you want to learn and how many days you have. Gemini 2.5 Flash builds a complete day-by-day curriculum — each day broken down into specific topics with balanced, realistic session lengths. Your plan is saved to your account and accessible every time you return.

Deep Topic Readings

Open any topic and receive a full article-quality explanation: rich text with headings, code examples, analogies, and practical walkthroughs — generated by Gemini and permanently cached to your profile so the second load is instant.

Interactive Audio Lessons (ElevenLabs)

Click Audio Lesson on any topic page. PrepStudio creates a live ElevenLabs Conversational AI agent — Nova — with the full topic content as her context. She teaches the material conversationally, adapts to your questions, and wraps up with three key takeaways. The session is fully bidirectional: speak to her at any time.

AI Voice Interviews (ElevenLabs + Gemini)

Click Start Voice Interview from your plan. The backend generates eight technical questions using Gemini, then creates a second ElevenLabs agent — Alex — who conducts the interview entirely by voice. When the interview concludes, the full conversation transcript is evaluated by Gemini, which scores every answer and returns:

  • Overall score and grade
  • Strengths and improvement areas
  • Per-question breakdown with individual scores and assessments

Article Refiner

From any topic page, open the article editor. Write rough study notes in plain text, hit Refine, and Gemini rewrites them into a polished, publication-ready Markdown article. Copy as full Markdown (for dev.to, Hashnode, or a personal blog) or as a formatted Twitter/X thread.

Persistent User Accounts

Firebase Authentication handles login with Google or email/password. Every plan, every piece of generated content, every article, and every interview result is stored in PostgreSQL under your user account. Nothing is lost between sessions.


Full User Flow

1. Sign Up / Log In
   └─> Firebase Auth (Google or email)

2. Dashboard
   └─> See all existing plans, progress bars, quick links to interviews

3. Create New Plan  (/new)
   └─> Enter topic + number of days
   └─> Gemini 2.5 Flash generates structured plan (days + topic titles)
   └─> Plan saved to DB, redirect to Plan View

4. Plan View  (/plan/:id)
   └─> All days with progress indicators
   └─> Click a day → see its topics
   └─> Click a topic → open Topic View

5. Topic View  (/plan/:id/day/:dayId/topic/:topicId)
   └─> Full content loaded (generated on first open, cached permanently)
   └─> Click "Audio Lesson" → ElevenLabs Nova tutor starts live voice session
   └─> Ask Nova questions, get real-time voice responses
   └─> Mark topic complete → updates day progress
   └─> Click "Write Article" → Article Editor

6. Article Editor  (/plan/:id/topic/:topicId/article)
   └─> Type rough notes in plain text
   └─> Click "Refine" → Gemini returns polished Markdown + Twitter thread

7. Voice Interview  (/plan/:id/interview)
   └─> Select number of questions (2, 4, or 8)
   └─> ElevenLabs Alex interviewer asks for introduction, then questions
   └─> Speak answers naturally — full voice conversation
   └─> Alex says INTERVIEW_COMPLETE when done
   └─> Gemini evaluates full transcript
   └─> Score, grade, strengths, improvements, per-question breakdown displayed
   └─> Can retake at any time

Tech Stack

Layer Technology
Frontend Next.js 14, TypeScript, Tailwind CSS
State Zustand, TanStack Query
Backend FastAPI, Python 3.10, SQLAlchemy 2.0 (async)
Database PostgreSQL (Nile DB)
Auth Firebase Authentication (Google OAuth + email)
AI — Content Google Gemini 2.5 Flash
AI — Voice ElevenLabs Conversational AI (@11labs/react)
Deployment Vercel (frontend) + custom backend host

Getting Started

Prerequisites

  • Node.js 18+
  • Python 3.10+
  • A Firebase project with Authentication enabled
  • A Gemini API key — Google AI Studio
  • An ElevenLabs API key — elevenlabs.io (ElevenAgents: Write permission required)
  • A PostgreSQL database (Nile DB free tier works)

Clone and Install

git clone https://github.com/yourname/PrepStudio
cd PrepStudio

# Frontend
cd frontend
npm install

# Backend
cd ../backend
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt

Configure Environment

Copy backend/config.properties.example to backend/config.properties and fill in:

DATABASE_URL=postgresql+asyncpg://...
GEMINI_API_KEY=your_gemini_key
ELEVENLABS_API_KEY=your_elevenlabs_key
FIREBASE_PROJECT_ID=your_project_id
FIREBASE_CLIENT_EMAIL=...
FIREBASE_PRIVATE_KEY=...

For the frontend, create frontend/.env.local:

NEXT_PUBLIC_API_URL=http://localhost:8000
NEXT_PUBLIC_FIREBASE_API_KEY=...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=...
NEXT_PUBLIC_FIREBASE_PROJECT_ID=...

Run Locally

# Terminal 1 — Backend
cd backend && uvicorn app.main:app --reload --port 8000

# Terminal 2 — Frontend
cd frontend && npm run dev

Open http://localhost:3000.


Project Structure

PrepStudio/
├── frontend/                  # Next.js 14 app
│   └── src/
│       ├── app/               # Routes (App Router)
│       │   ├── page.tsx       # Landing page
│       │   ├── dashboard/     # User dashboard
│       │   ├── new/           # Plan creation
│       │   └── plan/[id]/     # Plan, topic, interview views
│       ├── components/        # Shared UI components
│       ├── hooks/             # useVoice, useElevenLabsConversation
│       ├── lib/               # Firebase init, Axios API client
│       └── store/             # Zustand stores (auth, interview)
│
└── backend/                   # FastAPI app
    └── app/
        ├── core/              # Config, DB session, Firebase auth middleware
        ├── models/            # SQLAlchemy ORM models
        ├── schemas/           # Pydantic request/response types
        ├── routers/           # plans, topics, articles, interviews
        └── services/          # gemini_service, elevenlabs_service

API Reference

All routes require Authorization: Bearer <firebase_id_token>.

Method Route Description
POST /plans Create plan — triggers Gemini curriculum generation
GET /plans List all plans for the authenticated user
GET /plans/:id Full plan with days and topics
GET /topics/:id Topic content (lazy-generated by Gemini, then cached)
PATCH /topics/:id/complete Toggle topic complete
POST /topics/:id/lesson-session Create ElevenLabs Audio Lesson session
POST /articles Save raw article text
POST /articles/:id/refine Refine article to Markdown + Twitter thread via Gemini
POST /interviews Start text-based interview session
POST /interviews/:id/answer Submit answer, get next question + score
POST /plans/:id/voice-interview-session Create ElevenLabs Voice Interview session
POST /interviews/:id/evaluate-transcript Evaluate full voice interview transcript via Gemini
GET /interviews/:id Full interview result with score and feedback

ElevenLabs Integration

PrepStudio uses ElevenLabs Conversational AI for two features:

Audio LessonsPOST /topics/:id/lesson-session The backend fetches the topic content, builds a system prompt instructing Nova to teach rather than recite, then calls the ElevenLabs Agents API to create a live agent and returns a signed WebSocket URL. The frontend connects using @11labs/react.

Voice InterviewsPOST /plans/:id/voice-interview-session The backend generates questions via Gemini, creates an Alex interviewer agent with those questions embedded in the system prompt, and returns a signed WebSocket URL. The frontend runs the full interview via voice. When Alex says INTERVIEW_COMPLETE, the transcript is sent to Gemini for evaluation.

Required ElevenLabs API permission: ElevenAgents → Write.


Why voice

The core thesis: voice makes learning stick. Reading about a topic is passive. Being asked to explain it aloud — under the pressure of a real-sounding interviewer — is how you find out what you actually know.

About

Prep Studio

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors