Luke Davis
← Back to blog

Spreadsheet to Web App with Claude Code

With a baby on the way, I needed to plan my time off carefully. Not just the paternity leave itself, but the months leading up to it - doctor appointments, random half-days, the slow burn of PTO that adds up faster than I expected. I’d been tracking all of this in a Google Sheet for years, and it worked. Mostly.

The sheet had everything I needed: a 12-month calendar grid, running balances, paternity tracking, payout calculations. I’d built conditional formatting to highlight PTO days, formulas to calculate carryover, even a little chart showing usage vs. remaining balance. It was held together with duct tape and nested IF statements, but it did the job.

And every time I opened it, I thought: this should be an app.

Original spreadsheet

The ideas we said no to

The best developers I’ve ever known say no to things. No to the shiny new framework. No to the rewrite that would “only take a sprint.” No to the feature request that sounds simple until you start asking questions. We said no for good reasons. Time is finite. Maintenance is real. That “quick” build always takes 3x longer than you think, and then you’re stuck supporting it forever.

But the calculus is different now.

Tools like Claude Code have made “trivial builds” actually trivial. The weekend project takes an hour. The internal tool that saves 10 minutes? You can have it running before scrum. And when something breaks, you can fix it in the time it used to take to context-switch into the codebase.

Developer teams everywhere are revisiting ideas they dismissed over the last few years and AI agents aren’t just helping with “yes” or “no”. Agents are helping developers understand the why behind yes or no.

Day one: November 23, 2025

I sat down with Claude Code (running Opus 4 - it had been available since May) and described what I wanted: a time-off tracker that mirrored my spreadsheet. Calendar view, monthly summaries, PTO and parental leave tracking, balance calculations.

The first commit was a single 383-line HTML file. One file. No build step. Just HTML, Tailwind via CDN, and inline JavaScript. It wasn’t pretty code, but it worked. I could see my PTO on a calendar grid, watch the balances update, click cells to add entries.

That same day, I asked for a paternity leave toggle. A checkbox to enable/disable the feature, inputs for hours allowed and start month. Forty minutes later, a build was running in my homelab.

Six weeks of “yes”

From there, the project grew organically. Not because I planned a roadmap, but because I kept asking for things:

December 4: “Can we convert this to TypeScript with proper build tooling?” Done. Also got Docker deployment, GitHub Actions CI/CD, and hot reload. The single HTML file became a modular React app.

January 1: “I want a settings page where I can configure everything - PTO tiers, hourly rate for payout calculations, starting balances.” Done. Also switched from Preact to React, migrated to Vite + Tailwind with a proper PostCSS build, added JSON import/export.

January 2: “The anniversary-based periods are confusing. Can we simplify to calendar year?” Done.

Each of these would have been a “no” in the old world. TypeScript refactor? That’s a weekend. CI/CD pipeline? Half a day minimum if you know what you’re doing. Settings page with import/export? Scope creep. Pass.

But when you can describe what you want in plain English and watch it materialize in minutes, “no” stops making sense.

What it does now

PTO Tracker app

The app does everything my spreadsheet did, but better:

  • Calendar view: 12 months × 31 days grid, click any cell to add/edit entries
  • Running balances: Start, Used, Carry for each month, automatically calculated
  • Parental leave: Separate tracking with its own allocation and carryover rules
  • Plan mode: Test hypothetical scenarios without committing - see how taking that week in June affects your year-end balance
  • Payout calculations: Based on your hourly rate and max rollover, shows exactly what you’ll get paid out
  • CSV import/export: Move data in and out easily
  • Settings: All the knobs you’d want - annual allocation, rollover caps, parental leave hours, starting balances

It runs on my homelab, deployed automatically when I push to GitHub. Total development time across six weeks: maybe 4-5 hours of actual prompting and review.

The economics of building have shifted. The threshold for “worth doing” has dropped dramatically and devs who spent years building good judgment about what to say no to are now applying that same judgment to a much larger universe of “yes.”

My daughter arrived in November. The app told me exactly how much leave I had, when it would expire, and what my balance would look like when I got back. The spreadsheet would have worked too. But as most developers would agree, why take the easy path when you can build a whole app instead.