Expense Dashboard
activeA personal finance dashboard built around one constraint: bank statements are
sensitive, so they should never touch a server. Drop a PDF from your netbank
onto the page and pdf.js reconstructs the transaction lines right in the
browser — Danish formats and all, from dd.mm.yyyy dates to 1.234,56 amounts
with trailing minus signs and running-balance columns.
From there the app sorts every transaction into categories using a keyword map of Danish merchants (Netto and Rema land in groceries, DSB in transport, husleje in housing), and any correction you make is remembered per merchant. A detector looks for recurring charges — same merchant, stable amount, monthly or quarterly rhythm — and surfaces your subscriptions with their true yearly cost, which is usually the most sobering number on the page. Chart.js draws the category split and the month-by-month spending against income.
The hosting matches the philosophy: a static-assets Cloudflare Worker serves three files and does nothing else. Your data lives in your own browser's localStorage, so the public URL carries none of the security burden a finance app normally would — there is simply nothing server-side to breach.