Inspiration

My elder sister was laid off from Google after giving it years of her life. She has always been my biggest source of inspiration, the person who showed me what working hard looks like. Watching someone that good get ignored by recruiters was hard to accept. Her problem was not talent, it was process: dozens of applications in a spreadsheet, follow-ups forgotten, no sense of what was working. Salespeople solved this decades ago with CRMs. Job seekers got guilt and browser tabs. So I built OfferLoop: a sales CRM for your job search.

What it does

Paste a job link and Gemini reads the posting and fills the application card. Applications live on a drag-and-drop pipeline. Gemini writes cover letters, follow-up emails, referral requests and LinkedIn DMs grounded in your real profile and your own past drafts, so they sound like you, and one click opens them in Gmail. An hourly engine spots applications going quiet, autodrafts the follow-up and sends a push notification. Before interviews it generates a prep pack: likely questions, your best stories, questions to ask. Analytics proves the habit works by comparing your interview rate with and without follow-ups. Import from Teal or Huntr, export everything as CSV, delete your account anytime. A free AI allowance is included, then you bring your own free Gemini key, stored encrypted.

How we built it

One Cloud Run container, scaling to zero: FastAPI backend, React 19 + TypeScript frontend, Firestore, Firebase Auth, Cloud Scheduler, Firebase Cloud Messaging, and Gemini on Vertex AI, fronted by Firebase Hosting at offerloop.web.app. I used Claude Code as an AI coding agent throughout and treated its output like a fast junior engineer's: everything reviewed, everything tested. The suite is 140 backend tests, 10 frontend tests, and a 32-step Playwright e2e run on desktop and a 390px phone viewport.

Challenges we ran into

Link capture fetches arbitrary URLs, so SSRF was the scariest bug: auto-following redirects validated only the first hop, letting a public URL bounce into private networks. I rewrote it as a manual redirect loop that validates every hop before requesting. I also ran an LLM as an adversarial judge for eight rounds; it caught real bugs, including a gamification exploit where re-marking a draft as sent farmed points forever. And wiring Auth, OAuth and push across two GCP projects produced every config error Firebase can throw.

Accomplishments that we're proud of

OfferLoop is not a demo. It launched publicly during the hackathon window, with real Google sign-in, working push notifications, full mobile responsiveness, CSV export and account deletion from day one. Anyone can use it right now.

What we learned

Adversarial LLM review finds bugs human review misses. Grounding prompts in a user's own writing beats clever prompt tricks for voice. And a 16px input font is the difference between a mobile web app and iOS zooming into your form.

What's next for OfferLoop - a sales CRM for your job search

A browser extension for one-click capture, Gmail reply detection so the pipeline updates itself, and richer analytics. The first user I care about is my sister. The goal is simple: fewer people ghosted, more people hired.

Built With

Share this project:

Updates

Submission history