Back to index

Erkos Capital

Building a
personal finance
system

The design and build of a single-page dashboard and ledger tool for a private investment vehicle — from information architecture through to an iOS-first entry flow, verified against a live financial record.

RoleSolo Designer & Developer
Scope0 → 1, live product
StackCloudflare Pages, Sheets API
Outcomes3 recorded
00

The problem

A monthly financial process lived entirely in a spreadsheet — accurate, but slow to check and easy to enter wrong on a phone.

The brief (self-set) was a tool that could read the live position at a glance and write to it safely, without turning the spreadsheet into two sources of truth.

Dashboard, ledger and log entry — image slot Erkos Capital dashboard, ledger and log entry screens
01

Designing the interface contract

Before any UI work, the spreadsheet’s row layout had to be treated as an API. Two read paths and one write path all address it by position — so the write path was designed to refuse rather than guess when a row label doesn’t match what’s expected, while the read paths fall back and carry on.

A wrong figure on screen is recoverable; a wrong write into the financial record isn’t — the interface design follows from that asymmetry.

Read path, write path and the label guard — image slot Read path fails open, write path fails closed, and the label guard surfacing doubt on screen

Read path — fails open

When a label match fails, the dashboard falls back to the fixed row and flags it on screen. Rendering continues, and the doubt is shown rather than hidden.

Write path — fails closed

When a label match fails, the tool refuses and nothing is written. It would rather do nothing than guess at a row in the financial record.

02

Mobile-first entry flow

The core interaction — logging a transaction — is a bottom sheet, built and tuned specifically for one-handed iOS use.

Iteration included fixing an input auto-zoom bug (Safari zooms on any text input under 16px on focus), and testing a card-boxed vs. borderless treatment for the entry fields directly against the live layout before committing to one.

Carded vs. borderless entry fields — image slot The shipped carded entry sheet next to the explored borderless treatment, with the iOS zoom fix
03

Verify, don’t assume

Visual bugs were diagnosed against rendered output, not the CSS on paper — one Ledger styling bug traced to a specificity collision between a generic selector and a scoped one, confirmed by sampling pixel colour values from a headless-Chrome render rather than by eye.

The same discipline applies to every deploy: a cheap label-guard endpoint checks that every mapped row still resolves before a change ships.

Before and after the selector fix — image slot Ledger rows before and after the specificity fix, with sampled pixel colour values
04

The outcomes

3 recorded

The spreadsheet stayed the financial record. What changed is everything around it: how it is read, how it is written to, and what happens when the two disagree.

Outcome 01A single source of truth: the dashboard reads live, the tool writes safely, and nothing needs manual reconciling.
Outcome 02A mobile entry flow fast enough to log a transaction in under ten seconds.
Outcome 03Zero silent write errors since the label-guard was introduced.
What the system does now — image slot Outcomes summary alongside the investing activities panel and AUM growth chart

Result

A tool that made a monthly financial process faster to check and safer to update — without ever risking the record it depends on.

← Back to index Press G for grid