GovForms

Philippine government forms as plain questions. Your answers print in the right boxes of the official form.

Role
Design and build, solo
Built
September 22–27, 2026
Stack
SvelteKit, pdf-lib, pdf.js, IndexedDB, Umami
First commit to launch
6 days
Fields placed
621
Tests
~333
Lighthouse performance
100
The GovForms homepage: "Government forms, filled out right." above a form search box, beside a live preview of the Personal Data Sheet being filled in.
The GovForms homepage.

Why I built it

I needed to fill out my Personal Data Sheet, but it comes as an Excel file and I don't have Excel on my Mac. I found a PDS filler online, typed in everything, and then:

When I clicked download, it asked me to pay.

That's a paywall on a form almost every government job applicant has to submit. So I built the free version I'd been looking for.

The problem, beyond me

BIR 1901, 1902 and 1701A are PDFs with no fillable fields, so most people print them and write by hand. They're filed by new hires, freelancers, and anyone going to a notary.

Page 1 of the blank Personal Data Sheet, CS Form 212. Page 1 of the blank BIR Form 1901. Page 1 of the blank BIR Form 1902. Page 1 of the blank BIR Form 1701A.
The four official forms GovForms fills today: the PDS and BIR Forms 1901, 1902 and 1701A.

The approach

Plain questions in; answers drawn onto the government's own PDF, not a look-alike. The preview and the download come from the same instructions, so what you see is what prints.

The PDS in GovForms: questions on the left with answers for a fictional Ana Marie Bautista Reyes, and page 1 of the official form on the right with the same answers printed in its boxes.
Answers appear on the official form as you type. The green bar tracks progress.

Placing 621 fields, precisely

I calibrated the PDS by hand, nudging an outline over every field. That doesn't scale, so for the BIR forms I wrote a tool that finds every box on the page by itself: 800 of them across three forms.

The top of the PDS with a labelled blue outline drawn over every field, used to line up each answer by hand.
The PDS, calibrated by hand: one labelled outline per field.
The top of BIR Form 1902 with every detected box outlined and numbered: text boxes in blue, checkboxes in pink, one-character-per-cell boxes in green. The same part of BIR Form 1902 filled in with sample answers for a fictional taxpayer, Juan Miguel Santos Dela Cruz Jr., each answer inside its box.
BIR Form 1902: the boxes the measuring tool found, and the same boxes filled with sample answers.

Proving it's right

"Looks right on my screen" isn't enough for a document handed to the BIR. Every form runs through the same three checks:

  1. The PDF is the exact version I measured.

  2. Every box is filled, or its blank is explained.

  3. Every character lands inside its box.

Long answers shrink to fit, down to 5pt. Past that, the form tells you while you're typing, not on the printout.

A Word layout engine, rebuilt

The Work Experience Sheet is a Word document, not a fixed form, so I rebuilt its line breaking, accurate to a quarter of a point against LibreOffice. The same engine now typesets the legal templates.

A special power of attorney in GovForms: plain questions on the left, and the typeset legal document on the right with the answers highlighted.
A special power of attorney, typeset from plain answers. From the launch video.

Privacy by construction

Everything stays on your device: the PDF is made in your browser, with no accounts and no cookies. Photos are stripped of location data, and stats can't carry an answer.

"Free. No sign-up. Everything stays on your device." above a locked box labelled Your device.
From the launch video.

Beyond the code

Choosing what to build next

I asked people which documents gave them the most trouble. BIR forms kept coming up, since nearly everyone who works files one.

A design that earns trust

Inspired by GOV.UK, not Philippine government sites. Blue means trust and appears throughout; green means progress and appears only when you move forward.

The top of the PDS questions: a green progress bar at 23% complete, and blue section tabs with Personal Info selected.
Green for progress, blue for everything you can trust and tap.

Launching it

Launch videos made in code with Remotion, released around hiring and tax season.

Short video cover: "You didn't type any of this." above BIR Form 1902 filled with answers from the PDS. Short video cover comparing a form filled by hand with the same form filled by GovForms. Short video cover for the special power of attorney template.
Covers for the three short videos.

Shipping

  1. Day 1 PDS mapped
  2. Days 2–3 Engine and wizard
  3. Day 4 Homepage and Word engine
  4. Day 5 BIR forms, templates, security and SEO
  5. Day 6 Launch and videos
Performance
100
Accessibility
96
Best practices
96
SEO
100

Lighthouse scores on mobile and desktop. Security audited, with a strict Content Security Policy and every outside input checked. Built with Claude as a pair programmer; I made the product and design calls.

What I learned

  1. Shipping it myself is its own skill. I've built plenty for clients and companies, but this is the first product I've released on my own, so I learned SEO, cookieless analytics with Umami, and how to market a launch.

  2. No backend means every byte counts. I set myself that challenge, so I had to be deliberate about the architecture, what gets shipped and how big each file is.

  3. A civic project can travel. It started as a passion project, but people have since reached out, and I've realized the same approach could serve, and be sold to, lots of organizations.

Making products that help people is really, really rewarding.

Right after launch, a friend messaged me to say I was a lifesaver. He had been stuck on the exact same problem I had.