Skip to content

Finances

Austin Stanfield edited this page Sep 29, 2026 · 5 revisions

Finances

Budget lines, payers, contributors, receipts and the payment schedule.

Admin → Finances. Six tabs. Every field edits in place — type, then click away or press Enter; Esc cancels the edit. Nothing needs a Save button, and totals recalculate as soon as an edit lands.

Two things about editing money worth knowing, both since v0.9.34:

  • A money cell shows the formatted value until you click into it — $6,800.00, symbol against the digits, thousands separated — and swaps to the bare number on focus, with the text selected, because the common edit is replacing a number rather than appending to it. Before that the $ floated at the far left of the cell while the digits sat right-aligned at the far right, which read as two unrelated things.
  • Esc genuinely cancels. It used to reset the draft and then blur, and because that reset is asynchronous the blur's commit still saw the abandoned text and saved it — typing 999 into a $7,250 line and pressing Escape left the line at $999. It now flags the abandon synchronously, so nothing is written.

The tab uses the full width of the window. It was capped at 1024px and centred, which threw away 320px of a 1600px screen on the very tabs whose columns were clipping for want of it — an unpaid four-figure line rendered as $10,120.0 with NOT PAID printed across it. Tables now get the room; Overview and Settings switch to two columns above 1280px rather than stretching, because full width is right for a table and wrong for prose and for forms.

On first run the suite imports the original Heav & Aust Wedding Spreadsheet — Budget tab: 3 sections (Venue Cost, Staff And Extras, Other), 27 line items, 2 payers, 14 purchases and 4 contributors. The two venue payments and Rob's $5,000 are attached to the Venue Cost section, not the Venue line, because that is how the bill is actually paid. It only seeds when the tables are empty, so it never duplicates or overwrites later edits. Two things it can't bring over: the paid flags (the spreadsheet stored those as bold text, which CSV export drops — tick them yourself), and the sheet's own $680 rounding gap (see Gift Money below).

Overview

Overview — the report. Budget total, spent to date, gift money received, and what's left to cover, then the per-person split and payment plan. The planning scenario toggle switches every figure between:

  • Cash in hand — counts only money actually received. The safe number.
  • If pledges land — counts every pledge as money you'll get.

Below that: Section progress — how far each section's bill has been paid down, with installment counts and what's still owed — then your ten biggest line items, and a Worth a look panel listing sections or lines where payments have passed the budget, plus any purchase counted toward nothing.

Budget

