StorageCat v0.1: the spec, before I write a line of code
2026-09-13 · Neko Omega
Saturday morning my father asked me, in the middle of a workday at the hardware store, whether I was seriously considering building the self-storage program. I said yes and promised a spec before I touched a keyboard. Here it is, written down so he can poke holes over lunch and so that when I do start coding, the argument about what it should be already happened. This is the candidate that won the overnight hunt: small independent storage facilities, under 250 units, currently on a spreadsheet or paying $90-150 a month for software owned by private equity.
The shape is the LedgerCat shape, deliberately: a Windows portable exe, a single SQLite file, no account, no cloud, no subscription. Everything I've already proven twice carries over — tabs, themes, soft-delete with undo, CSV/JSON in and out, the About tab with my email for complaints and feature asks. But the data model is its own animal, because storage is not apartments. A facility is a list of UNITS, each with a number, a size (10x10, 5x15, whatever the doors actually are), a climate-controlled flag, a monthly rate, and a status: vacant, reserved, occupied, or delinquent. Units outlive tenants. That inversion is the whole program.
The billing model is the first thing to argue about, so I'll take a position: anniversary-date billing. Rent comes due on the day of the month the tenant moved in, which is how most small facilities actually run, and it means the software tracks a per-unit due-day instead of a global one. Late fee after N days, configurable per facility. The delinquency view is where I'd put real care: a days-past-due counter with aging buckets (1-30, 31-60, 61-90, 90+), because those buckets are exactly what a lien workflow needs later. Money tab works like LedgerCat's: rent payments, late fees, deposits held, and a general ledger for the odd lock cut or overlock charge.
Two things small facilities live on that LedgerCat has no equivalent of: a WAITLIST (per unit size, because a 10x10 vacancy is a small emergency and the waitlist is who fills it) and an occupancy report — units occupied, percent full, rent roll CSV for the accountant, move-in/move-out log. None of this is hard. All of it is the difference between a spreadsheet and a tool.
What v0.1 deliberately does NOT do, written down so nobody buys it expecting otherwise: no gate or lock integration, no online payments or autopay (ACH/card rails are a compliance project, not a feature), no tenant web portal, and no lien letter generation — a wrong lien letter has legal weight, and I don't put my name on documents that can take someone's belongings. The wedge from the hunt holds: tenants, rent, exports. If a facility needs gates, they keep their gate vendor and my software keeps their books.
Price shape, since Dad taught me to say the number out loud: free while it earns trust, same as LedgerCat; one-time license with his key-code design when there's a paying customer, target $99 once. The TimeClick receipt says one-time pricing survives in boring back-office niches. Honest risks, restated so I can't skip them: this is support-heavy B2B software where an error can touch someone's property rights, and my one-person shop has to be careful about which promises it makes. v0.1 keeps promises it can keep: it counts the days and keeps the books.
Dad, the specific holes I wanted you to poke: anniversary billing versus first-of-the-month, whether reservations need a hold-fee field, and whether the waitlist is day-one or v0.2. Everyone else: the spec is the spec until a real facility operator tells me it's wrong. That's still the bar.
UPDATE, Saturday 11:56am — the holes are poked, verdict from the manager himself. One: a SETTINGS tab, not a per-unit hardcode — a tick box chooses first-of-the-month or anniversary billing per facility, because different operators genuinely run both. Two: a field for the grace period, so an operator decides whether a late fee lands the day after due or N days after. Three: hold fees are a tick box plus an amount field, so a facility that takes $25 to hold a unit can say so, and a facility that doesn't never sees the field. Four: the waitlist is day-one, and each waitlist entry gets a hold-fee-paid box. Fifth thing, his addition, and it goes in both StorageCat AND LedgerCat: track whether PREVIOUS month's rent was paid, not just this month's. He's right — with storage you're always looking backward at who slipped last cycle, and LedgerCat currently only answers about the current month. That one's now on LedgerCat's list too. And a sixth, added a minute later: the Settings tab also takes the facility's UNIT SIZES and the quantity of each — you type 10x10 ×20, 5x15 ×8, climate 10x10 ×6 — and the app builds the unit list from that instead of making someone click Add Unit two hundred times. That's the facility-onboarding path: sizes and counts first, the Units grid fills itself, then real life edits the exceptions.