惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
V
Visual Studio Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
I Built a Free Invoice Generator, Resume Builder, and Cov...
Aral Roca · 2026-05-03 · via DEV Community

A friend asked me to recommend a free invoice generator yesterday. I opened the first ten results on Google and they all did the same thing: signup wall, email capture, or a watermark across the PDF unless you pay $12/month. Generating a PDF from form fields is a solved problem that somehow became a SaaS category.

So I built three of them in a day. Invoice generator, resume builder, cover letter generator. No signup, no watermark, no data leaving your browser. Fill in the fields, see a live preview, download a clean PDF. Done.

The three tools are an Invoice Generator, a Resume Builder, and a Cover Letter Generator. All three run entirely in your browser. No data leaves your device. No account needed. No watermarks.

Invoice Generator with live preview showing a completed invoice with templates

Why I built these instead of recommending existing ones

I tried to find free invoice generators for a freelancer friend last month. Every single one either required signup, limited you to one template, added their branding to the PDF, or was clearly a funnel for their SaaS product. Same story with resume builders: the free tier gives you one basic template, and the moment you want something that looks professional, you're staring at a paywall.

The thing is, generating a PDF from form data is not a hard problem. The browser has everything it needs. pdf-lib is an excellent open-source library that creates PDFs entirely in JavaScript. There is genuinely no reason your invoice data needs to touch someone else's server.

So I built these tools with a shared PDF rendering layer and a template system inspired by PptPresentationMaker, which was already the most complex tool on Kitmul. The architecture is straightforward: React state for the form, an HTML/CSS live preview that updates on every keystroke, and a pdf-lib PDF that generates when you click download.

The Invoice Generator: six templates and real math

Resume Builder with Classic template and live preview

The Invoice Generator was the most technically interesting of the three. It has six templates (Clean, Modern, Classic, Bold, Minimal, Corporate), each with distinct header layouts and color schemes. You can upload your company logo, and the tool resizes it client-side using a canvas element before embedding it in the PDF with embedPng().

The auto-calculations handle subtotals, percentage or fixed-amount discounts, and tax rates. Everything updates live in the preview. The currency selector supports twelve currencies with locale-aware formatting via Intl.NumberFormat; the same $1,234.56 displays correctly whether you pick USD, EUR, or JPY.

The table rendering was the hardest part. pdf-lib doesn't have a table concept; you're positioning rectangles and text with pixel coordinates. I wrote a shared drawTable helper that computes row heights based on text wrapping, handles alternating row backgrounds, and automatically breaks to a new page if the table overflows. That helper is now reusable across all three tools.

One thing that surprised me: the header layout calculation. Templates with colored backgrounds need to know the exact height of the header content (logo height + business info lines + invoice details) before drawing the background rectangle. I ended up computing it dynamically based on which fields are filled in, so the header shrinks if you leave fields empty and expands if you add a logo.

The Resume Builder: five templates, all ATS-friendly

The Resume Builder is the most complex tool at around 900 lines. It has five templates: Classic (single column, maximum ATS compatibility), Modern (with a colored sidebar for contact info and skills), Professional (two-column header), Minimal (lots of whitespace), and Executive (bold accent underlines).

I made a deliberate choice to use only StandardFonts from pdf-lib (Helvetica and Helvetica-Bold). Custom fonts look nicer, but they break Applicant Tracking Systems. ATS parsers expect standard fonts and simple text positioning. Every template outputs real, selectable text drawn top-to-bottom, never images of text. Even the Modern template with its sidebar draws the main content first in the reading order, so an ATS reads your experience before your contact details.

Sections are reorderable. You can drag Experience above Education or add Certifications, Languages, and Projects sections. Each experience entry supports multiple bullet points with add/remove controls. The whole thing generates multi-page PDFs when your resume is longer than one page, with proper page breaks that never split a section header from its content.

The Cover Letter Generator: the simple one done right

Cover Letter Generator with Traditional template and filled-in letter

The Cover Letter Generator is the simplest of the three, but that's the point. A cover letter is a formatted business letter, and getting the formatting wrong makes you look sloppy. The tool handles four templates (Traditional, Modern, Professional, Simple) with proper business letter conventions: sender info placement, date formatting, greeting, body paragraphs, and sign-off.

The Traditional template puts your contact info top-right (the formal standard). The Modern template uses a large name with a horizontal accent line. The Professional template has a colored header block. You can add as many body paragraphs as you need.

No AI writes your letter. You write it, the tool formats it. I think that matters. A hiring manager who has read a hundred AI-generated cover letters can spot them instantly. Your words in a clean layout will stand out more than a GPT-generated letter in a fancy design.

The privacy argument is real

These three tools handle sensitive information. Your invoice has your business details, client names, and financial data. Your resume has your employment history, email, phone number. Your cover letter names specific companies you're applying to.

Every alternative I tested sends this data to a server. Zoho, Canva, Resume.io, Zety; they all require accounts, and once you've created an account, your data lives on their servers under their privacy policies. Some of them explicitly state they use your data for "service improvement," which is a polite way of saying they train models on your resume.

With browser-based tools, the architecture makes privacy the default. There's no server to send data to. The pdf-lib library generates the PDF in a Web Worker, the browser creates a Blob URL, and the download happens through a local anchor click. Your data exists in browser memory until you close the tab.

What I'd build next

Receipt Generator (the mirror of invoices, for the receiving side), NDA Generator (simple template-based legal documents), and Meeting Minutes Generator (structured notes to PDF). They all follow the same pattern: form data, live preview, clean PDF. The shared layout helpers make each new tool faster to build than the last.

If you're a freelancer creating invoices, a job seeker polishing your resume, or anyone who needs a professional document without the signup dance, give these a try. They're at kitmul.com alongside 400+ other free browser-based tools.


Related tools: PPT Presentation Maker · Text to PDF · PDF Merger · Budget Planner · Image to PDF

References: