Turn a company name or job description into three short, personal cold emails, one each for a founder, a recruiter/HR, and an engineer. A React single-page app that calls Google Gemini directly from your browser with your own API key.
There is no application server in the data path. Your Gemini API key and your resume are stored only in your browser (localStorage) and are sent straight to Google's Gemini API when you generate. They never reach any server of ours. The resume file is parsed to text in the browser too, so the file itself never leaves your device. The only backend is a static file host that serves the built app and has no endpoint that accepts data.
flowchart LR
A["Save resume + Gemini key (in browser)"] --> B["Enter company / job description"]
B --> C["Generate"]
C --> D["Distill resume once (cached in browser)"]
D --> E["Research company (optional, Google Search grounding)"]
E --> F["Write 3 emails: founder / HR / engineer"]
F --> G["Review and copy"]
The resume is distilled into a short profile on the first generation and cached, so later generations skip that step. Each generation is one fixed pass that produces the three variants; generating again is another click. The model is chosen with a dropdown (default Gemini 3.5 Flash-Lite).
Needs Node 20.19+ (or 22.12+):
npm install --prefix frontend
npm run dev --prefix frontendOpen http://127.0.0.1:5173. Save your Gemini key and resume in the Personal setup section, add a company name or job description (paste it or upload a PDF, DOCX, TXT, or MD up to 3 MB), and generate. No backend is needed to develop; the browser talks to Gemini directly.
The repo deploys as one Vercel project. vercel.json builds the React app into public/, and a small FastAPI function (api/index.py / app.py) serves those static files. That function only serves files; it has no data endpoints.
Because Vercel bundles the function from the Git source, the built public/ is committed. After any frontend change, rebuild and commit it:
npm run build --prefix frontend -- --outDir ../public --emptyOutDir
git add public && git commit -m "rebuild frontend" && git pushNo environment variables are needed; the model and key are chosen in the app. Any plain static host also works if you prefer (serve the public/ build).
frontend/src/App.jsx— the UIfrontend/src/gemini.js— direct in-browser Gemini callsfrontend/src/extract.js— in-browser PDF/DOCX/TXT/MD text extractionfrontend/src/prompts.js— prompt text, style examples, and output parsingfrontend/src/index.css— stylespublic/— built frontend (committed for Vercel)app.py,api/index.py— static file host for deployment
profile.md and emails/ are personal local notes and are Git-ignored.