Flywheel
A ledger in integer cents, twenty metrics, guardrails that block, and a draft you carry out yourself. Nothing moves money.
What it does
Integer cents, no floats
Every amount is held in integer cents and every rate in basis points. Splits conserve every cent, and the same seed gives the same result byte for byte.
Guardrails that block
High-interest revolving debt triggers a hard block, with an exception for an employer match. A buffer floor, cooling-off timers and concentration caps do the rest.
An advisor, off by default
Switched on, it sends metrics and rule outputs only, never a payee or a memo. You see the exact payload and its hash first.
How a month is allocated
The light runs the default path, then the path with the advisor on. The advisor ships switched off, and both end in a draft.
Core responsibilities
Keep the ledger exact
Every amount is held in integer cents and every rate in basis points. Splits conserve every cent, and the same seed reproduces the same result byte for byte.
Compute the twenty metrics
Computed from the ledger alone: net worth in six forms, free cash flow, savings rate, runway, buffer, utilisation, debt drag and concentration.
Block before it advises
High-interest revolving debt triggers a hard block, with an exception for an employer match. A buffer floor, cooling-off timers and concentration caps do the rest.
Allocate down the waterfall
Every incremental dollar flows through eleven stages in the order you set, among them tax reserve, essentials, minimum payments, match, buffer, avalanche and investing.
Ask three questions a day
A daily check-in picks the questions with the largest dollar impact, capped at three. Anything not asked waits its turn; nothing is dropped.
Flywheel in figures
- 626test cases in the repositorycounted in the repository
- 100%line coverage of the money core, enforced as a build gatethe coverage gate in the test config
- 11stages in the allocation waterfall, in the order you setthe waterfall's stage list
- 22tables in the ledger, with an append-only event logthe schema
Counted in the repository, read from a run or set in the code. No figure is estimated.
FlywheelBuilt
Why it is built this way
Rules written into the code, and what each one prevents.
Apply for a seatA draft, never a transaction
Nothing moves money and nothing connects to a bank. Every recommendation is a draft you carry out yourself, so no rule can spend for you.
One host, and only when you allow it
The advisor ships switched off. Switched on, it can reach exactly one host, sends metrics and rule outputs only, and shows you the payload and its hash first.
A distribution, not a forecast
Projections run a seeded Monte Carlo simulation of a thousand paths and show bands, never a single line as fact. The same seed gives the same bands.
The code behind Flywheel
Three files from the repository, shown in turn. Select one to read it.
01export const BUCKETS = [02 'tax_reserve',03 'essentials',04 'min_debt',05 'match',06 'starter_buffer',07 'avalanche',08 'buffer',09 'invest',10 'human_capital',11 'goals',12 'discretionary',13] as const;01export function roundHalfUp(value: number): number {02 assertFinite(value);03 const rounded = Math.round(Math.abs(value));04 return value < 0 ? -rounded : rounded;01coverage: {02 provider: 'v8',03 reporter: ['text-summary', 'json-summary'],04 include: ['src/core/**/*.ts', 'src/rules/**/*.ts'],05 exclude: ['**/*.test.ts'],06 thresholds: {07 'src/core/**/*.ts': {08 lines: 100,09 statements: 100,10 functions: 100,11 branches: 90,12 },13 },14},Bring the workflow that keeps breaking.
Our engineers work through it with you in a free 45-minute briefing.