OpenBudget: Open-Sourcing the Family Budget App
JD canceled YNAB, paid $15 for a SimpleFIN API key, and built a family budget app in an afternoon. That app became github.com/JDDavenport/openbudget — a public, PII-scrubbed, one-click-deploy budget replacement that anyone can run on Supabase and Vercel for free.
What it is
Section titled “What it is”OpenBudget is a self-hosted envelope budgeting app. Envelope budgeting means you allocate every dollar to a category before you spend it — not after. YNAB popularized this model. OpenBudget replicates the core: budget categories (envelopes), spending tracking, and bank transaction sync.
The technical stack:
- Frontend: Next.js, deployed to Vercel (free tier)
- Backend: Supabase Postgres (free tier for personal use)
- Bank sync: SimpleFIN — a read-only bank feed API that costs $15 to activate and requires no OAuth dance with each bank
- Deploy: one-click “Deploy to Vercel” button in the README
The entire hosting cost after the $15 SimpleFIN fee is $0 for a single household.
The build
Section titled “The build”The family budget app was built from feat/sam-budget — a branch in the main agent-system repo. Before open-sourcing, it was forked clean: all PII, secrets, and seed data were stripped. The encrypted credential vault that lives in the main repo did not come along — it stays private.
The open-source release process (CHANGELOG 2026-06-05 17:52):
- Fork from
feat/sam-budgetto a clean public repo - Strip JD and Sam’s names, account numbers, envelope amounts, and transaction data
- Run a PII scan — clean
- Add
SETUP.md, a/setuponboarding page, and the “Deploy to Vercel” button - Add
node sync.mjs— a standalone sync script that runs SimpleFIN pulls without requiring the full agent system
The build passed. The PII scan was clean. The repo went public.
The honest gap in the first release
Section titled “The honest gap in the first release”Before the LinkedIn launch post went out, the system flagged an honest problem: the sync.mjs port of the bank sync was agent-code adapted for standalone use but had not been tested against a live SimpleFIN account. The original Python sync had been tested; the Node.js port for the public release had not.
From the CHANGELOG (2026-06-05 06:08): “Flagged honest test gap: build+PII verified but the agent-ported sync.mjs is unverified against live SimpleFIN — recommended a 30-min real-sync test before heavy promo.”
JD launched the LinkedIn post (CHANGELOG 2026-06-05 07:08) with the repository link in the first comment (to avoid link throttling), and the newsletter issue titled “I canceled YNAB for a $15 API key” was drafted and sent.
The test gap is documented here because it is the right model for building in public: ship the thing, be honest about what is and isn’t verified, let the community surface any issues. Holding the release until every edge case is tested is a recipe for never shipping. Claiming the release is fully tested when it isn’t is dishonest. The middle path is to ship with a clear statement of what was verified and what wasn’t.
Why open-source it
Section titled “Why open-source it”The Organization Charter (Commandment XI) says: “After building anything useful, strip personal data, push to GitHub, document on docs.openclaw.ai.”
But there is a more pragmatic reason. JD built a tool that solved a real problem for his household. The marginal cost of making it usable by others was a few hours of cleanup and documentation. YNAB costs $15/month after the trial. OpenBudget costs $15 once and nothing monthly. That is a real alternative for families who want envelope budgeting without a subscription.
The discipline that made open-sourcing tractable was the same discipline that made the private app good: the budget data lived in Supabase, not in a local SQLite file. The sync was a standalone script, not embedded in the agent system’s internal tooling. The cleanup to public release was removing PII and writing a setup guide, not rebuilding the architecture.
What the envelope structure looks like
Section titled “What the envelope structure looks like”JD’s budget scaffold (from the CHANGELOG: “16 envelopes with allocated: 0 placeholders”) covers four groups:
| Group | Examples |
|---|---|
| Fixed | Rent, utilities, insurance, subscriptions |
| Variable | Groceries, gas, medical |
| Discretionary | Dining out, clothing, hobbies |
| Savings | Emergency fund, vacation, goals |
Each envelope has an allocated amount and tracks spent against it. The hard-stop that was in JD’s private version activates when spent exceeds allocated — the system does not silently let you overspend an envelope.
The broader open-source philosophy
Section titled “The broader open-source philosophy”OpenBudget and harnessview (a tool that visualizes a Claude Code harness) are the first two public spinouts from JD’s agent system. The pattern they establish:
- Build for your own use case first. OpenBudget solved a real problem before it was ever meant to be a product.
- Strip to the minimum viable public version. No PII, no personal config, a clear setup path.
- Ship honestly. Document what is tested and what isn’t. Don’t oversell the first release.
- Let the community extend it. The one-click Vercel deploy means anyone can fork, customize, and run their own version without needing the full agent system context.
Next: From personal finance to student entrepreneurship. The BYU AI Foundry covers the student-run org JD built to ship real AI products for clients.