v0.3.0
Foundation — rebuild today's app on the new stack and re-derive the full delivery pipeline.
Stack: Symfony + API Platform (CRUD/HTTP surface only — money logic stays in services, not entities), standalone React/Vite SPA, same-origin cookie-session auth, single FrankenPHP/Caddy production image, monorepo.
Scope:
- Repo reset (clone to reference, fresh git history) is the opening move.
- Port existing domain: Scenario, Buckets, Streams, projection/distribution engine.
- Port layout + 80s terminal aesthetic.
- Re-derive pipeline (NOT a copy — stack-specific): Forgejo CI, container tooling (PHPStan, PHP-CS-Fixer/Pint), nix-shell dev wrappers, dev + prod images.
Exit: prod image builds and runs == current version; dev runs locally as today; functionality matches today; API contract testable in isolation.
v0.4.0
Accounts — introduce bank accounts and the bucket→account mapping.
Scope:
- Account entity with user-maintained balance (no transaction ledger).
- Buckets belong to accounts (many buckets → one account).
- Account setup/management UI.
- Fidelity modeled (a bucket knows if it's alone in its account) but not yet read by any feature.
Calm CRUD milestone on a stack already validated in v0.3.0.
v0.5.0
Plan engine — the payday computation, backend only.
Scope:
- Plan entity: immutable payday snapshot (income + each account's reported current balance).
- Compute bucket fills from carried account reality + income.
- Compute the minimal inter-account transfer list.
- Fully testable via the API — no UI required.
Exit: POST a plan → correct fills + transfers, proven by tests.
v0.6.0
Plan UI — the payday workflow, frontend.
Scope:
- Reactive plan builder (live what-if calculator — the feature that justifies React).
- Transfer checklist with tick-off (mark each transfer done as executed at the bank).
- Revisit past plans (immutable history view).
Note: the builder should call v0.5.0 endpoints for previews rather than reimplement fill logic in JS — one source of truth for money math.
v0.7.0
Longitudinal intelligence — read the accumulated plan history.
Scope:
- Spend-per-bucket inferred from deltas between consecutive reported account balances.
- Buffer-erosion detection (base allocation too low → buffer trends down over cycles).
- Fidelity-aware warning placement: bucket-level when a bucket owns its account, degraded to account-level when buckets share.
- Option-2 manual split: let a user split a shared account's drop by hand to upgrade fidelity without a new bank account.
- The 3 educational nudges (free-accounts setup tip, earned "give it its own account", keep-buckets-coarse).
Forced last: needs accumulated plan history to compute or test anything.