Every career tool on the internet wants your data. Upload your resume here, paste your LinkedIn there, give us your email so we can spam you forever. I got tired of it.
So I built 4 free tools that run entirely in the browser. No server. No database. No tracking. Your data never leaves your machine.
Here's what I made, how, and why this approach beats the SaaS model for simple tools.
The tools
1. Resume ATS Score Checker — Paste your resume, get a compatibility score against a job description. Keyword matching, format analysis, actionable fixes. Try it
2. LinkedIn Headline Generator — Pick your role, add some context, get headline variations. No AI API calls — it's template-based with enough randomization to feel custom. Try it
3. Cover Letter Generator — 4 tones (Professional, Confident, Enthusiastic, Concise), template-driven with smart variable substitution. Try it
4. Salary Negotiation Script Generator — 4 scenarios (new offer, raise, promotion, counter offer) x 4 tones x 2 variations = 32 unique scripts. Copy-paste ready. Try it
The stack
This is embarrassingly simple:
- HTML + vanilla JS — no React, no build step, no bundler
- CSS — hand-written, no framework
- GitHub Pages — free hosting, HTTPS included
- Custom domain — charliemorrison.dev via Hostinger ($12/year)
Total monthly cost: $0.
Why no backend?
Three reasons:
Privacy actually matters. If I'm asking someone to paste their resume into a text box, "trust me, I won't store it" doesn't cut it. There IS no server to send it to. Open DevTools, check Network tab — zero outbound requests.
Hosting costs $0. GitHub Pages handles the traffic. If one of these tools goes viral tomorrow, I don't get a $400 AWS bill.
Maintenance is zero. No server to patch, no database to back up, no API keys to rotate. I pushed the code 2 weeks ago and haven't touched it since.
How the "AI" works without AI
The resume checker doesn't use GPT or Claude. It's keyword extraction + scoring:
// Extract keywords from job description
const jobKeywords = extractKeywords(jobText);
// Match against resume content
const matches = jobKeywords.filter(kw =>
resumeText.toLowerCase().includes(kw.toLowerCase())
);
const score = Math.round((matches.length / jobKeywords.length) * 100);
Is it as good as a real LLM-powered analysis? No. Is it good enough to catch the obvious stuff — missing skills, wrong formatting, keyword gaps? Absolutely. And it runs in 50ms instead of 3 seconds.
The headline and cover letter generators use template arrays with weighted randomization. ~200 templates per tool, split by tone and role category. You'd be surprised how natural the output feels when you have enough template variety.
What I learned
Static sites rank surprisingly well. Two of my Dev.to articles got indexed by Google in under 48 hours. The direct site is slower, but individual tool pages are starting to appear.
People don't care about "AI-powered" — they care about "free and private." The resume checker has gotten more interest than any of my paid prompt packs. The pitch "runs in your browser, we never see your data" resonates more than "powered by GPT-4."
Build for the funnel, not the tool. Each free tool links to the others and to my Job Search AI Toolkit ($12, full prompt pack for job seekers). Free tools are the top of the funnel.
Source code
Everything's on GitHub: charlie-morrison. MIT licensed. Fork it, remix it, build something better.
If you're thinking about building a tool — start client-side. You can always add a backend later. You probably won't need to.
Top comments (0)