DEV Community

Cover image for How I Built a 100% Client-Side, ATS-Friendly CV Builder (Zero Backend for Ultimate Privacy
admin@adawati.app
admin@adawati.app

Posted on

How I Built a 100% Client-Side, ATS-Friendly CV Builder (Zero Backend for Ultimate Privacy

Have you ever spent an hour filling out your details on a "free" resume builder, only to be hit with a $15 paywall or a massive, ugly watermark right when you click download?

As an indie developer, I found this practice incredibly frustrating. Beyond the hidden fees, there's a massive privacy concern: why should a random server store my phone number, address, and entire employment history just to generate a PDF?

So, I decided to build my own free alternative on Adawati.app: a fast, ATS-friendly CV builder that operates 100% on the client-side. No backend storage, no hidden fees.

Here is how I approached the technical challenges.

  1. The Core Architecture: Zero Backend The primary goal was privacy. By eliminating the backend from the PDF generation process, the user's sensitive data never leaves their browser.

Instead of sending JSON payloads to a Node.js or Python server to render a PDF using tools like Puppeteer or ReportLab, the entire heavy lifting is done in the DOM.

  1. The ATS (Applicant Tracking System) Challenge A major trap with client-side PDF generation is taking the easy route: converting a DOM element to an HTML canvas (e.g., using html2canvas) and then putting that image into a PDF.

Why is this bad? Because ATS bots cannot read images! If your resume is just a giant image inside a PDF wrapper, you will automatically be rejected by 75% of corporate filtering systems.

The Solution:
I had to ensure the output was a true vector PDF with selectable text. Using client-side libraries that construct the PDF document programmatically ensures that the text layer is preserved. The file remains lightweight, the text is razor-sharp (no pixelation on zoom), and most importantly, an ATS can easily parse the keywords, job titles, and dates.

  1. Handling RTL (Right-to-Left) and Localization
    Since the platform targets both Arabic and English speakers, the layout had to mirror perfectly without breaking the PDF generation flow.
    Switching between languages triggers a state change that not only flips the CSS (direction: rtl) for the live preview but also maps to the corresponding coordinates and text alignments in the PDF generation logic.

  2. The Result
    The final product allows users to:

Type their data and see a Live Preview.

Switch between English and Arabic seamlessly.

Download a clean, ATS-compliant PDF instantly.

You can try the live tool here: Adawati CV Builder. Turn off your Wi-Fi before clicking download if you want to test the "Client-Side only" claim! πŸ˜‰

What’s Next?
Building tools that respect user privacy shouldn't be the exception; it should be the norm. My next challenge is optimizing the client-side PDF compression.

Have you worked with client-side PDF generation before? What libraries did you find most reliable for handling complex layouts and custom fonts? Let me know in the comments!

Top comments (0)