Documentation
What Idle is, what's live versus roadmap, and how it's built. Two rules bind every page here: a capability is described in the present tense only if it is shipped and enforced in the codebase, and everything simulated says so.
Overview
Idle is treasury automation for startups. Cash in a startup checking account earns roughly nothing while short-dated Treasury bills pay real yield — at published rates, a few million dollars of idle cash forgoes tens of thousands of dollars a year. Idle quantifies that number live, against real market data, and is building the tooling to act on it: T-bill ladder planning, maker-checker transfer controls, and an append-only audit trail, designed for a startup CFO rather than a bank's treasury desk.
Today that means: an interactive demo on a sample company (Meridian Robotics), real workspaces with organizations, roles, and an audit log, and read-only bank connections via Plaid (currently sandbox) that run Idle's analytics against your actual balances. Idle does not hold, move, or invest customer funds — moving real money requires a licensed partner, and that is roadmap, not product. See product status for the precise line.
Quickstart
The fastest way to understand Idle is the demo — no account, no card, nothing to install. It is the full product on a simulated ledger, priced from live FRED and U.S. Treasury rates:
- See live rates— SOFR, the effective fed funds rate, T-bill auction results by CUSIP, and the daily yield curve, each with its own “as of” date.
- Build a T-bill ladder — slice a balance across maturities; the rungs reconcile to the input to the cent.
- Approve and settle — run a transfer through dual approval, the 2 PM ET cutoff, and settlement, then advance the demo clock to watch it post.
Product status
The honest split, kept in lockstep with the codebase (the disclosures page is the compliance rendering of the same facts):
- The interactive demo — the full product on Meridian Robotics, a sample company with a simulated ledger stored in your browser, priced from live public rates.
- Live market data — SOFR and the effective fed funds rate from FRED; T-bill auctions and the daily par yield curve from the U.S. Treasury; degrading to a labeled snapshot if an upstream is down.
- Workspaces — accounts (waitlist-gated), organizations with owner / admin / viewer roles and email invitations, a persistent tenant-scoped ledger, and an append-only, CSV-exportable audit log.
- Read-only bank connections — via Plaid: balances and transactions only, no money movement possible. The yield-lost counter and ladder planner compute against your actual cash. Runs against Plaid's sandbox — labeled in-product — until counsel confirms the privacy footing for production bank data.
- Subscription billing — Stripe Checkout and the customer portal, in test mode until counsel review completes.
- Moving customer funds — requires a licensed partner (a BaaS/partner bank) or money-transmitter licensing. Transfers exist only in the demo, on simulated data, until that footing exists.
- Purchasing T-bills for customers — requires a broker-dealer partner or registration. The ladder tool is planning math until then.
The demo: real vs. simulated
The demo runs the same code real balances run on; only the data is sample data. Nothing leaves your machine — the demo ledger lives in your browser's local storage, and no real accounts exist.
| Real | Simulated |
|---|---|
| SOFR and the effective fed funds rate, from FRED | Meridian Robotics, the sample company, and everyone who works there |
| T-bill auction results (discount + investment rates, by CUSIP), from Treasury FiscalData | The double-entry ledger: ~6 months of deterministic history, seeded and stored in your browser |
| The daily par yield curve, from treasury.gov | Transfers and settlement — a state machine with a 2 PM ET cutoff, dual approval, and banking days |
| All the math: bond-equivalent yield, accrual, allocation, day-count conventions | The “bank connection”: a simulated network layer (add ?chaos=1 for a 20% failure rate) |
| The yield-lost figures — the real opportunity cost at today's rates | The demo clock: advance time to watch transfers settle and bills mature |
How it's built
Money is integer cents — floats never enter
Every amount in the codebase is an integer count of cents held in a bigint. Construction is from decimal strings or cents only; any operation that could produce a fraction takes an explicit rounding mode (banker's rounding by default), so rounding policy is decided once, not at call sites. The workhorse primitive is allocate, which splits an amount by weights using the largest-remainder method — the parts always sum to the input, so a $500,000 ladder sliced across six maturities reconciles to the cent no matter how the sliders land. Property-based tests hold the invariant, and CI enforces 100% branch coverage on the money and analysis modules.
The yield math is the Treasury's, not an approximation
A T-bill's published discount rate understates what you actually earn (it's computed actual/360 on face value). To compare bills to deposit products, Idle converts to bond-equivalent yield exactly as 31 CFR 356 appendix B specifies — including the leap-year day count and, for 52-week bills, the appendix-B compounding quadratic rather than simple annualization. Golden tests pin both paths to published auction results.
Transfers are a pure state machine
Every transition is a pure function: a transfer, its context, and the facts go in; a new transfer plus journal entries plus audit events — or a typed error — come out. The store applies outcomes; nothing else writes. Two controls live in the machine itself, where no UI can bypass them: transfers above $100,000 require a second approver (the submitter can't approve their own), and settlement can't happen before the settlement date the cutoff rule stamped at initiation. Balances are never stored — they're folded from the journal on every render, so a balance can't drift from its entries.
Market data: cached, degraded, never faked
FRED and Treasury are free public APIs, so Idle hits them as little as possible: server-side only (no API key ever ships to the browser), one shared cache refreshed at most every six hours, and per-value fallback to a checked-in snapshot when an upstream is down — the UI shows a banner and per-figure “as of” dates instead of pretending.
Stack
Next.js App Router (Cache Components) · TypeScript strict · Tailwind + shadcn/ui · Neon Postgres + Drizzle (customer ledger persistence; the demo ledger stays in-browser) · Clerk (identity + waitlist) · Stripe (billing) · Plaid (read-only bank data) · Vitest + fast-check · Playwright · GitHub Actions · Vercel.
Security & data handling
- The demo collects nothing. The sample ledger lives in your browser's local storage; nothing leaves your machine.
- Tenant scoping by construction. All workspace financial data is scoped to your organization at the query layer — cross-organization reads are structurally impossible, not merely forbidden.
- Append-only audit log. Who did what, when, from where — immutable by database trigger, exportable to CSV.
- Bank data is read-only. You authenticate at your bank inside Plaid's flow; Idle never sees credentials. Idle stores institution and account names, balance snapshots, and transactions. Plaid access tokens are stored only as AES-256-GCM ciphertext and are never logged; revoking access at your bank fires a webhook that wipes the stored token, and disconnecting in-app revokes at Plaid first.
- Cards never touch Idle. Stripe processes payments; Idle stores only subscription status.
- No trackers. No analytics or advertising trackers exist today; the only cookies are the strictly-necessary authentication cookies. Details in the Privacy Policy.
Plans
The demo is free forever and never gated. Starter (free) is a real workspace — one organization, two seats, read-only bank balances, yield-lost analytics on real balances. Growth ($49/mo) adds unlimited seats, full audit history with export, and ladder planning on real balances. Scale is sales-assisted for finance teams with security and policy requirements. Every feature on the pricing page is explicitly marked live or coming soon, rendered from the same module the server enforces entitlements from — so the pricing copy cannot drift from what the product actually does.
Compliance & disclosures
Idle is software. It is not a bank, not a broker-dealer, not an investment adviser, and not a money transmitter or custodian. It does not hold, move, or invest customer funds, and its figures are educational math on public data — information, not recommendations. An internal compliance document (docs/compliance.md in the source repository) maps exactly what Idle may not claim or do until the right footing exists — a licensed partner or registration — and every marketing surface, this page included, must stay consistent with it. Its public rendering is the product status & disclosures page, alongside the Terms and Privacy Policy (all drafts, for review by counsel, and labeled as such).
Source access
The Idle codebase is private. Prospective customers and investors doing diligence can request access to the repository — including the architecture decision records and the compliance guardrails — by emailing justin@notar.nyc. Every product claim in these docs is checkable against it.