Berkay Orhan
WorkResearchExperienceAboutAskContact
Contact
← All projects

PROJECT / 2026

Finly

Safe-to-Spend Planner for Swedish Households

Local-first personal finance planner for Swedish households. It turns income, bills, CSN, loans, savings and balances into one number: what you can spend this month without touching what you have set aside.

type
Local-first web app (PWA)
languages
English and Swedish, light and dark mode
data
Stays in the browser, optional encrypted sync
license
MIT
stack
React 19 · TypeScript · Vite · Tailwind CSS 4 · Zustand · React Router · Recharts · Convex · Web Push · PWA · Vitest · Vercel

Live site ↗Source ↗

Finly dashboard showing safe to spend, monthly cost, planned saving, accounts and savings goals for an example plan
Finly dashboard showing safe to spend, monthly cost, planned saving, accounts and savings goals for an example plan

01 / Overview

Finly is a personal finance planner built around one question: how much can I spend this month without touching what I have set aside? Instead of listing transactions, you describe your money once (income, bills, subscriptions, CSN and other loans, savings goals and account balances) and keep it up to date in a few minutes a month. A pure TypeScript calculation engine does the arithmetic and the dashboard shows one safe-to-spend figure together with the range it usually falls in. It is made for Swedish households: CSN, mortgages with amortisation requirements, the interest deduction, electricity per price area, grocery costs from Konsumentverket's tables and the Riksbank's rate outlook are modelled rather than approximated. There are no accounts and no server that reads your plan. Everything lives in the browser, and optional sync uses a 12-word phrase that encrypts the data on the device before it is uploaded.

02 / Key features

  • –One safe-to-spend number: bills, subscriptions, loans and savings are taken off first, and the dashboard also shows the usual range so a tight month is not a surprise
  • –Bills that vary, like electricity and groceries, are planned as a range; the real bill replaces the estimate when it arrives, and after a few bills Finly suggests a better estimate
  • –Irregular costs such as holidays, insurance, car service and Christmas are spread into a monthly amount, so the true monthly cost is visible
  • –Months ahead and saved scenarios: step forward to see how a raise, a new loan or a bigger saving goal plays out before committing
  • –A 'Can I afford this?' tool for big purchases and new monthly costs that shows which account it comes from, the lowest point that month, the earliest month it fits, and how paying in full, a down payment plus loan, or saving up first compare
  • –Savings and goals split into planned spending and long-term wealth, with each goal tracked against its target and a 12-month projection
  • –Accounts and loans with payoff order, interest versus repayment, a debt-free date and a 'what if rates change' view that includes the Riksbank outlook
  • –Insights on where the money goes, the largest costs, subscriptions, the true cost of the car, what could be cut and how resilient the plan is if income stops
  • –Each month closes automatically and is frozen with the plan as it was, so a year later you can see what things actually cost and compare month over month
  • –Optional push reminders the day before an irregular cost lands, optional read-only bank balances through Enable Banking with a key you create yourself, and JSON export and import of the whole plan

03 / Challenges

  • –Swedish household money has rules that are easy to get roughly right and hard to get exactly right: CSN, amortisation requirements, fixed-rate periods, the interest deduction (which from 2026 only covers loans with security) and electricity priced per area
  • –Keeping the data private without accounts: a plan has to live in the browser, survive across devices if the user wants, and still never be readable by the server
  • –Bills that swing from month to month make a single monthly figure dishonest, so the number has to carry its own uncertainty
  • –Safari clears browser storage and iOS push only works for installed apps, so a local-first app needs an explicit export path and a good install story

04 / Solution

The calculation engine is plain TypeScript with no React in it and is covered by unit tests, so the tax, loan, savings and scenario models can be checked on their own. Variable costs are stored as ranges and the dashboard shows the usual range next to the safe-to-spend figure. The plan lives in a Zustand store persisted to localStorage, and each closed month is frozen with the plan as it was. Sync is optional: a 12-word phrase is the whole identity and encrypts the data on the device, so the Convex backend only stores ciphertext and schedules push notifications, and reminder text is encrypted the same way. The app deploys as a static site on Vercel with small serverless functions for Riksbank and SCB data, the Enable Banking pass-through, fund and stock quotes and logo lookup, and Settings gives a JSON export of the whole plan and every closed month.

05 / Outcome

A deployed, MIT-licensed planner at finly-ruddy.vercel.app that works without an account, in English and Swedish with light and dark mode. It can be tried right away with an example plan and installed to the home screen as a PWA.

06 / Screens

01 / 03

Finly dashboard with safe to spend, total income, monthly cost, planned saving and bank balance
01Dashboard with the safe-to-spend figure, where the money goes, financial position and savings goals (example plan)
Finly loans page with a CSN loan, a car loan and a credit card, and a suggested payoff order
02Loans page with debt-free dates, interest versus repayment and which loan to pay off first (example plan)
Finly dashboard on a phone with the bottom navigation bar
03The same dashboard on a phone, installable as a PWA (example plan)

Berkay Orhan© 2026

WorkResearchExperienceCVBack to top ↑