Skip to content

A financial dashboard that earns everyday trust

A financial dashboard that turns account activity, spending, and reporting into a clear, trustworthy view for everyday financial decisions.

Overview

All six accounts, derived from one ledger · posted and pending kept apart

Search vendors, amounts…⌘KExport Wed, 09/16/2026RORenée OkaforFinance lead

Net position

$527,939.61

Reconciled · −$45,354.29 pending, not included

Operating ··4410

$184,220.36

−$3,412.00 pending · 6 lines

Spent in September

$71,946.18

09/01 – 09/16 · 214 transactions

Owed on cards

$25,060.75

2 cards · next payment due 09/28

Net position · last 12 months Net position Monthly spending

10/2025 – 09/2026
OctNovDecJanFebMarAprMayJunJulAugSep

Needs your attention

Today
6 of 6 accounts tied outLedger matches every bank feed · 2:40 PM
Corporate card ··2261 is staleNo feed since 7:40 AM · shown on the account
41 transactions need a category1 suggested rule would sort 7 of them
12 pending lines · −$45,354.29Held apart until they post

Linked accounts

6 accounts · 2 banks · balances as of each feed
AccountTypePostedPendingLast feedStatus
Operating checking··4410Checking$184,220.36−$3,412.002:36 PMTied out
Payroll checking··4427Checking$62,480.00−$41,860.002:36 PMTied out
Tax reserve··8812Savings$96,300.00—2:36 PMTied out
High-yield reserve··8830Savings$210,000.00+$1,284.112:35 PMTied out
Business credit card··1009Credit−$18,742.55−$1,126.402:35 PMTied out
Corporate card··2261Credit−$6,318.20−$240.007:40 AMStale since 7:40 AM

The brief, in specifics

Industry
Professional Services
Duration
18 weeks
Cooperation model
Fixed price, phased
Services
Data integrationDashboard UXReporting
Integrations
HubSpotDocuSignXeroGoogle Workspace
Technologies
ReactTypeScriptTailwind CSSNode.jsPostgreSQLPlaid API
Team
1 Project lead1 Product designer1 Data engineer1 Analytics engineer1 Backend engineer1 QA engineer

Client name withheld under NDA. Engagement details are shown to the extent our agreement permits.

Introduction

The question we were asked

Users pieced together their finances across separate screens. We unified accounts, transactions, and reporting into one dependable view.

A business banking product whose customers held four or five accounts across two institutions and were exporting all of them into a spreadsheet to answer one question: what do I actually have? Support was carrying the cost, with a third of contacts coming from people asking what a balance meant. The engagement started from that ticket taxonomy, not from a design brief.

Fintech & Engineering

What it settled

The decision, first

  1. 01

    Single-source financial overview increased daily active platform engagement by +46%.

    Engagement rose because the dashboard became worth opening. The previous one answered a question users then had to verify, which is worse than not answering it.

  2. 02

    Reconciliation against one ledger built trust across high-volume accounts: two user-reported discrepancies in two quarters, both upstream.

    Trust came from the drill-down, not the summary. The number people believed was the one they could get behind in a click, and they only checked a few times.

  3. 03

    Automated expense categorization eliminated 90% of manual transaction tag adjustments.

    Categorization stuck because a user's own rule beats the model permanently. The previous system re-applied its own guess on every sync and undid their corrections.

What the numbers couldn't answer

01
  1. 01

    Account data, transaction history, and statements lived apart, forcing users to assemble their own financial picture by hand.

    The dashboard summed whatever each institution had last reported, flattening pending against posted, so the headline figure disagreed with every underlying account at least once a day. Users had learned not to trust it and were reconciling by hand, which is how a product intended to save time was costing it.

    We unified accounts, transactions, and reporting into one dashboard, with clear visual summaries and drill-down detail built for accuracy and everyday trust.

How we worked it through

  1. 01

    Integrated account and transaction feeds into one reconciled model

    The integration work was straightforward; agreeing what a balance means when pending and posted disagree took three sessions with the finance team.

  2. 02

    Designed summaries that stay honest under drill-down

    Pending and posted stay distinct at every level, because the merged figure was the thing users trusted least and the reason they were exporting.

  3. 03

    Hardened reconciliation so numbers always tie out

    Hardening meant reconciling six months of historical statements against the new ledger and explaining every difference before the old figures were retired.

  4. 04

    Rolled out with clear audit trails for every figure

    No figure shipped until review could trace it back to its entries.

