Skip to content

Latest commit

 

History

History
206 lines (196 loc) · 55.5 KB

File metadata and controls

206 lines (196 loc) · 55.5 KB

✨ New Features

  • Share your account with another person — you can now give someone (e.g. your partner) full access to your data without sharing your login. They sign up with their own account, and from Settings → Condivisione you add their email to grant access; they can then read and add everything (expenses, assets, dividends…) on your account. A new account switcher in the sidebar user menu lets them jump between their own account and yours, and you can revoke access at any time. Each person keeps their own colour theme. (The person must register with their own email first — and that email must be allowed to register — before you can add them.)
  • Per-asset value history on the Storico page — a new "Valore per Strumento" section lets you pick any past month and see exactly what each individual asset was worth that month. Tick a subset of assets to get their combined value and its share of that month's total, and watch a chart of that combined value evolve across every month on record. Values come straight from your saved monthly snapshots, so all the usual currency, real-estate and price rules are already reflected. (Only months recorded with per-asset detail appear in the picker, so very old months may be skipped.)
  • New dedicated Analisi page — cashflow analysis now lives at its own URL (/dashboard/analisi) instead of being buried as a tab inside Cashflow. Navigate directly to it from the sidebar or bottom navigation. The page includes the full period selector (current year / specific year / full history), the Sankey diagram, pie chart drill-downs, top expenses block, and all analytical sections described below
  • Spending anomaly detection — a new block at the top of the Analisi page automatically flags categories where this month's spending is unusually high compared to the rolling 6-month average (threshold: +25% and +€50). Tap any flagged category chip to jump directly to the relevant section of the Sankey chart
  • Year-over-year comparison charts — a new "Confronto Annuale" section shows whether you're spending more or less than the same period last year, split either by month (grouped bar chart) or by category (horizontal bar chart). In full-history mode it shows a multi-year bar chart across all available years
  • Savings rate trend — a line chart shows how your savings rate has evolved over time, with a 20% reference line and a shaded area below the target so you can see at a glance when you fell short. A 12m / 24m / Tutto switch zooms from the recent window to your entire savings-rate history (Tutto by default)
  • Historical trends over time on the Analisi page — a new "Andamento nel Tempo" section (in the "Storico" view) adds the long-term charts that were missing: one chart tracking income, expenses and net savings together in euros across your whole history, and a second multi-line chart breaking income or expenses down by category over time. A single Mese/Anno toggle switches both charts between monthly and yearly detail. The net-savings line correctly dips below zero in deficit periods, and the timeline always starts from your configured "cashflow history start year"
  • Per-category spending sparklines — a new grid shows a mini area chart for every expense category with at least 3 months of data, ordered by total spend. Tap any card to expand it into a full bar chart for that category's month-by-month history
  • Added a total summary row to all expense drill-down views in the Cashflow Analisi tab. When drilling into any Sankey node or pie chart category, a "Totale (N voci)" row now appears at the bottom of the transaction list showing the aggregated sum — so you can see the full amount at a glance without scrolling through every entry. Available on both desktop (table footer row) and mobile (summary block below the card list)
  • Collapsible sidebar: the desktop sidebar can now be collapsed to icon-only mode with a toggle button in the sidebar header; state persists across sessions
  • Cashflow FAB: a + button appears in the bottom navigation bar when you're on the Cashflow page — tap it to open the new expense dialog without scrolling to the top
  • Account transfers — a new "Trasferimento" transaction type lets you record moving money between your own cash accounts (e.g. checking → savings). Transfers are net-zero: they're automatically excluded from income, expenses, savings rate, budgets, and all performance metrics, so shuffling money around never distorts your stats. The origin account is debited and the destination credited automatically when you create, edit, or delete the transfer
  • What If Analysis — a new tab in FIRE & Simulazioni stress-tests your plan against real-life events: a job loss, a big purchase (house/car), a permanent change in your savings or spending, or a windfall (inheritance/bonus). Each scenario shows the before → after impact on both your traditional FIRE plan and your Coast FIRE plan — FIRE number, progress, years to FIRE, sustainable income, Coast FIRE number, and whether Coast FIRE is still reached. The "Years to FIRE sensitivity" matrix (how your timeline shifts as expenses and savings vary) now lives here too, and the job-loss and savings/spending scenarios spell out the baseline figures each number is built from
  • Job-loss scenario fits a shared portfolio — the "job loss" event in What If now lets you pick exactly which income lines stop, down to individual sub-categories (for example one partner's salary), instead of assuming the whole household income disappears. The impact reflects only the income you actually lose, defaulting to the categories you've marked as work income. A step-by-step breakdown spells out the calculation using your own figures — how much is missed savings versus money drawn from the portfolio — with each formula shown explicitly
  • Semi-annual summary email — a new opt-in report covering each half of the year, sent automatically on 30 June and 31 December. Enable it in Settings → email reports alongside the existing monthly, quarterly, and yearly reports (all share the same recipient list)
  • Period comparisons in summary emails — every summary email (monthly, quarterly, semi-annual, yearly) now includes a "Confronti" table showing how your net worth, income, expenses, and net savings changed versus the previous period and versus the same period one year earlier. A short note clarifies the comparison basis: net worth compares end-of-period snapshots, while income and expenses compare totals over the whole period (and Risparmio netto = Income − Expenses)
  • Allocation — "Cosa faccio" planner — the Allocation page turns your per-class signals into action behind one switch: Ribilancia lists exactly how much to add or trim for each off-target class (largest first, with a calm "Tutto in linea" state when everything is within tolerance), while Versa takes an amount of new money and shows where to put it to move toward your targets without selling anything, broken down per asset class and, drilling in, per sub-category
  • Adjustable rebalancing threshold — choose how far a class must drift from its target before it's flagged for action: ±2%, ±5%, the classic 5/25 rule, or a custom value. The verdict, the plan, and the COMPRA/VENDI/OK chips all react instantly (the balance score reflects absolute distance from target, so it stays put); the threshold sits in its own labelled strip that explains what it drives
  • AI Assistant — live period card — picking a period (month, year, year-to-date, or full history) now fills a context card with that period's net-worth change, cashflow, and allocation shifts before you ask anything, so you choose what to analyse with the numbers already in front of you. In free-chat mode you can optionally attach a period as context from the same control
  • AI Assistant — follow-up suggestions — after each answer the assistant proposes two or three natural next questions (e.g. "Confronta col mese precedente", "Dove posso risparmiare?"); tap one to send it instantly
  • AI Assistant — proactive goal-reached prompts — when the assistant detects from your portfolio data that a tracked goal has been reached, it surfaces a "goal reached" banner at the top of the conversation with one-tap "mark as completed", instead of leaving it hidden in the Memory panel
  • AI Assistant — "what it knows about you" — your active memory items (goals, risk profile, preferences) are shown as a compact inline row, so you can always see what context is shaping the answers
  • AI Assistant — "searching the web" indicator — when a macro or geopolitical question triggers a web search, the assistant now shows a dedicated "Sto cercando sul web…" status instead of a generic delay
  • Budget tab rebuilt — budgets are now something you create yourself, one at a time, instead of a row being auto-generated for every category. Add, edit, and delete a budget from a single dialog, and changes save automatically as you go (no more Save button)
  • Overall monthly budget — set one spending ceiling across everything. The page shows how much of it is still unallocated, and warns you (and pauses saving) if your individual category budgets add up to more than the overall limit
  • Income budgets — set targets for your income categories (salary, freelance) tracked separately from spending, with progress shown toward the goal rather than as an overspend
  • Monthly or yearly budgets — each budget can run on a monthly or an annual horizon. Spiky categories like holidays or gifts can have a single yearly limit (tracked year-to-date) instead of a meaningless monthly cap; budgets are grouped into "Budget mensili" and "Budget annuali"
  • End-of-month spending forecast — a card projects where your spending is heading by month-end at your current pace: projected total, budget left, estimated overspend, and a suggested daily allowance for the rest of the month
  • Budget insights — at a glance: your top spending category this month, how many categories are at risk of going over, your spend versus what you'd usually have spent by this point in the month, and your average daily spend
  • Budget alerts — get warned when a category reaches 50%, 75%, 90%, or 100% of its budget, or is forecast to overrun — both in-app and as a section in your monthly summary email. Choose which thresholds you care about
  • Weekly budget email — a new opt-in report sent every Sunday with the status and progress of all your monthly and annual budgets, plus a one-line AI summary highlighting what needs attention. Enable it in Settings and send a test copy anytime
  • Cost Centers rethought — the Centri di Costo tab is rebuilt around a single Panoramica. A period switch (This month / This year / Last 12 months / All time) drives every figure, a headline shows the total tracked in your cost centers, and the centers themselves are now a single ranked list (highest spend first) with a share bar, instead of a grid of equal cards — so you see where the money goes at a glance. Each center's detail leads with its period total and a change-vs-previous-period chip, breaks the cost down by category (both as a list and a stacked monthly chart), and separates fixed recurring cost from one-off spending
  • Spending ceilings for cost centers — give any center a monthly or annual budget and it reports a verdict (spent vs ceiling, with a meter and an "over ceiling" flag), so a project like "Automobile Dacia" can have a target you actually track
  • Projected annual cost — each cost center estimates what it will cost for the full year at your current pace, damped early in the year so one big January purchase doesn't blow the estimate up
  • Compare cost centers over time — an optional overlay charts your top centers month by month, so you can see when one project overtook another
  • Archive finished cost centers — close a center you're done with to tuck it out of the active list (its history is kept and it can be restored anytime); centers with no spending for a while are quietly marked "inactive"
  • Goals rethought around "will I get there?" — the Obiettivi tab (FIRE & Simulazioni) no longer just shows a progress bar. The headline now gives a verdict — how many goals are behind and the nearest deadline — instead of a meaningless average. Each goal carries an "In linea / In ritardo / Raggiunto" tag, and the list is sorted by urgency (behind first, then by closest deadline)
  • Monthly contribution and projection per goal — set how much you plan to put aside each month for a goal, and the app tells you the contribution it would actually need to hit the target by its date, your projected completion date, and draws a glide-path chart from today's value to the target (with the deadline marked). The expected return is inferred from the goal's recommended asset mix
  • "Where to put the next deposit" — enter an amount and it's split across your under-funded goals, weighted by how much each still needs and its priority — the same logic the Allocation page uses for asset classes
  • Order of achievement timeline — a sequenced view shows the order in which you'll reach your goals at the current pace (e.g. Auto 2026 → Casa 2029 → Pensione 2041), with reached goals marked done
  • Free capital, surfaced — the "Non assegnato" figure now expands to list exactly which holdings still have unassigned value, so you can see what's free to commit to a goal
  • Dividends & coupons tab, redesigned — the Cashflow "Dividendi" tab now opens with the one number that matters: the net dividends you actually cashed, with a period switch (this month / this year / last 12 months / all time) that updates everything instantly. Below it, a Lordo / Tasse / In arrivo / monthly-average grid, a clean ranked list of who pays you the most, and a trailing-12-month income sparkline. The old wall of charts and tables is now tucked behind "Grafici" and "Analisi avanzata" so the page opens calm. The asset filter now lists only the assets that have actually paid you a dividend (including ones you've since sold), instead of your whole portfolio
  • New "income reliability" read on dividends — two at-a-glance signals for anyone building a dividend income stream: monthly coverage (how many months in the period actually paid something) and concentration (how much of your income leans on a single payer, labelled Diversificato / Moderato / Concentrato). Both update with the period switch
  • Inflation-linked bonds (BTP Italia Sì) — you can now track bonds whose coupon is a guaranteed minimum fixed rate plus the national FOI inflation for the period (like the new BTP Italia Sì). Mark a bond "Indicizzata all'inflazione (FOI)" when you add it and set the fixed minimum rate; the app schedules each coupon for you. Because the inflation part is published only shortly before each payment, the upcoming coupon first appears as provisional (fixed part only) — a banner in the Dividendi tab reminds you to enter the announced rate, and a one-field dialog recomputes the coupon with a live preview so you can cross-check it against your broker's figure. In deflation the inflation part counts as 0, so the fixed minimum is always honoured
  • Spending by type over time — the Analisi page (Storico view) adds an "Uscite per Tipo" chart that tracks how your spending splits across Fisse / Variabili / Debiti over time. A €/% toggle switches between absolute euros and a 100%-composition view, so you can read whether your spending is becoming more structural or more discretionary independently of the overall level. The Mese/Anno toggle drives it like the other history charts
  • Hall of Fame in your summary emails — monthly and yearly summary emails now put the period in historical perspective with a one-line standing under your net worth, e.g. "🏆 È il 4° miglior mese per crescita del patrimonio" (or a calm "📉 Mese in calo" when net worth dropped). The ranking uses the same Hall of Fame logic as the app, and the AI comment can reference it too
  • Richer year-end email — the yearly summary email is now a fuller year-in-review: a "Spese per Tipo" breakdown (Fisse / Variabili / Debiti), your Top 10 single expenses, and a new Top 10 income entries of the year — all in the same email you already receive, with the existing AI year-end comment now also reasoning about your fixed-vs-variable spending mix
  • Cost center detail — breakdown by subcategory with a "net of X" toggle — opening a cost center now shows a new "Dettaglio per sottocategoria" card that splits the period's spend by subcategory (ranked, with each one's share). Tap any subcategory to exclude it and the card recomputes a "Totale al netto" — so you can answer questions like "for my car, how much did I spend net of fuel?" at a glance. Exclusions are a quick what-if (they reset when you leave) and never affect the center's headline total, budget verdict, or charts, which always reflect your real spend

🐛 Bug Fixes

  • Fixed: bond coupons paid today are now reliably recorded in Cashflow and the next coupon is always scheduled. The evening dividend automation used to compare payment dates against a UTC day, so a coupon dated "today" in Italy could fall just outside the window and be skipped — leaving no cashflow entry and, worse, halting all future coupons for that bond. The automation now uses the Italian day and also catches up any coupon it missed on a previous run, so a single hiccup can no longer break the coupon chain

  • Fixed: updating a bond's price no longer records its upcoming coupon as Cashflow income the moment you save, and no longer creates duplicate coupon entries when you re-save the bond. A coupon becomes a cashflow entry only when it is actually paid, handled by the evening dividend automation

  • Fixed: dividend yield metrics (YOC and Current Yield, on both the Rendimenti page and the Dividendi tab's "YOC Portafoglio") no longer count dividends from assets you have fully sold. Those payouts used to inflate the yield while their cost was no longer in the denominator. The dividends still appear in your dividend history as income actually received

  • Fixed: after selling an asset and buying it back later, its dividend metrics no longer mix the closed holding with the new one. Yield on Cost, Current Yield, and "Rendimento Totale per Asset" now count only the dividends received during your current holding — so a dividend earned on a position you've since sold is no longer credited against the new position's cost. The dividend stays in your history, and the per-share "Crescita Dividendi per Azione" table still shows it (that one tracks the asset's payout per share, not your cost)

  • Fixed: typing an existing category name in the expense or dividend dialog no longer shows a "+ Aggiungi" create-option alongside the matched result — the option is hidden when typed text is an exact match (case-insensitive), preventing accidental duplicate creation

  • Fixed: new accounts no longer start with a pre-filled set of equity sub-categories (All-World, Momentum, Quality, Value, Pension, Private Equity, High Risk, Single Stocks) and pre-assigned percentage targets. The equity class now starts unconfigured so each user can define their own sub-categories from scratch

  • Fixed: adding a subcategory without choosing an icon (or clearing an existing subcategory's icon) no longer prevents the expense category from saving — it used to fail with an internal "undefined value" error. Saving categories and subcategories now handles empty optional fields correctly

  • Fixed: editing an asset (cash balance, ETF quantity, manual price, or any other field) on the Portfolio page now immediately updates the portfolio total, monthly/annual variations, and sparkline in the hero block — no manual page refresh required

  • Fixed: column headers in the Analisi page transaction details (Sankey drill-down and pie chart drill-down) no longer overlap with row content when scrolling — the header background was semi-transparent, causing rows scrolling underneath to bleed through

  • Fixed the "Auto-calculate Equity/Bonds" toggle in Settings not persisting after a page refresh — disabling it would revert to enabled on reload because the setting was never saved explicitly

  • Fixed a color regression in the Cashflow Sankey chart: after drilling into a spending category (e.g. "Rifiuti") and pressing "Indietro", the panel header reverted to the subcategory's derived gray color instead of the parent type's original color (e.g. blue for "Spese Fisse"). Navigation now correctly restores the original type color at every level

  • Fixed: Overview composition charts were stuck on "Preparazione grafico..." for empty portfolios

  • Fixed: the overview loading spinner was remounting on every parent re-render, causing a flicker during the count-up animation

  • Fixed: loading skeleton on the Overview page now includes the charts section, preventing a layout shift when data loads

  • Fixed: password mismatch error on Register now stays visible inline under the confirmation field (not just a disappearing toast)

  • Fixed: benchmark chart tooltip label was invisible in all dark themes — the date label used a hardcoded near-black color that disappeared on dark backgrounds. Now correctly uses the theme's foreground color token across all six themes

  • Fixed: a transfer between two accounts now updates both account balances together — the origin debit and destination credit are applied as a single atomic operation, so a network hiccup can no longer leave one account updated and the other not

  • Fixed: large amounts (e.g. full-year totals) no longer spill past the edges of the Cashflow summary cards — the value text now scales to fit its card

  • Fixed: the category filter inside the Cashflow filters panel could not be scrolled on tablets — the full category list is now reachable

  • Fixed: clearing a default cash account in Settings (selecting "Nessun default" for the withdrawal or deposit account) now actually saves — previously the old account was silently kept on reload, so the default could never be removed once set

  • Fixed: the Cost Centers tab now updates immediately when you add, edit, or delete an expense linked to a cost center — the per-center totals and transaction counts refresh on the spot instead of requiring a full page reload

  • Fixed: the settings panel in the FIRE Calculator and the configuration panel in Coast FIRE now stay collapsed when you've already set them up — they were incorrectly opening expanded on every visit because of a load-time timing issue

  • Fixed: the Bear/Base/Bull scenario cards in Coast FIRE now sit on a single row on laptops and tablets — they were wrapping to a 2 + 1 layout even when there was room for all three

  • Fixed: the page numbers no longer slide with a choppy animation when you collapse the settings panel in the FIRE Calculator and Coast FIRE tabs — they now settle smoothly in place

  • Fixed: the Conversations and Memory lists in the AI Assistant could not be scrolled on desktop — their content is now fully reachable (both now open as side panels from the header on every screen size)

  • Fixed: positive and negative figures in the AI Assistant's context card used fixed green/red that didn't match non-default themes (e.g. orange for negatives in Cyberpunk) — they now use each theme's own positive/negative colors

  • Fixed: budgets could appear to vanish after a page refresh — the budget list now loads reliably even before your categories have finished loading, so your saved budgets always show up

  • Fixed: the "Ottimo risparmio" celebration badge on the Overview (shown when last month's savings rate was high) stayed pinned on screen until you manually refreshed the page — it now reliably disappears on its own after a few seconds, and a new close button lets you dismiss it instantly

  • Fixed: gain/loss colors on the Portfolio (Patrimonio) page used fixed green/red that clashed with non-default themes (e.g. orange negatives in Cyberpunk). The net-worth variation chips, the unrealized G/P line, the asset table's G/P and performance deltas, and the mobile asset cards now all use each theme's own positive/negative colors across all six themes and dark mode

  • Fixed: in the Analisi page's "Anno Corrente" view, the "Andamento Risparmio" (monthly savings rate) and "Trend per Categoria" charts were also showing months from previous years instead of just the current year. Both charts now match the period you've selected — the current year in "Anno Corrente", the chosen past year in "Anno" (where they now appear; they were previously hidden), and the full history with the 12m/24m/Tutto window toggle only in "Storico"

  • Fixed: on mobile, the Rendimenti page header buttons (Periodo Personalizzato / Analizza con AI / Aggiorna) no longer crowd the title (which was truncated to "Rendi…"). They now sit as a full-width stacked bar below the header, while desktop keeps them inline top-right

  • Fixed: on mobile, the "Analizza con AI" dialog footer buttons (Copia Analisi / Rigenera / Chiudi) no longer overflow off the right edge — the footer now stacks the disclaimer above full-width buttons on narrow screens, staying a single row on desktop

  • Fixed: the Cashflow date picker's "Mesi" shortcuts no longer hide the most recent month off the end of the list. The list used to start at the current month and repeat the "Questo mese" / "Mese precedente" shortcuts right above it, so the oldest of its six months (e.g. January) fell off. It now skips the current and previous month and lists the six months before them, keeping older months reachable

  • Fixed: on the Rendimenti page, choosing a custom date range no longer leaves the first month of the range without a return. Custom periods now include a hidden baseline month — exactly as the preset YTD / 1 Year / 3 Years / 5 Years timeframes already did — so the opening month of the range is measured correctly

  • Fixed: the summary emails (monthly, quarterly, semi-annual, yearly) no longer under-report "Uscite totali". A refund recorded inside a spending category (a positive amount) was being counted as income instead of an expense, so the email's expense total came out lower than the Cashflow page for the same month. Every transaction is now classified by its type the same way the app does, so the two figures match

  • Fixed: the "Confronto con Portafogli Modello" table on the Rendimenti page no longer shows blank values (TWR, total growth, Sharpe, Sortino, Calmar) for the model portfolios when the selected timeframe ends in the current, still-ongoing month. The benchmarks now use their last available month of market data instead of expecting a return for a month that hasn't finished yet

🔧 Improvements

  • Clearer "by category" trend chart on the Analisi page — the per-category chart in the "Andamento nel Tempo" (Storico) view no longer groups all the smaller categories into a single "Altro" line. That combined line was the sum of many categories and routinely towered over every real category, squashing the rest of the chart. It now shows only your top 6 categories by total, each as its own line, so the comparison between them is actually readable

  • Tooltip rows now follow the lines — hovering the per-category trend chart lists the categories from highest to lowest value at that point, matching the visual stacking of the lines, instead of a fixed order you had to map by hand

  • Analisi period selector is centered on phones and tablets — the Anno Corrente / Anno / Storico switcher (and its year/month picker) now sit centered when stacked on narrow screens, instead of clinging to the left edge with a large empty gap. On wide desktop screens it keeps the side-by-side layout with the picker on the right

  • Dividends — delete confirmation is now inline: deleting a dividend record no longer opens a browser confirmation dialog. Click "Delete" once to arm (the button turns red and shows "Conferma"), then click again within 3 seconds to confirm. Click anywhere else or wait 3 seconds to cancel. Consistent with the delete pattern used in Cashflow and Portfolio

  • Dividends — "Download All" confirmation is now an in-app dialog: the "Scarica Tutti (Manuale)" button now opens a styled confirmation dialog instead of a native browser alert, showing the number of assets that will be scraped before proceeding

  • Dividends — calendar cells announce date and payment count to screen readers: the dividend calendar grid now has full ARIA structure (role="grid", role="row", role="gridcell") so screen readers can navigate it as a table. Each day cell announces its full date (e.g. "15 Maggio 2026 — 2 pagamenti") instead of just the day number

  • Dividends — today's date marker respects the active color theme: the ring around today's date in the dividend calendar now uses the app's primary color instead of a fixed blue, so it stays consistent across all six themes

  • Dividends — bar and line charts follow the active theme: the "Dividendi per Anno" bar chart and "Reddito Mensile" line chart now use theme-aware colors instead of hardcoded greens, reds, and blues that clashed with non-default themes (especially Cyberpunk and Solar Dusk)

  • Dividends — type badges display correctly in dark mode: dividend type badges (Ordinario, Cedola, Straordinario, etc.) in the calendar date popup now show correctly in dark mode — the background and text were previously near-white in dark themes due to missing dark-mode Tailwind variants

  • Expense type descriptions reworded — the creation dialog now frames Fixed and Variable expenses as a complementary pair: Fixed expenses are described as "things you can't do without"; Variable expenses as "extras you could do without". The contrast makes it immediately clear how to categorize a new transaction

  • Asset class names cleaned up — the Allocation page no longer shows English terms in parentheses (e.g. "Azioni (Equity)" → "Azioni", "Obbligazioni (Bonds)" → "Obbligazioni"). The page is fully in Italian now

  • FIRE runway target label clarified — the label for the dashed target line in the FIRE historical runway chart now reads "Obiettivo patrimonio (anni di spese, linea tratteggiata)" instead of showing the raw formula (100 ÷ SWR X%). The numeric value displayed next to it (e.g. "25,0 anni") already communicates the answer

  • AI assistant now knows your allocation targets — the assistant receives your configured target allocation (from Settings → Allocation) in every analysis. When you use the new "Allocazione vs target" suggested prompt chip, it compares your current portfolio allocation against your targets class by class and sub-category by sub-category, calculates the gap in percentage points, and suggests which areas to prioritize for your next purchase to get back on track

  • Year-over-year variation chart is now always visible in the History page — it was previously hidden inside a collapsed "Appendix" section that required an extra click to open. It now appears directly in the Growth Drivers section alongside the savings and work/investment charts

  • Monthly snapshot log removed from History — the grid showing the last 6 raw snapshots was redundant; the same data (with notes) is accessible through the snapshot search dialog already present in the page header

  • History "Work & Investments" chart now respects your color theme — the three trend lines (income earned, saved from work, investment growth) previously used fixed colors that didn't change when switching themes. They now follow the active theme palette like all other charts in the app

  • Navigation reorganized — the sidebar group for analytical pages is called "Statistiche" and contains the read-only views (Analisi, Rendimenti, Storico, Hall of Fame, Assistente AI). The Allocation page has moved to the "Pianificazione" group alongside FIRE & Simulations, since it drives buy/sell/hold decisions rather than being a passive view

  • Goal-based allocation targets (Settings → Preferences → "Allocazione da Obiettivi") now correctly reflect investment priorities: each goal is weighted by its outstanding gap multiplied by its priority level (Alta 3×, Media 2×, Bassa 1×). Goals that are already fully funded are excluded from the calculation. Previously, only the target amount was used as weight, which made the priority setting have no meaningful effect

  • The Allocation page banner and the Goals tab now explain how the priority weighting affects allocation targets, so the logic is transparent and actionable

  • The Overview "Sintesi Patrimoniale" card no longer shows a redundant large number at the top. The card now reads as a clean financial statement — asset breakdown flows naturally into the fiscal impact section, with "Pat. Netto Totale" as the clear bottom-line conclusion

  • Transaction list amounts in the Cashflow Sankey drill-down now use design system color tokens instead of hardcoded hex values — positive amounts in green, negative in red, both correctly adapted to all six color themes and dark mode

  • Links in the Sankey transaction detail now use the primary color token instead of a hardcoded blue, staying consistent with the rest of the app

  • "Since start" performance column (Δ Inizio) in the Assets table now measures the price variation since the first tracked snapshot of each asset, not the return versus your purchase price. Previously it was based on your average cost, which made it numerically identical to the G/P% in the same row — so the column added nothing. It now answers a distinct question ("how has this position moved since I started tracking it") and an info tooltip on the Δ Inizio header (and on the asset cards) clarifies that the three Δ columns are price variations over time, not profit/loss

  • Total unrealized G/P in the Assets hero now correctly excludes cash accounts from its calculation. Including cash in the cost-basis denominator would artificially lower the percentage — cash doesn't generate investment returns

  • CAGR tooltips clarified: the History page chip now explains that its figure includes both investment gains and new contributions (raw wealth growth rate). The Rendimenti page tooltip now explains that contributions are counted as invested capital in the denominator, which is why that figure is typically lower — the two metrics measure different things intentionally

  • Tab bar style: Cashflow, FIRE & Simulations, and Settings tabs use an underline sliding indicator instead of a rounded pill

  • Theme-aware background: the dashboard main content area now correctly uses theme colors (was fixed gray regardless of selected theme)

  • Landing page redesign — the public landing page now opens with a live preview of the Panoramica dashboard rather than a generic marketing hero: a dominant net-worth figure (counting up on load), a green monthly-change chip, and a real trend sparkline, sitting beside the pitch. The feature list dropped the six identical cards for a cleaner two-column list, and the whole page now animates in on load (and stays still if you have Reduce Motion enabled). The preview uses clearly-labelled sample data

  • Landing page — richer, more honest preview — below the net-worth card the landing now shows a second live preview of a real module, the Cashflow savings-rate ring, and a compact "in sintesi" strip of facts about the app (asset classes, themes, 100% open source, AI assistant). A dark/light theme toggle (with the same circle-reveal animation used inside the app) is now available on the landing, login, and registration pages too, so the public pages match the app's look and let you pick your preferred mode before signing in

  • Accessibility — navigation: skip-to-content link added to the landing page; sidebar, bottom nav, and secondary drawer are now named landmarks for screen reader navigation; active route announced via aria-current on all nav items

  • Accessibility — loading states: loading spinner on the landing page and the demo button now announce state to screen readers

  • Accessibility — motion: bottom nav pill, landing hero, login/register animations now respect the system Reduce Motion preference; all loading spinners stop spinning when Reduce Motion is active

  • Accessibility — touch targets: password toggle buttons on login/register enlarged from 28px to 44px

  • Accessibility — form autofill: login and register fields now have correct autoComplete hints so browsers and password managers fill them correctly

  • Sidebar accent contrast: fixed in Retro Arcade (light and dark) and Solar Dusk (light) — active sidebar items now meet WCAG AA contrast in all six themes

  • Improved: Cashflow Tracking tab — income and expense KPI amounts (Entrate, Spese, Risparmio) now use theme-aware color tokens instead of fixed green/red, so they adapt correctly to all six color themes including Cyberpunk and Solar Dusk

  • Improved: Filter panel in the Cashflow Tracking tab is now fully keyboard-accessible — Tab navigates to it and Enter/Space opens or closes it (previously only reachable by mouse)

  • Improved: Expense creation dialog now announces its type picker as a radio group to screen readers, so users relying on assistive technology hear "Tipo di voce da registrare, radiogroup" and can navigate the four options correctly

  • Improved: Expense creation and edit dialog now provides a contextual description to screen readers when it opens ("Seleziona il tipo di voce da registrare", "Inserisci i dettagli della nuova voce", or "Modifica i dettagli della voce selezionata" depending on the current step)

  • Improved: Budget tab progress bars now announce their value to screen readers — assistive technology reads "Avanzamento budget, X%" for each category row instead of skipping the bar entirely (WCAG 4.1.2)

  • Improved: Budget tab section headers, category rows, and subtotal rows are now keyboard-accessible — Tab navigates to them and Enter or Space expands/collapses or opens the historical drill-down (WCAG 2.1.1)

  • Improved: Budget tab percentage values now render in a monospaced font, keeping numbers visually aligned across rows

  • Improved: Budget tab loading state now shows a structural skeleton matching the page layout instead of a plain text message

  • Improved: Budget tab item detail dialog (mobile) now announces the category name and context to screen readers when it opens

  • Improved: Budget tab reorder and delete buttons in edit mode now announce their target category to screen readers

  • Improved: Budget tab over-budget progress bars now follow the active color theme's destructive color instead of a fixed red — adapts correctly across all six themes including Cyberpunk and Solar Dusk

  • Improved: Budget tab delta percentages and table text adapt correctly to all six color themes — no more fixed gray or green values that clashed with non-default themes

  • Fixed: Cost Centers monthly chart tooltip now displays correctly in all dark themes (Cyberpunk, Midnight Bloom, Elegant Luxury, Solar Dusk) — value text was invisible against the dark background

  • Improved: Cost Centers list cards are now fully keyboard-navigable — Tab focuses each center, Enter or Space opens the detail view

  • Improved: Cost Centers color picker now announces color names to screen readers ("Blu", "Verde smeraldo", etc.) instead of raw hex values; the selected color is also announced

  • Improved: Cost Centers "Create / Edit" dialog now provides a contextual description to screen readers when it opens

  • Improved: Cost Centers detail view now shows a structural loading skeleton instead of a plain text message — the skeleton anticipates the KPI grid and chart layout

  • Improved: Allocation page asset class cards and sub-category rows are now fully keyboard-navigable — Tab focuses each drillable item, Enter or Space opens the detail view or sub-category drill-down (WCAG 2.1.1)

  • Improved: the Allocation page has been redesigned — it now opens with the shape of your portfolio (a composition bar coloured by asset class, matching the History chart) beside a balance-score ring (0–100) that shows at a glance how far the whole portfolio sits from target ("X% del portafoglio fuori posizione"; the score reflects absolute distance from target, so it stays put when you change the threshold). The page then separates a decision zone — total, balance, threshold, and the "Cosa faccio" action block — from a quieter "Dettaglio" zone under a divider: a single unified composition list (tap any class to expand its sub-categories inline, the same interaction on phone and desktop, replacing the old separate desktop tables and mobile bottom sheet, each row with a slim current-vs-target bar) followed by the look-through portfolio exposure

  • Improved: Allocation colours follow your theme — the composition bar, the balance-score ring, the current-vs-target bars and the COMPRA/VENDI/OK chips all use your selected theme's palette instead of fixed colours, with a readability safeguard that keeps them legible in light and dark across all six themes

  • Improved: Allocation page loading skeleton now matches the page container dimensions precisely, eliminating a brief layout shift on the horizontal margins when portfolio data loads

  • Improved: the Rendimenti page has been redesigned — instead of four equally-sized hero numbers and a wall of fifteen metrics, the page now opens with one answer: your annualized return (TWR), a plain-language verdict ("Solido", "Fragile", …), how you're doing versus a model 60/40 portfolio, whether you're at a new high or below your peak right now, and a compact strip of vital signs (Sharpe, Max Drawdown, net contributions, YOC). A consistency line shows how many months were positive plus your best and worst month. The full fifteen-metric breakdown is one tap away under "Mostra tutte le metriche", and the six charts are now grouped into "Andamento" and "Rischio" sections so the core chart no longer sits at the same weight as the niche ones

  • Improved: Rendimenti page metric values (TWR, Sharpe, ROI, etc.) now adapt their green/red colors to all six color themes instead of using fixed Tailwind green and red values that clashed with non-default themes

  • Improved: Portfolio line in the benchmark growth-of-100 chart now follows the active color theme, matching the rolling CAGR and Sharpe charts on the same page

  • Improved: Heatmap zero-return months now use the theme's neutral background color instead of a fixed gray, staying consistent across all six themes

  • Improved: AI Analysis button hover glow now derives from the theme's accent color instead of a hardcoded purple, adapting correctly to all six color themes

  • Improved: Benchmark comparison table and monthly returns heatmap now have proper semantic column and row headers, enabling screen reader users to navigate them as structured data tables (WCAG 1.3.1)

  • Improved: Screen readers now announce the active custom date range period in the Rendimenti period selector — previously, selecting a custom range left all tab buttons unselected with no announcement of the active state

  • Improved: History page CAGR and total-growth chips are now tappable on mobile — they previously used a native browser title attribute that only worked on desktop hover. Both chips now open an explanatory popover on click or tap, matching the tooltip pattern used throughout the Rendimenti page

  • Improved: The total portfolio growth chip on the History page now also has an explanatory tooltip clarifying that the figure is not annualized and includes both contributions and investment returns

  • Improved: Milestone progress bar and badge colors on the History page (Raddoppi section) now follow the active color theme instead of using fixed blue and green — the in-progress card adapts to your selected theme accent color

  • Improved: History page YoY variation chart now shows a color legend on mobile (positive year / negative year) — previously the chart legend was hidden on narrow screens with no replacement

  • Improved: History page monthly savings chart (Risparmio mensile view) now shows a color legend on mobile — the annual view already had one; the monthly view was missing it

  • Improved: History page Labor & Investments chart now shows a color legend on mobile (Guadagnato / Risparmiato / Investimenti) — the Recharts legend was previously shown but truncated the long Italian labels on narrow screens

  • Improved: the Cashflow summary KPIs (Income, Expenses, Net savings, Ratio) now fill the full width on desktop as a single row, and stack into a clean 2×2 grid on mobile and inside narrow columns — replacing the cramped horizontal carousel that left empty space on wide screens

  • Improved: the Cashflow filter controls (period picker, Filters, sort) are now centered on mobile instead of being pushed to one side

  • Improved: the category filter inside the Cashflow filters panel now opens as a full-width bottom sheet on tablet (previously a small, unscrollable popup) and hides its scrollbar for a cleaner look on both mobile and tablet

  • Improved: on phones and tablets in portrait orientation, the in-page "Aggiungi" button on the Cashflow list is now hidden when the bottom navigation bar's + button is available, removing the duplicate control; in landscape (where the bottom bar is hidden) the "Aggiungi" button remains

  • Improved: tab navigation on mobile — Cashflow, Settings, and FIRE & Simulations now use a centered segmented pill on phones and tablets. The active section shows its icon alongside the full section name; inactive sections show only their icon, keeping all options visible without horizontal scrolling

  • FIRE Calculator & Coast FIRE — settings moved to the top: the settings/configuration panel now sits at the top of each tab and stays collapsed once configured, keeping the results front and center; it opens automatically only when something still needs setting up or you have unsaved changes

  • Coast FIRE — scenario cards moved above the chart: the Bear/Base/Bull comparison cards now appear directly above the "Proiezione senza nuovi contributi" chart, since they describe exactly the scenarios the chart plots

  • What If — every number shows its baseline: the job-loss scenario breaks down its portfolio impact (missed savings + living costs drawn from the portfolio, based on your last full year), and the savings/spending scenario shows your current annual savings and expenses and what they become after the change

  • Cashflow KPIs — clearer "Risparmio Netto" and "Rapporto": each KPI now has a tappable info button that explains exactly what it measures (Net Savings = income − expenses; Ratio = how many times income covers expenses). The Net Savings subtitle now reads "X% del reddito" instead of "Tasso X%", making it obvious it's the share of income you saved

  • What If sensitivity matrix — easier to read on phones: on mobile the "Sensibilità Anni al FIRE" matrix now labels each card with "SPESE ANNUE" (annual expenses) and tags the inner values as "Risparmio annuo" (annual savings), with a reading note written for the card layout instead of the desktop table's rows-and-columns wording

  • Richer AI commentary in summary emails — the AI comment in every summary email now follows a clear 5-part structure: an overview of the period, a comparison with the previous period, a comparison with the same period last year, a breakdown of how much your income and expenses changed and the likely reasons, and a couple of practical takeaways. The cause analysis now draws on your subcategories and transaction notes (not just top-level categories) for more specific explanations, and can reference recent market events to explain net-worth moves

  • Clearer net-savings figure in emails — the "Risparmio netto" line in summary emails now spells out that it is Income − Expenses and shows the amount saved as a percentage of income

  • Weekly budget email now shows what drove an overrun — when a category has actually gone over its budget, the Sunday email lists the individual expenses behind the overrun underneath that category, each with its date, subcategory, note, and amount (largest first), so you can see exactly where the money went without opening the app. On-track categories and income targets stay compact as before

  • AI Assistant redesigned around a single period axis — Mese / Anno / YTD / Storico / Libera now live in one selector with the period picker right beside it, instead of being split between the top of the page and the message box. The message box is now just type-and-send

  • AI Assistant — Conversations and Memory open as side panels on desktop too — matching mobile; the right column now shows only the period context card

  • AI Assistant — unified preferences — response style, web/macro context, and automatic memory on/off now sit together in one Preferences popover instead of being scattered across the page

  • AI Assistant — ready to use on arrival — it now defaults to your last completed month (which always has data) and shows clearer keyboard focus outlines across its controls

  • Budget forecasts are smarter early in the month — instead of blindly extrapolating a big purchase made on day 3 into a huge month-end projection, the forecast now blends your current pace with your usual spending and waits a few days before flagging anything as "at risk". The insights comparison also measures your spend against what you'd typically have reached by today, not against a whole month

  • Overview gain/loss colors now follow your theme — the net-worth variation chips and the unrealized-gains figure on the dashboard, plus the dashboard's cashflow KPIs, now use your selected theme's positive/negative colors instead of fixed green/red. A negative value shows in the theme's own color (e.g. orange in Cyberpunk) and stays consistent with the rest of the app across all six themes and dark mode

  • Cleaner first-run Overview — a brand-new account now sees a short "your breakdown will appear after the first asset" note in the dashboard summary card instead of a list of €0 rows ending in a "100,0%" total. Cost figures, labels, and headings on the card were also tightened (a single "Totale" line, consistent sizing) for a calmer, more uniform read

  • Overview accessibility — the mobile composition chart switcher (Asset Class / Per Asset) is now properly announced to screen readers as tabs controlling the chart below, and its buttons have larger, easier-to-tap targets. The hero net-worth trend line and the savings celebration badge also follow your selected color theme instead of fixed green/red, staying consistent across all six themes and dark mode

  • Portfolio asset table is less cramped on laptops — the ticker now appears under each asset's name instead of taking its own column, and the three performance columns (Δ this month / year-to-date / since start) are hidden behind a new "Andamento" toggle in the table toolbar, so the default table fits without scrolling sideways at common laptop widths. Turn the toggle on whenever you want the full performance breakdown. All figures in the table are now in a monospaced font for cleaner column alignment

  • Portfolio summary card is calmer — the liquid-wealth summary card's heading now names the exact figure it shows ("Patrimonio Liquidabile Netto"), and the detailed "Impatto Fiscale" tax breakdown is collapsed by default, expandable with a tap

  • "Andamento Strumenti Selezionati" now explains why a value moved — on the Storico "Valore per Strumento" chart, hovering a month now shows the change versus the previous month split into "da prezzo" (market movement) and "da quantità" (your buys and sells). So when a holding's line drops, you can tell at a glance whether the market fell or you simply sold part of the position — instead of guessing

  • Yield on Cost is now consistent and reflects your current cost — the Rendimenti page and the Dividendi tab now compute YOC the same way: per-share, against your current average cost. Selling and rebuying an asset at a different price is now reflected in the yield, and buying more shares after a dividend no longer distorts it. Tooltips and the methodology guide make explicit that YOC and Current Yield consider only the assets you currently hold (dividends from sold assets stay in your dividend history as income received)

  • Improved: the "Andamento Risparmio" chart's 20% target line and below-target tint, and the "Trend per Categoria" hover highlight, now follow your selected color theme instead of fixed green, red, and gray — staying consistent across all six themes and dark mode

  • Cashflow Tracciamento tab redesigned around one clear answer — instead of four equally-sized boxes (Entrate / Spese / Risparmio / Rapporto), the tab now opens with your Risparmio Netto as the dominant figure, a single plain-language health verdict ("Salute ottima", "In pareggio", "In deficit" with the % of income you saved), your income and expenses just beneath, and the top 5 spending categories. The filters move out of the way — only the period stays on top, while search, categories and account live in a compact toolbar on the movements list

  • One consistent movements list on every screen — desktop and mobile now share the same transaction feed grouped by day (Oggi / Ieri / date), so a movement reads and behaves the same everywhere. Tap any row for a detail sheet with edit and delete. On desktop a Feed / Tabella switch lets you flip to the dense sortable table whenever you prefer it

  • Search Cashflow by amount — the Cashflow search box now also matches transaction amounts, not just notes and category names. Type "76" to find every transaction around that figure (76,45 · 176 · 1276…), or "76,45" for an exact match — the Italian decimal comma is understood

  • Model-portfolio comparison table sorted by return — the "Confronto con Portafogli Modello" table on the Rendimenti page is now ordered by annualized TWR, highest first — with your own portfolio ranked in alongside the model portfolios — so you can see at a glance who's ahead

  • More precise AI Assistant and email answers — the AI Assistant and the AI comment in your summary emails now share a more detailed set of instructions: Italian financial terms specific to this app (YOC, TWR, bollo, PAC, inflation-linked BTP Italia coupons, cost centers…) are defined explicitly instead of left to guesswork, web search is used only for market/macro context and never to invent reasons for your personal income or expense changes, and answers distinguish clearly between what's stated in your data and what's a reasonable inference

🔒 Security

  • Price quote endpoints (Yahoo Finance and Borsa Italiana) now require authentication, preventing unauthorized use as open proxies
  • CRON_SECRET comparison is now timing-safe (constant-time SHA-256 hash prevents side-channel leaks on cron endpoints)
  • API route handlers now validate all user-controlled inputs server-side (ticker format, ISIN format, snapshot year/month range, dividend payload fields) with zod, returning 400 on malformed data before any service call is made; Borsa Italiana scrapers validate ISIN at the service layer and encode it in URLs to prevent parameter injection
  • Registration email whitelist is no longer exposed in the client JS bundle (SEC-5)
  • HTTP security headers added to all responses: clickjacking protection (X-Frame-Options: DENY), content type sniffing prevention, HSTS (2-year), strict referrer policy, minimal Permissions Policy, and a report-only Content Security Policy for Firebase Auth/Firestore (violations logged to browser console for future enforcement)
  • Docker base image updated from Node 20 (EOL) to Node 22 LTS
  • AI endpoints (assistant stream and performance analysis) are now rate-limited per user (30 req/h and 10 req/h respectively) to prevent runaway Anthropic API costs from looping clients or compromised accounts
  • Cron endpoints (monthly snapshot and daily dividend processing) now have route-level auth tests covering the 401/200 boundary; the Borsa Italiana scraper no longer emits full third-party URLs, raw HTML metadata, or page-content previews to the production log stream