# Finely

> Know what your month is really costing you.

- Status: Public beta on TestFlight
- Platforms: iOS 26.2+
- TestFlight: https://testflight.apple.com/join/eExcJh3x
- Canonical: https://lanfranchistephane.dev/apps/finely/

Finely is a private personal-finance app for iPhone that brings transactions, recurring commitments, projections, and on-device analysis into one native product.

## Screens

- **Home** — Balance, available-to-spend context, upcoming commitments, and one useful signal for the month. ([image](https://lanfranchistephane.dev/apps/finely/screens/home-current-month.webp))
- **Month Review** — A reusable review turns recorded activity into income, spending, savings, and category context. ([image](https://lanfranchistephane.dev/apps/finely/screens/home-month-review.webp))
- **Activity** — Recorded transactions and due commitments share one chronological surface with full-history search. ([image](https://lanfranchistephane.dev/apps/finely/screens/activity-july.webp))
- **Statistics** — Categories, merchants, savings, and period comparisons expose patterns without changing the underlying facts. ([image](https://lanfranchistephane.dev/apps/finely/screens/statistics-year.webp))
- **Transaction** — One-off and recurring movements enter through an editable native form with explicit financial meaning. ([image](https://lanfranchistephane.dev/apps/finely/screens/new-transaction.webp))
- **Profile** — Accounts, privacy controls, export, appearance, entitlement, and sync status stay visible. ([image](https://lanfranchistephane.dev/apps/finely/screens/profile.webp))
- **Analysis** — A question in plain language is routed to app-owned calculations that produce the answer. ([image](https://lanfranchistephane.dev/apps/finely/screens/finely-analysis.webp))

## A balance explains today. A period explains the decision.

Personal finance becomes useful when past activity and future commitments stop competing for attention. Finely keeps both visible and works out what they leave you for the current period, without asking you to reconcile raw accounting data.

<picture>
  <source media="(max-width: 720px)" srcset="https://lanfranchistephane.dev/apps/finely/diagrams/period-narrow.svg">
  <img src="https://lanfranchistephane.dev/apps/finely/diagrams/period.svg" width="960" height="360" loading="lazy" decoding="async" alt="Recorded money, what already happened (income, expenses, and transfers), plus committed money, what is already planned (subscriptions, fixed charges, and expected income), gives the current period: what is still available. On the period's timeline, recorded money fills the days up to today and committed money the days until the period ends.">
</picture>

## From input to understanding

Each screen answers a different question, but none keeps its own version of the ledger. One path runs from capture to an explainable decision.

<picture>
  <source media="(max-width: 720px)" srcset="https://lanfranchistephane.dev/apps/finely/diagrams/flow-narrow.svg">
  <img src="https://lanfranchistephane.dev/apps/finely/diagrams/flow.svg" width="960" height="236" loading="lazy" decoding="async" alt="Five steps: 1. Capture, from manual entry, recurring declarations, or CSV import. 2. Consolidate, through one write path for every change. 3. Project, recorded and future movements in one order. 4. Understand, in Home, Activity, and Statistics. 5. Ask and act, a plain-language question answered by exact, app-owned calculations.">
</picture>

## One source of truth, several ways to read it

Screens never merge stored and scheduled money on their own. Every change goes through one write path into SwiftData, and one read projection builds the picture every screen shares.

<picture>
  <source media="(max-width: 720px)" srcset="https://lanfranchistephane.dev/apps/finely/diagrams/one-source-narrow.svg">
  <img src="https://lanfranchistephane.dev/apps/finely/diagrams/one-source.svg" width="960" height="476" loading="lazy" decoding="async" alt="Manual entry, recurring setup, CSV import, and Siri and Shortcuts all write through one write path, which owns every change. It stores facts in SwiftData: recorded transactions and recurring rules, kept separate. A read projection merges recorded and forecast movements once, in order; Home, Activity, Statistics, and Analysis all read from it. Projected rows are never stored.">
</picture>

:::note
This is a conceptual map of the product, not a class diagram of the codebase.
:::

How a transaction is written once and read back everywhere is the subject of [The Ledger Behind Finely](https://lanfranchistephane.dev/articles/transaction-ledger/).

## Forecast the future, never rewrite the past

A recurring charge is useful before it happens, but it only becomes history when it is due. Finely keeps projection and persistence apart, so planning stays current while completed periods stay trustworthy.

<picture>
  <source media="(max-width: 720px)" srcset="https://lanfranchistephane.dev/apps/finely/diagrams/forecast-narrow.svg">
  <img src="https://lanfranchistephane.dev/apps/finely/diagrams/forecast.svg" width="960" height="340" loading="lazy" decoding="async" alt="A monthly subscription of 9.99 euros rises to 12.99 euros. Charges from March to June were written once when they fell due, and their amount never changes. From today, July to October are derived from the recurring rule each time a period is read, at the rule's current price, and are never stored. Today falls in June: editing June's charge updates the series from here on, while earlier charges can no longer be edited.">
</picture>

## The difficult work sits between the screens

:::cards
- **Local financial truth**

  SwiftData stores facts and domain services derive meaning, so balances, periods, projections, and comparisons stay deterministic and testable.

- **Controlled import**

  Column mapping, category inference, and duplicate detection happen before one batched save.

- **Paid access**

  StoreKit 2 transaction updates and current entitlements drive Pro features, not optimistic purchase UI state.

- **Privacy and continuity**

  Amount masking, an optional app lock, export, and sync status stay visible to the person using the app.
:::

## End-to-end ownership

I set the product direction, design the interaction, model the financial domain, build the UIKit architecture, define persistence and monetization boundaries, test difficult calendar behavior, and prepare the app for release. Finely is in public beta on TestFlight; its evidence is the completeness and coherence of the system being built.

## Articles about Finely

- [The Ledger Behind Finely](https://lanfranchistephane.dev/articles/transaction-ledger/) — Finely, 8 min read. How Finely stores only transactions and recurring rules, writes each charge exactly once, and gives every screen the same list of past and upcoming money.
- [An On-Device Assistant That Never Makes Up a Number](https://lanfranchistephane.dev/articles/on-device-ai-assistant/) — Finely, 7 min read. How Finely answers questions about your money on the iPhone: Apple's on-device model only works out what is being asked, and Finely calculates every amount from your own transactions. Without Apple Intelligence, simple rules take the model's place.
- [Adding Transactions to Finely from Siri and Shortcuts](https://lanfranchistephane.dev/articles/app-intents/) — Finely, 5 min read. How Finely turns a spoken sentence or an Apple Pay payment into a transaction: it never guesses the amount, reads a spoken transaction back before saving it, and only says it was added when the save really worked.

## Privacy

[Finely privacy policy](https://lanfranchistephane.dev/apps/finely/privacy-policy/)
