Case study · 2025
FinTrack Dashboard
Rebuilding a personal-finance cockpit for 300,000 people — from a four-second first paint to a dashboard that answers questions before you finish asking them.
- Role
- Lead Frontend Engineer
- Timeline
- Mar — Nov 2025
- Team
- 4 engineers, 2 designers
- Stack
- Next.js · TS · D3 · tRPC
- Live
- fintrack.uz
Good morning, Asadulloh
Here is where your money went in March
- Housing38%
- Food & drink26%
- Transport19%
- Other17%
01 / The problem
Four seconds is an eternity
FinTrack had grown by accretion. Six years of features had turned the overview page into a 2.4MB bundle that took 4.1 seconds to paint on the mid-range Android phones most of its users actually own.
Worse, the numbers people came for — balance, spend, what is due this week — appeared last, after three skeleton states and a layout shift that moved the button you were about to tap. Support tickets described it as "the app that lies to you".
The brief was blunt: make it fast, make it honest about what it knows, and do not ask 300,000 people to relearn where anything is.
02 / The approach
Three moves, no rewrite
A full rewrite was never on the table. Instead we moved the dashboard to the server, rebuilt the chart layer, and drew a hard performance budget that CI enforces on every pull request.
Server components render the shell and the four headline numbers on the edge, so the page is useful before a single kilobyte of chart code arrives. The D3 layer was replaced with a 9kb custom renderer that draws to canvas and only hydrates on interaction.
Every state the old app faked — loading, stale, partial — now has a real visual language. If a number is twelve minutes old, the interface says so instead of pretending.
- 01
Server-first shell
Edge-rendered overview with streamed chart islands.
- 02
9kb chart runtime
Canvas renderer replacing 180kb of D3 modules.
- 03
Honest states
Stale, partial and offline data labelled, never faked.
03 / Results
Eight months later
- Largest contentful paint
- 1.2s
- down from 4.1s
- JavaScript shipped
- −81%
- 2.4MB → 460kb
- Weekly active users
- +34%
- same marketing spend
- Lighthouse score
- 98
- mobile, throttled 3G
Asadulloh did the thing nobody wanted to do: he measured everything, then deleted most of it. The dashboard our users complained about for three years is now the feature they mention in reviews.