AI-powered mock interview practice — turning every candidate's real ability into real career opportunities.
- Vision & Founder Why
- Target Customer & User Persona
- MVP Hypothesis & Prototype
- Key MVP Features
- System Architecture
- Business Flow Diagrams
- Monetization & Payment System
- Getting Started & Monorepo Development
- Success Metrics
- Documentation References
Interviews are high-pressure, unfair gatekeepers of opportunity. Many capable candidates fail to showcase their true potential — not because they lack ability, but because they lack structured practice, immediate feedback, and confidence under pressure. Today, interview coaching is either too expensive, too generic, or unavailable when people need it most.
Many individuals are fully qualified and capable but fail to perform effectively under traditional interview conditions.
AI technology enables realistic, personalized, and highly scalable mock interview practice with instant feedback — which was previously either too expensive or inaccessible.
To help candidates transform their actual ability into real career opportunities by making interview preparation accessible, measurable, and outcome-driven.
A 24-year-old recent college graduate applying for their first serious full-time professional role.
| Attribute | Detail |
|---|---|
| Background | Strong GPA, relevant projects & internship experience |
| Interview Experience | Low — lacks exposure to high-pressure live professional interviews |
| Preparation Method | YouTube videos, static question lists (passive, unstructured) |
| Feedback Access | No coach; friends can only help occasionally |
| Core Feeling | "I could have done better, but I don't know exactly how" |
- Unstructured Preparation — Passive resources (YouTube, question lists) don't build real-time communication skills.
- Delivery & Formatting — Struggles with rambling, structuring answers (STAR method), and connecting experience to the role.
- Feedback Deficit — No access to professional career coaches; peer feedback is brief and subjective.
- Anxiety & Lack of Confidence — Exits interviews with a vague sense of underperformance and no actionable path to improve.
If we provide candidates with a realistic, interactive, and repeatable mock interview environment powered by role-specific AI, they will build structured communication habits and increase their self-confidence — leading to higher interview pass rates.
- Platform URL: https:// (To Be Determined)
- Tech Stack:
- Frontend: Astro (
apps/landing-page), React / Vite (apps/dashboard) - Backend: Hono / Node.js (
apps/backend) - TTS Microservice: Python Supertonic 3 ONNX Server (
apps/supertonic) - Video Marketing: Remotion (
apps/remotion) - Database: Supabase (PostgreSQL) with
question_bankseed repository
- Frontend: Astro (
- Core Functionality:
- Role-specific interactive question generation seeded by
question_bank& JD - On-device / local Supertonic 3 TTS synthesis with background pre-fetching for zero-latency speech
- Voice-only mock response capture
- Actionable feedback on structure (STAR method), clarity, and relevance
- Role-specific interactive question generation seeded by
- Select target role (e.g., Software Engineer, DevOps, Product Manager).
- AI queries
question_banktable (role, category, difficulty) combined with user JD to seed relevant technical & behavioral questions.
- AI generates questions sequentially based on role, JD, and question bank context.
- Candidates respond via voice only (Speech-to-Text with phoneme and technical vocabulary refiner).
- Realistic pacing with background audio pre-fetching (
supertonic.preload) ensuring zero-latency speech playback upon session start and countdown.
- Analyzes answers for structure (STAR method), relevance, and brevity.
- Highlights rambling or points lacking specific evidence.
- Provides a revised version — "What you could have said" — to guide improvement.
- Python-based ONNX microservice running
supertonic serve(POST /v1/audio/speech). - Supports preset voices mapped via
SupertonicVoice(e.g.F1for Lily,F2for Sarah). - Client module in
apps/dashboardmanages background audio pre-fetching to eliminate speech synthesis playback delay.
- Architecture: TypeScript codebase powered by Hono for HTTP REST API routing.
- REST HTTP Endpoints:
GET /health- Health check endpoint.POST /api/interview/start- Starts a mock interview session.POST /api/interview/answer- Evaluates user answer and generates next question.POST /api/interview/finish- Finalizes session score and metrics.POST /payments/create-checkout- Generates a secure checkout payment link using Mayar API.POST /webhook/mayar- Receives payment status updates from Mayar.
flowchart LR
subgraph User["👤 Candidate (Browser / App)"]
U1[Role Selection]
U2[JD Input]
U3[Answer Input\nText / Voice]
end
subgraph Backend["⚙️ Backend"]
B1[Session Manager]
B2[Question Generator]
B3[Answer Analyzer]
B4[Progress Tracker]
end
subgraph AI["🤖 AI Engine"]
A1[Role-Specific\nQuestion Model]
A2[Answer Evaluation\nSTAR · Clarity · Relevance]
A3[Feedback & Suggestion\nGenerator]
end
subgraph Storage["🗄️ Database (Supabase)"]
S1[User Profiles]
S2[Session History]
S3[Score & Progress]
end
U1 & U2 --> B1
B1 --> B2
B2 --> A1
A1 --> U3
U3 --> B3
B3 --> A2
A2 --> A3
A3 --> B4
B4 --> S2 & S3
B4 --> User
erDiagram
users {
uuid id PK
string email UK
string full_name
string role "e.g., student, job_seeker, admin"
string tier "e.g., free, pro, b2b"
string subscription_status "e.g., active, inactive, canceled"
string target_role "e.g., software_engineer"
text job_description "Default job description template"
timestamp created_at
timestamp updated_at
}
organizations {
uuid id PK
string name
string subscription_tier "e.g., b2b"
integer max_members
timestamp created_at
timestamp updated_at
}
organization_members {
uuid id PK
uuid organization_id FK
uuid user_id FK
string role "e.g., admin, member"
timestamp created_at
}
subscriptions {
uuid id PK
uuid user_id FK "Nullable (for B2B/Team)"
uuid organization_id FK "Nullable (for individual Pro)"
string tier "e.g., pro, b2b"
string status "e.g., active, past_due, canceled, unpaid"
decimal price
string billing_cycle "e.g., monthly, yearly"
timestamp current_period_start
timestamp current_period_end
boolean cancel_at_period_end
timestamp created_at
timestamp updated_at
}
payments {
uuid id PK
uuid subscription_id FK
uuid user_id FK
string invoice_id
string payment_gateway "e.g., mayar"
string transaction_id
decimal amount
string status "e.g., pending, settlement, capture, expire, refund"
string payment_method "e.g., gopay, qris, credit_card, va"
timestamp paid_at
timestamp created_at
}
mock_interviews {
uuid id PK
uuid user_id FK
string target_role
text job_description "Nullable"
string status "e.g., started, completed, abandoned"
integer pre_confidence_score "1-5"
integer post_confidence_score "1-5"
integer overall_score "0-100"
timestamp created_at
timestamp completed_at
}
interview_questions {
uuid id PK
uuid mock_interview_id FK
text question_text
integer sequence_number
timestamp created_at
}
interview_answers {
uuid id PK
uuid interview_question_id FK
text answer_text
string response_mode "e.g., text, voice"
integer voice_duration_seconds "Nullable"
timestamp created_at
}
ai_feedbacks {
uuid id PK
uuid interview_answer_id FK
integer structure_score "0-100"
integer relevance_score "0-100"
integer brevity_score "0-100"
integer overall_score "0-100"
text feedback_text
text highlights_rambling
text what_you_could_have_said
timestamp created_at
}
question_bank {
uuid id PK
string target_role
string category
string difficulty "e.g., easy, medium, hard"
text question_text
text_array expected_points
text sample_star_answer "Nullable"
boolean is_active
timestamp created_at
timestamp updated_at
}
users ||--o{ organization_members : "belongs to"
organizations ||--o{ organization_members : "contains"
users ||--o{ subscriptions : "owns"
organizations ||--o{ subscriptions : "owns"
subscriptions ||--o{ payments : "has"
users ||--o{ payments : "makes"
users ||--o{ mock_interviews : "takes"
mock_interviews ||--o{ interview_questions : "contains"
interview_questions ||--o| interview_answers : "has"
interview_answers ||--o| ai_feedbacks : "receives"
flowchart TD
A([Candidate]) --> B[Discover Interview Masters]
B --> C{Has Account?}
C -- No --> D[Sign Up]
C -- Yes --> E[Log In]
D --> E
E --> F[Dashboard]
F --> G[Setup Interview Session]
G --> H[Select Target Role]
H --> I[Paste / Upload Job Description]
I --> J[Start Mock Interview]
J --> K[AI Generates Question]
K --> L[Candidate Answers\ntext or voice]
L --> M{More Questions?}
M -- Yes --> K
M -- No --> N[AI Evaluates All Answers]
N --> O[Feedback Report\nstructure · clarity · relevance]
O --> P{Satisfied?}
P -- No / Want More Practice --> G
P -- Yes --> Q[Track Progress & Score History]
Q --> R([Ready for Real Interview])
flowchart TD
P1([Practice Session]) --> P2[AI Feedback Report]
P2 --> P3{Identify Weak Areas}
P3 --> P4[Targeted Re-practice\non weak topics]
P4 --> P1
P2 --> P5[Score & Progress Log]
P5 --> P6[Progress Dashboard]
P6 --> P7([Interview Readiness Score])
flowchart TD
M1([Candidate]) --> M2{Tier}
M2 -- Free --> M3[1 Mock Interview / Month\nBasic Feedback]
M2 -- Starter Pass --> M3b[3 Mock Interviews / Package\nSekali Bayar Rp 9.000]
M2 -- Pro --> M4[Unlimited Sessions\nRp 29.000/Month\nAdvanced Feedback\nRole-Specific Deep Dive\nProgress Analytics]
M2 -- Team / B2B --> M5[Bulk Licenses\nHR Dashboard\nCandidate Tracking\nWhite-label Option\n*Link Hidden for MVP*]
M3 & M3b --> M6{Upgrade to Pro?}
M6 -- Yes --> M4
M3b --> M7[Revenue: Pay-per-use]
M4 --> M8[Revenue: Subscription]
M5 --> M9[Revenue: B2B Contract]
| Tier | Price | Quota | Target User |
|---|---|---|---|
| Free | Rp 0 / month | 1 mock interview/month, basic feedback | First-time users, perkenalan awal |
| Starter Pass (Pay-per-use) | Rp 9.000 / package | 3 mock interviews (masa aktif 1 bulan), umpan balik instan & terstruktur | Candidate kepepet interview & anti-berlangganan (sekali bayar) |
| Pro (Most Popular) | Rp 29.000 / month | Unlimited sessions, advanced AI feedback, progress analytics, role deep-dive | Active job seekers (latihan rutin sepuasnya) |
| Team / B2B (Link Hidden for MVP) | Custom | Bulk licenses, HR dashboard, candidate tracking, white-label | Bootcamps, universities, enterprise HR |
flowchart TD
P1([Candidate]) --> P2{Choose Plan}
P1 --> P2
P2 -- Free --> P3[Create Account\nFree Tier Activated\n1 session/month]
P2 -- Starter Pass --> P3b[Checkout Page\nRp 9.000 / package]
P2 -- Pro --> P4[Checkout Page\nRp 29.000/month]
P2 -- B2B --> P5[Contact Sales\nCustom Quote & Invoice]
P3b & P4 --> P7[Mayar Gateway]
P7 --> P10{Payment Status}
P10 -- Success --> P11[Webhook: Payment Confirmed]
P10 -- Failed --> P12[Retry / Change Method]
P12 --> P4
P11 --> P13[Backend: Activate Pro Entitlement]
P13 --> P14[User Dashboard\nPro Features Unlocked]
P5 --> P15[Invoice Sent]
P15 --> P16[Bank Transfer / Corp Card]
P16 --> P17[Manual Verification\nby Finance Team]
P17 --> P13
stateDiagram-v2
[*] --> Free: Sign Up
Free --> Checkout: Upgrade to Pro
Checkout --> Pro: Payment Success
Checkout --> Free: Payment Failed
Pro --> Renewing: Monthly Auto-Renewal
Renewing --> Pro: Renewal Success
Renewing --> Cancelled: Renewal Failed / User Cancels
Cancelled --> Free: Downgrade to Free Tier
Free --> [*]: Account Deleted
Pro --> [*]: Account Deleted
- 🇮🇩 Primary Subscription Billing: Mayar — supports local Indonesian payment methods (QRIS, VA, credit cards, e-wallets) with native integration.
- Pro users can cancel anytime; access remains until end of the billing cycle.
- Refund available within 3 days of first charge if no sessions were consumed.
- Node.js: v18+ and
pnpm(npm i -g pnpm) - Python: v3.10+ (for
apps/supertonicONNX TTS microservice) - Supabase: PostgreSQL database with
.env.localconfigured
# Option A: Run via Docker Compose (All services in containers)
docker compose up --build
# Option B: Run locally via pnpm
pnpm install
# Start all applications concurrently (Landing, Dashboard, Backend, Supertonic TTS)
pnpm dev
# Run individual applications
pnpm dev:landing # Astro Landing Page (http://localhost:4321)
pnpm dev:dashboard # Candidate Dashboard (http://localhost:5173)
pnpm dev:backend # Hono REST API Server (http://localhost:5005)
pnpm dev:supertonic # Python Supertonic 3 TTS Server (http://127.0.0.1:7788)
pnpm dev:remotion # Remotion Motion Graphics Studio
# Database Migrations
pnpm db:migrate # Apply Supabase schema migrations| Metric | Description |
|---|---|
| Completion Rate | % of users who finish a started mock interview |
| Repeat Engagement | Number of mock interviews practiced per user |
| Performance Progression | Average improvement score across multiple sessions |
| Confidence Rating | Self-reported confidence score before vs. after practice |
| File | Description |
|---|---|
| docs/PRD.md | Full Product Requirements Document |
| docs/ERD.md | Database Entity Relationship Diagram (ERD) |
| AGENTS.md | AI Agent Rules, Philosophy, and System Context |
| apps/remotion/STORYBOARD.md | Motion Graphics Storyboard & Video Script Breakdown |