Process

Phase by phase

  1. Phase 1: Financial Data & Feed Audit

    Multi-Bank Integration Analysis

    Audited multi-bank data feeds, reconciliation sync delays, and account balance calculation models across Plaid APIs.

    • Financial Data Schema
    • Plaid API Sync Spec
    • Data Reconciliation Audit
  2. Phase 2: High-Density UI Design

    Financial Dashboard & Component Library

    Designed an intuitive financial overview dashboard with real-time balance reconciliation and drill-down transaction categories.

    • Figma Design Specs
    • Dashboard Component System
    • Data Visualization Library
  3. Phase 3: Reconciliation Engine Engineering

    Audit Trail & Automated Categorizer

    Engineered backend reconciliation algorithms that tie out balances across linked banking accounts against a single ledger.

    • Audit Trail Engine
    • Transaction Categorizer API
    • Reconciliation Validator
  4. Phase 4: Launch & User Analytics

    Production Deployment & Retention Tracking

    Deployed to production, boosting 30-day active user engagement by +46%, with two user-reported balance discrepancies in the first two quarters, both traced upstream.

    • Production Release Sign-off
    • User Engagement Dashboard
    • Ops Audit Clearances
Quarterly report

Q2 2026 against Q1 2026 · all six accounts · posted entries only

Search vendors, amounts…⌘KQ2 2026 vs Q1 2026 Wed, 09/16/2026RORenée OkaforFinance lead

Income

$642,180

+9.1% vs $588,410

Spending

$518,760

+4.3% vs $497,230

Kept

$123,420

+35.4% vs $91,180

Income and spending by month

Income Spending
Jan
Feb
Mar
Apr
May
Jun
Q1 2026Q2 2026
Built from a tied-out ledgerQ2 closed 06/30 · 1,412 entries · 0 differencesExport

Spending by category

Click a row for its entries
CategoryQ2 2026Q1 2026ChangeShare of Q2
Payroll$248,300$241,900+2.6%47.9%
Materials & supplies$71,420$63,880+11.8%13.8%
Rent & facilities$54,000$54,0000.0%10.4%
Contractors$48,600$44,200+10.0%9.4%
Taxes & fees$26,110$25,320+3.1%5.0%
Software$22,180$20,940+5.9%4.3%
Shipping$19,840$17,610+12.7%3.8%
Travel & meals$14,260$12,480+14.3%2.7%
Other$14,050$16,900−16.9%2.7%
Total spending$518,760$497,230+4.3%Adds up to the total

Q2 composition

On screen

The quarter against the one before it: income, spending and what was kept, with the category table that adds up to the spending total.

What it changed

1

Screens to full picture

−36%

Support queries on data

≈0

Reconciliation errors

Screens to full picture is a count, not a measurement. Support queries about data specifically are the support team's own tagged volume, before and after. Reconciliation errors is the count of user-reported discrepancies over the first two quarters: approximately zero, not zero, because two were reported and both were upstream.

Client name withheld under NDA. Figures are approximate, drawn from the engagement’s own reporting.

01

Multi-Bank Account Reconciler

Consolidates checking, savings, and credit accounts into one unified live balance sheet.

Accounts connect through Plaid and reconcile against a single ledger, so the headline balance is derived, never summed from whatever each institution last reported. Pending and posted are kept as distinct states, because a merged figure was the thing users trusted least. A connection failure shows up as a stale-since timestamp on the specific account, so the total is never silently wrong.

What shipped
  • One derived ledger, never a sum of last-seen balances
  • Pending and posted kept distinct, never flattened
  • Stale connections named on the account, never hidden in the total
Reconcile

The ledger checked against every bank feed · last run 09/16/2026 2:40 PM

Search vendors, amounts…⌘KRun check Wed, 09/16/2026RORenée OkaforFinance lead

Accounts checked

6 of 6

Checking, savings and credit

Total difference

$0.00

Six differences of zero

Pending, held apart

−$45,354.29

12 lines · not in any balance

Ledger against bank feed

