DEV Community

Cover image for I built a free CV builder in vanilla JS — no frameworks, no backend
Belkacem Halim
Belkacem Halim

Posted on

I built a free CV builder in vanilla JS — no frameworks, no backend

I spent the last few months building ForgCV — a free CV and cover letter
builder that runs entirely in the browser.

No React, no Vue, no npm. Pure HTML/CSS/JS.

Why vanilla JS?

  • Loads in under 1 second
  • Zero dependencies to break
  • Works on any device

The hardest part wasn't the tech — it was the PDF generation.
jsPDF works, but getting pixel-perfect output from HTML took weeks of tuning.

The product: forgcv.com

  • 6 ATS templates
  • Cover letter generator (8 languages)
  • Country guides (France, Germany, UK, Netherlands...)
  • Zero data collected

Happy to answer questions about the architecture.

Top comments (7)

Collapse
 
fromzerotoship profile image
FromZeroToShip

An operations manager shipping a working tool is my favorite genre of post — I'm a physical therapist who ended up building internal tools, and every useful thing I've made started from knowing the job, not the framework. Your instinct to go dependency-free reads like an ops decision more than a tech one: fewer moving parts, fewer 3am surprises. And I felt the PDF line in my bones. "jsPDF works, but pixel-perfect took weeks" — I lost days getting an HTML layout to survive printing onto a single A4 page. Whatever the opposite of glamorous is, print-perfect PDF tuning is that, and nobody warns you. Question: of the six ATS templates, did you validate them against real parsers, or against the folk wisdom of what ATS supposedly wants? I've never found a straight answer on where that line actually is.

Collapse
 
qlf296 profile image
Belkacem Halim

Thank you so much! This means a lot, especially coming from a fellow internal-tools builder. You nailed it: keeping it dependency-free was 100% an operations decision. Fewer moving parts means fewer things to maintain and break down the line.

And yes, @media print tuning for that perfect single A4 page layout is pure, unglamorous torture. Nobody warns you about the hours spent on page-break margins!

To answer your question about the 6 ATS templates: I didn't rely on folk wisdom. Working in ops/logistics, I know how filtering systems actually process data. I validated them against real, raw parsers (like free tiers of popular ATS software and online checkers like Jobscan) to ensure the text layer extracts perfectly linearly without dropping sections or scrambling contact info.

The secret line is basically just semantic HTML: standard headings, zero multi-column layout hacks that break parsing order, and pure text instead of canvas/images.

What kind of internal tools did you end up building for physical therapy? Would love to hear about it!

Collapse
 
fromzerotoship profile image
FromZeroToShip

"Validated against real parsers, not folk wisdom" — that's the ops background showing, and the answer is better than I hoped. What strikes me about your secret line is that it isn't really an ATS trick at all: linear reading order, real headings, text instead of pictures-of-text is just... accessibility. A parser is a blind reader with no patience. Build for one and you've built for both.

Since you asked — the tools grew the way yours did, one visible pain at a time. The first real one was an inpatient dashboard, because our type of rehab hospital was new enough that the official medical records system didn't cover what the ward actually needed. Then smaller ones: a parking-lot tool where staff type a plate number and get the owner's phone (born from watching a man copy plates onto paper in summer heat), a tap-tap hand-hygiene audit that replaced one exhausted nurse's midnight Excel sessions, an inventory search across a few hundred thousand supply items. The biggest is an intranet ~660 staff use daily, which mostly exists to replace work scattered across chat apps.

None of them are impressive individually — that seems to be the pattern for both of us. The impressive thing is what disappears: the notebook, the late nights, the fourth copy of the same file. Good luck with the Cover Letter AI launch — with your validation habits, I suspect it'll be sturdier than most.

Thread Thread
 
qlf296 profile image
Belkacem Halim

"A parser is a blind reader with no patience. Build for one and you've built for both." I am absolutely stealing this line. You hit the nail on the head. At its core, ATS optimization is nothing more than pure, uncompromised accessibility.

Your journey with those tools is exactly what "Building in Public" should be about. An inpatient dashboard, a parking-lot plate lookup, an audit tool replacing late-night Excel sessions... these aren't "just" tools. They are elegant solutions to real human friction. Watching someone copy plates in the summer heat and writing code to stop that? That is pure operational empathy.

You're completely right: the magic isn't in a flashy, complex feature. The magic is in what disappears the invisible hours saved, the manual double-work eliminated, the cognitive load lifted from an exhausted team.

Thank you so much for this comment and for the wishes on the Cover Letter AI expansion. Keeping that same strict validation standard is the only way forward.

Good luck with your intranet and internal tools as well. Sounds like your 660 staff members are in very good hands! 🛠️🚀

Thread Thread
 
fromzerotoship profile image
FromZeroToShip

Deal — you steal my line, I'm stealing "operational empathy." That's a better name than anything I had for why I build these things. Most of my tools started with watching someone do something tedious and thinking "nobody should have to do that twice."

And "the magic is in what disappears" — exactly. The best compliment I ever got wasn't about any feature. It was a colleague forgetting the old process even existed. Good luck with the Cover Letter AI — with your validation standards, it'll be one of the rare ones that actually helps. 🤝

Thread Thread
 
qlf296 profile image
Belkacem Halim

Love that. "The best compliment is forgetting the old process even existed"—that’s the ultimate gold standard for any tool. It means the friction just vanished.

Thanks for the encouragement on the Cover Letter AI. Building it with strict validation standards is the only way to ensure it doesn't just spit out generic corporate fluff, but actually crafts something meaningful while keeping the interface completely out of the way.

Appreciate the great chat and the sharp insights. Let's keep building! 🤝

Thread Thread
 
fromzerotoship profile image
FromZeroToShip

"Keeping the interface completely out of the way" — you keep casually dropping lines that belong on a wall somewhere. 😄 Let's keep building indeed. I'll be watching for the Cover Letter AI launch. 🤝