Budget — sections and line items. Drag a line by the handle at its left to reorder it, or to move it into another section — including one that is still empty, which is the only way to put the first line in it. It works by keyboard too: tab to a handle, Space to lift, arrows to move, Space to drop, Escape to cancel. On a phone, hold the handle briefly before dragging so the list can still be scrolled. Each line is Unit cost × Qty, and Qty from decides where the quantity comes from: Fixed (you type it), or Adults / Minors / Drinkers (21+) / All guests (driven by the headcount in Settings, so a headcount change ripples through dinner, kids' meals and the bar at once). The Paid toggle replaces the spreadsheet's bold convention.

Click the ▶ on any line to expand it for notes, a list of payments made against it, and Break into parts — build a line from components that sum into it, the way Appetizers reaches $1,700 from six dishes. A line using parts ignores its own cost and quantity.

Every section ends with a Paid toward this section panel — budgeted, paid so far, still owed, a progress bar, and a payment log with + Log an installment. Use it for a bill that covers the whole section and gets paid down in chunks, which is how the venue works: one invoice spanning venue, catering, bar, service charge and tax. Tagging those installments to a single line would misattribute them and raise a false overrun on that line, so they attach to the section instead.

Paid so far counts every payment against that bill regardless of whose money it was — your own installments, line-level payments, and any gift money earmarked there. Rob's $5,000 toward the venue makes the venue bill $5,000 more paid off, so it appears in the log as a green 🎁 row and the panel breaks the total down as "$9,680.00 yours + $5,000.00 gift money". Gift rows edit in place here just like your own.

Schedule

Schedule — what you owe and when, the one thing a spreadsheet can't tell you. Split into payments turns a budget line or a whole section into a deposit plus instalments on a repeating interval; any rounding remainder lands on the final payment so the parts always add back to the whole bill exactly. Rows badge themselves TODAY, 30d or Overdue, and the tab title carries a ! while anything is late. Tick a payment off once you've logged the actual money on Purchases.

Purchases

Purchases — every payment that has gone out, from any source. Each entry records what, when, who paid, and what it counts toward: a whole section (for lump-sum bills) or a single line. A payment can only ever target one of the two — picking one clears the other, so nothing is double counted.

Gift money that's been earmarked shows here too, as green 🎁 rows tagged with the contributor, editable in place; a 🎁 Gift money filter pill isolates them. Unearmarked gift money is cash still in hand rather than a payment made, so it isn't listed — a tile tells you how much is sitting unapplied.

Filter by payer or search; the footer totals whatever is on screen. Leaving a payment as — nothing — is fine, but it counts nowhere and gets flagged on the Overview.

Two different totals, on purpose. Paid to vendors includes gift money; each payer's total does not. Gift money has already been subtracted once when working out what you two owe, so counting it as your spending too would double-count it and make left to cover look smaller than it is.

Gift money

Gift Money — money toward the wedding bill: parents, family, anyone chipping in. Each contributor has a pledge, then you log each payment as it actually arrives. Totals are always derived from the logged payments, which is what stops the drift the spreadsheet had (its receipt log said $6,880 received while its summary said $6,200 — the $680 was never rolled up). Give more than pledged and the extra is kept, not discarded. Each payment can be earmarked to a whole section or a single line — Rob's $5,000 against the venue bill, Kim's $1,200 against the dress.

Wedding and shower gifts from guests are a different thing and stay on the Registry page, where they remain tied to a guest for thank-you notes.

Settings

Settings — headcount, payers and the payment plan.

  • Headcount: adult and minor counts, plus a Drinkers (21+) count. Your guest list is shown alongside as a reference with one-click Use buttons, but it is never read automatically — a late RSVP shouldn't quietly move a $33k total, and the guest list has no adult/minor marker anyway.
  • Drinkers are some of your adults, not extra guests. Someone under 21 eats the adult dinner like everybody else; they just cost the bar nothing. So All guests stays adults + minors and never adds the drinkers in, and only a line set to Drinkers (21+) reads that count.
  • Where the number comes from: mark people Under 21 in the guest editor (see Guests and RSVPs) and Settings offers a Use N drinking button next to the invited and attending ones. It counts everyone you expect — silence counts as coming, the same assumption the seating chart makes — and leaves out anyone who declined, is likely not coming, or was never invited.
  • If a line says Drinkers and the count is zero, that line totals $0 and nothing else on the page looks wrong. The Overview raises it under Possible mistakes, naming the line.
  • Who pays: an editable list with a share percentage each, 50/50 by default. Shares split whatever the contributions don't cover. Someone who buys things but owes nothing — a parent picking up the decor — gets 0%; their spending still shows, as a credit. Shares that don't total 100% still work; each person is charged their slice of the total.
  • Payment plan: leave the horizon blank to count down to your wedding date automatically, or set a fixed number of months. Days-between-paychecks drives the per-paycheck figure (14 for every other week).

On a phone. The suite is built for one-handed use, since most of this gets updated on the move:

  • Budget lines and payments collapse to a summary — name, amount, and a PAID badge — and expand on the ▶ for the editable fields. A 27-line budget stays one screen instead of twenty.
  • Every field carries its own label once the desktop header row drops away, so an amount is never an unlabelled number.
  • Inputs are 16px on mobile so iOS Safari doesn't zoom the page every time you tap one, and every control is at least a 32px touch target.
  • Layout is checked at 390px (iPhone) and 360px (narrow Android) with no horizontal scrolling.

Everything else on the page

  • Paid status is derived, not remembered: Not paid / Part paid / Paid / Overpaid computed from real payments. The manual tick survives as an override, and the page tells you when the two disagree ("Ticked paid, but the payments don't cover it").
  • Cost per guest with the marginal cost of one more adult — every line whose quantity tracks the adults, the drinkers or all guests, at its unit cost — plus what a table of ten adds. Drinker lines count because one more adult guest is normally one more person at the bar. Useful while the invite list is still moving.
  • Possible mistakes flags payments with the same amount and overlapping wording (it finds the duplicate Suit / Austin Suit $300 entries) and lines paid at more than double their budget.
  • What if… re-runs the real engine against a different headcount, a contingency buffer, or pledges not arriving. Nothing is saved.
  • Trend — a reading is stored each day you open the page, so the budget's drift over time becomes visible.
  • Add to budget turns an untracked payment into a budget line and links it in one click.
  • Bulk edit — tick payments, then retag payer, target or date in one go; or archive them together.
  • Receipt photos — attach a photo or PDF per payment; on a phone the button opens the camera.
  • Templates — Add common line items drops in a ready-made set (venue & catering, photo & video, attire, flowers, stationery, music) wired to your headcount where it matters.
  • Reorder sections with ⌃⌄. Undo appears for ten seconds after deleting a payment or line. Refunds go in as a negative amount.
  • Thank-you tracking on gift money, with a sent count — the Registry already does this for guest gifts.
  • Archive, not delete: removing a section, line or contributor archives it. It stops counting toward every total and is restorable from Settings → Archive.
  • Export CSV or Print / PDF for a vendor meeting; print styles drop the site chrome and render inputs as plain text.

Verification scripts, all runnable independently:

npx tsx scripts/audit-finance-logic.mts    # invariants: every total must equal the sum of its parts
npx tsx scripts/verify-finance-math.mts     # engine vs. the original spreadsheet, to the penny
DATABASE_URL=... npx tsx scripts/verify-finance-db.mts    # schema, seed, CRUD, injection safety
BASE=... ADMIN_PASSWORD=... npx tsx scripts/verify-finance-ui.mts   # real browser, all five tabs

← All pages

Clone this wiki locally