Project 2 of ~34
π Interview Ace β Architecture
Technical specification for Interview Ace β daily AI-powered interview practice via Telegram/email, with job posting scrapers and personalized feedback.
Telegram Bot
Resume Parsing
Job Scraping
Mac-native
Interview Ace has three main backend systems: (1) a Telegram bot that handles user interactions, (2) a scraper service that collects job postings, and (3) an AI pipeline that generates questions and feedback. All run on the Mac Mini or Deno Deploy.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER INTERFACE β
β ββββββββββββββββ βββββββββββββββ βββββββββββ β
β β Telegram Bot β β Email Flow β β Web UI β β
β β (Primary) β β (Fallback) β βDashboardβ β
β ββββββββ¬ββββββββ ββββββββ¬βββββββ βββββ¬ββββββ β
ββββββββββββΌβββββββββββββββββββΌββββββββββββββΌβββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β APPLICATION CORE (Deno) β
β ββββββββββββββ ββββββββββββββ ββββββββββββββββ β
β β User Mgmt β βQuestion Gen β β Feedback Eng β β
β β (Supabase) β β AI Pipeline β β AI Pipeline β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββββ β
β ββββββββββββββ ββββββββββββββ ββββββββββββββββ β
β β Daily Queueβ β Resume Parseβ β Score Trackerβ β
β β (QStash) β β (Ollama) β β (Redis) β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββ ββββββββββββββββββββββββββββ
β SCRAPER SERVICE β β DATA STORES β
β (Playwright/Cheerioβ β ββββββββββββββββββββββββ β
β on Mac Mini) β β β Supabase (Postgres) β β
β βββββββ β Users, Questions, β β
β ββββββββββββββββββ β β β Answers, Feedback, β β
β β LinkedIn API β β β β Job Postings Cache β β
β β Indeed API β β β ββββββββββββββββββββββββ β
β β Glassdoor β β β ββββββββββββββββββββββββ β
β β Company Pages β β β β Upstash Redis β β
β ββββββββββββββββββ β β β Sessions, Queues β β
βββββββββββββββββββββββ β ββββββββββββββββββββββββ β
β ββββββββββββββββββββββββ β
β β Cloudflare R2 β β
β β Resume PDF storage β β
β ββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββ
REST API for dashboard, webhook endpoints for Telegram and scraping callbacks.
User Management
POST /auth/signupEmail + password signup, returns JWT
POST /auth/telegram/linkLink Telegram account. Body: {telegram_chat_id, verify_code}
GET /users/me/profileGet current user's profile
PATCH /users/me/profileUpdate profile (targets, delivery prefs)
Resume
POST /users/me/resumeUpload resume PDF. Stores in R2. Triggers async parsing.
GET /users/me/resume/parsedGet parsed resume JSON (skills, experience, education)
Questions & Practice
POST /questions/answerSubmit answer to a question. Body: {question_id, answer_text, voice_base64?}. Returns async job ID.
GET /questions/:id/feedbackGet feedback for a completed question
GET /questions/todayGet today's question for current user
Company Pipeline
GET /pipelineList all companies in user's pipeline
POST /pipelineAdd company to pipeline
PATCH /pipeline/:idUpdate stage or interview date
Dashboard
GET /dashboard/summaryOverall progress: total answered, avg score, streak, weakest areas
GET /dashboard/report/:companyPrep report for a specific company
Webhooks (Internal)
POST /webhooks/telegramTelegram bot webhook. Receives all Telegram events.
POST /webhooks/scraper/:companyTriggered by scraper when new job posting found.
LinkedIn Scraping
Use RapidAPI LinkedIn Job Search API (~$30/mo) for reliable job data. Falls back to direct scraping with Playwright on Mac Mini if quota allows. Extract: title, company, description, skills, salary (if available), posted date.
Indeed Scraping
Cheerio parser on Indeed RSS feed + search pages. Rate limit: 1 request/minute per IP. Extract: title, company, description, salary range. No JS rendering needed.
Glassdoor Interview Data
Playwright on Mac Mini. Extract interview questions from company reviews (publicly available). This data is the differentiator β real questions real candidates were asked. Respect robots.txt.
Company Career Pages
For target companies (Apple, Stripe, etc.), Cheerio scrapes their careers page directly. Weekly check for new postings. Cache for 24hrs.
Scraper Schedule
Cron job (Upstash QStash): Weekly full re-scrape of all target companies. Daily delta check for new postings. Mac Mini can run scraper scripts via deno task scrape nightly.