Posted balances only
AccountLedgerBank feedDifferencePendingResult
Operating checking ··4410Feed 2:36 PM$184,220.36$184,220.36$0.00−$3,412.00Matched
Payroll checking ··4427Feed 2:36 PM$62,480.00$62,480.00$0.00−$41,860.00Matched
Tax reserve ··8812Feed 2:36 PM$96,300.00$96,300.00$0.00—Matched
High-yield reserve ··8830Feed 2:35 PM$210,000.00$210,000.00$0.00+$1,284.11Matched
Business credit card ··1009Feed 2:35 PM−$18,742.55−$18,742.55$0.00−$1,126.40Matched
Corporate card ··2261Feed stale since 7:40 AM · checked at that point−$6,318.20−$6,318.20$0.00−$240.00Matched

How a balance is derived

Applies to every account
1EntriesEvery posted line from each feed lands in one ledger
2Derived balanceOpening + posted in − posted out, never a last-seen total
3PendingTracked as its own state until the bank posts it
4CheckLedger against feed; any difference blocks the summary

Selected figure

Drill-down

Operating checking ··4410

Chain of evidence · 09/16 2:40 PM

  1. Opening balance · 09/01$162,904.12

    Carried from the August statement

  2. Posted in · 118 entries+$214,330.80

    Deposits, transfers in, card refunds

  3. Posted out · 342 entries−$193,014.56

    Payments, transfers out, fees

  4. Ledger balance · posted$184,220.36
    Bank feed reports · 2:36 PM$184,220.36
Difference$0.00
Pending · 6 lines, held apart−$3,412.00
View 460 entriesAudit trail
On screen

Every account checked against its bank feed, six differences of zero, and the chain of evidence behind the operating account's matched balance.

Categorize

41 transactions waiting for a category · all six accounts

Search vendors, amounts…⌘KManage rules Wed, 09/16/2026RORenée OkaforFinance lead

Suggested rule: Northside Supply Co. → Materials & supplies

Proposed from 1 vendor match you confirmed on 09/02 · would sort 7 of the 41 waiting lines · your rule then wins on every sync

EditCreate rule · sort 7
Waiting41Needs review3Sorted today1267 selected · matching the suggested rule
DateVendorAmountProposed categoryDriven byConfidence
09/15Northside Supply Co.··1009−$1,240.00Materials & supplies Vendor match98%
09/15Northside Supply Co.··1009−$386.50Materials & supplies Vendor match98%
09/14Northside Supply Co.··4410−$2,918.75Materials & supplies Vendor match96%
09/14Lakeshore Print Works··2261−$212.40Marketing Vendor history · 6 prior91%
09/12Northside Supply Co.··1009−$74.19Materials & supplies Vendor match94%
09/12Tern & Tide Café··2261−$48.60Travel & meals Model · merchant type88%
09/11Northside Supply Co.··4410−$1,902.00Materials & supplies Vendor match91%
09/11Wire out · R. Vance··4410−$4,500.00Contractors Review · model unsure62%
09/10Northside Supply Co.··1009−$655.30Materials & supplies Vendor match97%
09/09Northside Supply Co.··4410−$1,118.00Materials & supplies Vendor match95%
09/09Granite Row Parking··2261−$36.00Travel & meals Model · merchant type84%

Showing 11 of 41 · low-confidence lines are never assigned without you

Who decides

In this order
1Your rulesAlways win. A correction sticks through every sync.
2Vendor historyPast categories for the same vendor.
3ModelOnly when nothing above applies. Unsure lines go to review.

Your rules

Lines sorted
Cloudway Hosting312
→ Software
Parkline Couriers208
→ Shipping
Meals under $75, weekdays187
→ Travel & meals
Brightfield Utilities48
→ Rent & facilities
Harbor Row Leasing36
→ Rent & facilities
Transfer to ··442724
→ Payroll
On screen

The categorizer proposing a rule from one vendor match across the 41 waiting lines, with confidence per line, a low-confidence line held for review, and the count each existing rule has sorted.

02

AI Expense Categorizer

Automatically tags and categorizes transactions based on vendor metadata and historical rules.

Categorization is rules first and model second: a user's own rule always wins, then historical vendor matches, then the classifier. Correct a transaction once and it stays corrected; the next sync won't override it. Low-confidence rows are surfaced for review instead of being assigned quietly, and every automatic decision shows what drove it.

What shipped
  • User rules beat history beats model, in that order
  • One correction sticks; the next sync won't undo it
  • Low-confidence rows surfaced for review, never quietly assigned
Statements

Generated from the ledger at a stated point in time · re-running a period returns the same numbers

