Case Study

Bi-weekly payroll, in five minutes.

How a single 62 KB browser file replaced a non-profit makerspace's three-spreadsheet payroll reconciliation — without buying a single seat of SaaS.

Vintage 1960s mechanical punch-card time clock with brass-trimmed face
5 min
Cycle Time
24×
Speedup
~50
Hours Saved / Year
$0
SaaS Cost

The Problem

A small non-profit makerspace was spending two hours every other Friday reconciling payroll across three spreadsheets — a Neon CRM export, a master stipends workbook, and a separate per-student-rate catalog. Six different payment rules overlapped (tiered hourly, per-student pricing, multi-week course flat fees, off-system payouts, duration overrides for class-management edge cases, and a private-session zero-pay rule), and the org was mid-migration from a tier-label scheme to a structured class-code scheme that the tool needed to handle simultaneously.

The bottleneck wasn't paying instructors — payroll software like Gusto handles the W-2 side. The bottleneck was figuring out what to pay them. That compute lives at the intersection of a class-management system, a custom pricing structure, and a handful of edge cases. No SaaS exists for that compute because every makerspace has slightly different rules and the per-org volume is too low for a vendor to build a product.

What We Built

A single self-contained HTML file, 62 KB, that runs entirely in the user's browser. The user drops the Neon CSV onto the page, picks a date range, clicks Calculate, and downloads a multi-tab Excel report. All calculation runs locally — no payroll data leaves the laptop. PapaParse handles the CSV, SheetJS produces the Excel output, browser localStorage persists configuration (tier rates, the per-student class catalog, instructor list, override list).

The tool encodes all six payment rules with explicit priority — Tier PS (private session, $0) overrides everything, per-student rates override hourly, multi-week courses pay only on session one, manual entries handle off-system payouts, duration overrides correct the class-management system's misreported lengths. A 'needs review' flag surfaces any row where the tool isn't sure what rule should apply, so nothing slips silently.

This tool makes my payroll process super easy and fast, and the best thing is it reduces the chances of error for what used to be many manual steps.

The System Architecture

Vanilla HTML, JavaScript, and CSS in a single file under 1,000 lines of code. No backend, no SaaS, no install, no login, no API keys, no monthly cost. PapaParse and SheetJS load once from CDN and cache. Configuration lives in browser localStorage with a Backup-Config JSON export for portability between machines. Built with Claude (Sonnet) in a Cowork session — three iterations across a Saturday afternoon, including one spot-check bug fix that surfaced a documented payment rule the org had silently overridden in practice for over a year. The tool reconciled the documented version and the lived version into one source of truth.

The Results

Bi-weekly cycle dropped from two hours to five minutes — a 24× speedup, recovering roughly 50 hours of finance-ops time per year. SaaS cost: zero. The operations lead's quote: "This tool makes my payroll process super easy and fast, and the best thing is it reduces the chances of error for what used to be many manual steps." That last point matters more than the time savings — the fastest way to lose trust with the people who teach for you is to short their pay unpredictably, and manual reconciliation across three spreadsheets is exactly the workflow that produces unpredictable mistakes.

The pattern: most non-profits, small ops teams, and family-owned businesses have at least one process like this — multi-step manual reconciliation that lives across three spreadsheets and one person's head. Volume is too low for a SaaS vendor to care, rules are too specific for a generic tool, stakes are too high to leave manual. A single HTML file is the rarely-considered fourth option, and for this kind of problem it's almost always the right call.

Client

501(c)(3) makerspace running ~100 hands-on classes per month with ~30 active instructors per pay period. Identity withheld at their request.

Engagement

Sprint
Initial build: 1 working session

Stack

  • Vanilla HTML/JS/CSS
  • PapaParse (CSV)
  • SheetJS (Excel)
  • Browser localStorage
  • Claude (Sonnet) via Cowork

Services

  • Custom Tooling
  • Browser-Based Application
  • Workflow Automation
  • Process Discovery

Your Turn
Similar problem?
Every system we build starts with understanding what's broken.
Book a call →