
CakeOrFake — AI-Powered Upwork Applicant Screening Chrome Extension
AI-powered Chrome Extension that turns hours of Upwork applicant screening into minutes

AI voice-coaching platform for realistic roleplay practice
Multi-tenant B2B SaaS where organizations train their people through AI-driven voice roleplay. Learners practice real conversations with AI clients, get auto-scored against rubrics, and managers track readiness across cohorts.
Coaching soft skills at scale is expensive and inconsistent — async role-play gives no objective feedback, and managers can't see who's improving or who's stalled across large cohorts.
AI agents run realistic voice roleplay scenarios, score each session against custom rubrics, and roll results up into manager-facing cohort analytics. Everything is multi-tenant — each organization gets isolated data, branding, and role-based access for org-admins, managers, and students.
Providing low‑latency, two‑way voice interaction for dozens of simultaneous learners while keeping costs under control.
Implemented a Vercel Edge Function that acts as a thin proxy to the Gemini Live API. The function streams audio chunks directly to the client, avoiding a full round‑trip through the backend. Tenant IDs are attached to each request and used to select the appropriate API credential stored in Firebase Remote Config. To prevent overload, a simple token bucket limits concurrent streams per tenant, and excess connections receive a polite retry response. This design keeps latency under 300 ms for 95 % of sessions and scales with Vercel’s automatic edge replication.
Ensuring strict data isolation between organizations in a shared Firestore database.
Created a top‑level collection named "tenants" where each tenant ID hosts its own sub‑collections for users, sessions, and rubrics. Security rules check the requester's custom claim against the tenant ID in the document path, rejecting any cross‑tenant access. For writes that affect many documents (e.g., bulk rubric updates) used batched writes limited to 500 operations per batch to stay within Firestore limits. Added composite indexes for common queries like "sessions where score > 80 and tenant = X" to keep query times under 200 ms.
Scoring learner responses against complex rubrics without slowing down the user experience.
Moved the scoring logic to a Cloud Function triggered by Firestore writes. The function reads the rubric definition from a cached collection (stored in Firestore with a 5‑minute TTL) and runs the evaluation in parallel using Node 20 worker threads. Results are written back to the session document, and a Pub/Sub topic notifies the frontend via TanStack Query's subscription hook. This off‑loads heavy computation, reduces front‑end latency to under 150 ms, and keeps the function cost under $0.02 per thousand evaluations.
Rendering dashboards that show performance metrics for thousands of learners without freezing the browser.
Adopted TanStack Query with infinite scrolling and server‑side pagination for the learner list. Aggregated cohort statistics (average score, completion rate) are pre‑computed in a nightly Cloud Function and stored in a separate "metrics" collection. The dashboard fetches only the aggregated numbers and the current page of learners, then feeds the data into Recharts components that are lazy‑loaded with Vite's dynamic import. This approach caps initial bundle size at 120 KB and keeps frame rates above 55 fps on typical laptops.





AI-powered Chrome Extension that turns hours of Upwork applicant screening into minutes

Next.js launch slashed load time 45% and grew conversions 30%