
Virtualy
AI voice-coaching platform for realistic roleplay practice

AI-powered Chrome Extension that turns hours of Upwork applicant screening into minutes
Designed and built a full-stack Chrome Extension that integrates directly into Upwork's recruiter interface to automate applicant screening using AI. The extension analyzes freelancer proposals, assigns risk scores, detects red and green flags, and injects AI-generated scores directly into the Upwork dashboard — eliminating hours of manual review per job post. Built with a Firebase backend handling authentication (Google, Facebook, Apple), real-time credit management, RevenueCat/Stripe payment processing, Klaviyo email marketing automation, and an affiliate referral system. The product is live on the Chrome Web Store and serving paying customers.
Upwork recruiters posting jobs receive dozens to hundreds of freelancer applications per listing. Manually reading each proposal, evaluating portfolios, checking for red flags, and comparing candidates is an exhausting, time-consuming process that often leads to poor hiring decisions due to reviewer fatigue. Recruiters needed a way to quickly identify the best candidates without sacrificing evaluation quality. The solution also had to work seamlessly within Upwork's existing interface — recruiters shouldn't have to leave their workflow or copy-paste data into external tools.
Built a Chrome Extension using Manifest V3 that injects directly into Upwork's recruiter dashboard. The extension scrapes applicant proposal data from the page, sends it to Firebase Cloud Functions for AI analysis using GPT-4, and receives back scored results with detailed red/green flag breakdowns. Scores are injected back into the Upwork DOM so recruiters can see AI ratings alongside native Upwork data. Implemented a credit-based monetization model with RevenueCat/Stripe for payments, Firebase Auth supporting Google, Facebook, and Apple sign-in, and Klaviyo for automated email marketing flows. Added advanced features like Sherlock Deep Research for in-depth candidate profiling, personalized message generators for outreach and rejections, and an intelligent caching layer to minimize API costs.
Chrome Extension + Firebase Auth integration across 3 OAuth providers
Built a dual-method auth flow using chrome.identity.getAuthToken with launchWebAuthFlow fallback, supporting Google, Facebook, and Apple sign-in with custom token generation on the backend
Injecting AI scores into Upwork's dynamically-loaded DOM
Developed a content script with MutationObserver that detects applicant cards as they load, matches them to cached analysis results, and injects score badges without breaking Upwork's UI
Managing credit-based billing with atomic transactions
Implemented Firestore atomic transactions for credit deduction and addition, with deficit protection, idempotency checks on purchases, and a RevenueCat webhook with HMAC-SHA256 verification
Stripe price immutability when updating product pricing
Created versioned product identifiers (v2) in both RevenueCat and Stripe, updated offering configurations, and maintained backward compatibility in webhook handlers
Non-blocking third-party integrations (Klaviyo, affiliates) in critical paths
Implemented fire-and-forget pattern with 5-second AbortController timeouts, email guards, and 24-hour cooldowns to prevent event spam while ensuring core operations never fail due to third-party outages