Search vendors, amounts…⌘KDownload package Wed, 09/16/2026RORenée OkaforFinance lead
Checking ··4410Checking ··4427Savings ··8812Savings ··8830Card ··1009Card ··2261
PeriodOpeningInOutClosingFile
September 202609/01 – 09/16$162,904.12+$214,330.80−$193,014.56$184,220.36to datePeriod open
August 202608/01 – 08/31$158,377.90+$219,870.35−$215,344.13$162,904.12↑ carries forwardPDF
July 202607/01 – 07/31$150,618.44+$211,402.66−$203,643.20$158,377.90↑ carries forwardPDF
June 202606/01 – 06/30$141,220.08+$208,114.20−$198,715.84$150,618.44↑ carries forwardPDF

Audit trail

Operating checking ··4410 · append-only
Generated Q2 2026 statement package09/16 2:41 PM · Renée OkaforEXP-0388
Adjusting entry AJE-0112 · reclass $1,240.00 Meals → Client entertainment, 08/3109/14 10:12 AM · Renée OkaforAJE-0112
August statement closed · closing balance carried to 09/0109/01 6:00 AM · SystemSTM-2608

Amendments are recorded as adjusting entries. The original 08/31 entry is unchanged.

Export package

EXP-0388
Q2 2026 statementsFor your accountant · PDF + CSV
Period
04/01/2026 – 06/30/2026
Generated
09/16/2026 2:41 PM
Ledger as of
06/30/2026 11:59 PM
Account set
6 accounts
Adjusting entries
2 included
··4410··4427··8812··8830··1009··2261

Files in the package

Balance statements · 6 accountsPDF · 18 pages
Transaction ledger · Q2 2026CSV · 1,412 rows
Category summaryCSV · 9 categories
Adjusting entriesCSV · 2 rows
Every page is stamped with the period, the generation time and the account set, so the same request next year returns the same figures.
Download .zipShare link
03

Audit Trail & Statements

On screen

Statements whose closing balances carry forward month to month, an append-only audit trail with an adjusting entry, and the export package stamped with its period, generation time and account set.

Generates exportable audit reports and financial statements compliant with standard accounting practices.

Every figure on the dashboard is reproducible: statements are generated from the immutable transaction ledger at a stated point in time, so re-running last quarter's report next year returns the same numbers. Exports carry the period, the generation timestamp and the account set they were built from. Amendments are recorded as adjusting entries, and history is never edited.

What shipped
  • Statements generated from an immutable ledger at a fixed point
  • Exports stamped with period, timestamp and account set
  • Amendments as adjusting entries, never edits to history

How the engagement ran

A cross-functional team of 6 worked on a fixed price, phased basis over 18 weeks, covering Data integration, Dashboard UX, Reporting. We ran a standing mid-week checkpoint and written decisions in place of status meetings. Nothing shipped without a live demo first.

Every figure on the redesigned dashboard had to be traceable to the entries behind it before it shipped, enforced as a review rule, not left as a design goal. The phases were drawn around that: reconciliation first, then summaries, then the audit trail, so no summary ever shipped ahead of the mechanism that made it defensible.

Architecture

One pipeline behind every figure

Every figure Tallyfold shows is derived through the same five stages, so a balance can always be traced back to the bank feed event that produced it.

  1. Bank feed webhookEvery posted or pending change arrives the moment Plaid observes it
  2. Ingestion queueIdempotent and ordered: a replayed event lands exactly once, in sequence
  3. Reconciliation validatorChecked against rules, then vendor history, then the model, in that order
  4. Append-only ledgerNo update or delete: a correction posts as a new, linked entry
  5. Materialized viewsPre-computed, sub-second reads power the dashboard

Enterprise security & audit controls

Tokenized bank accessPlaid connections use short-lived, rotating read-only tokens; the app never stores account credentials.
Append-only ledgerNo row is ever updated or deleted; a correction is a new, linked compensating entry, so the trail is never rewritten.
Audit-ready snapshotsEvery statement period is a reproducible snapshot of the ledger at that point in time, so a report generated today matches one generated a year from now.

Engineering a financial dashboard, Plaid sync, or custom ledger? Scope your build in 3 minutes.

Scope your build
Have a project?

Let's talk

Running a large platform, shaping a first MVP, or getting a product ready for a funding round? Tell us where you are. We'll shape the process around it, and stay with you after launch.