Work Portfolio tracker

A stock and ETF tracker that is honest about its data

A web app for recording buys and sells of stocks and ETFs and seeing holdings valued from fresh market data, with a marketing site, an hourly market-data job and sign-in by magic link or Google.

Sector
Personal finance · Our product
Our part
Product design, Web app, Market-data pipeline, Marketing site, Infrastructure
Built with
TypeScript, React, TanStack Start, PostgreSQL (Neon), Better Auth, Apify, Finnhub, Railway, Cloudflare Pages
Service
MVP development →
Concept illustration · Fictional identity and sample interface, not the original product.

The starting point

The aim was a calm, honest tracker: record trades, see holdings at current prices, and never show a missing or stale number as if it were real — while keeping market-data costs close to zero.

What we were responsible for

We built the product end to end: the app, the market-data job, the marketing site and hosting.

What we built

  • Transactions as the source of truth

    Users record buys and sells; holdings are rebuilt from them on every write, and every read and write is scoped to the signed-in user.

  • Hourly market data on a budget

    An hourly job prices around a thousand tickers within a free price API's limits — held tickers first, continuing where the last run stopped — and pulls history and fund details from paid scrapers only for what people actually hold.

  • Honest about missing data

    Unknown, stale or unavailable data is shown as such, never as a zero, and a product promise is switched on only once the feature behind it is built and verified.

  • One design system for app and site

    The app and the marketing site share one set of design tokens and brand geometry.

Where it stands

Sign-in, transactions, holdings and the hourly market-data job are built and deployed: the marketing site on Cloudflare Pages, the app and the job on Railway.

Working on something similar?

Book a 30-minute call or send a brief. If the scope is clear, you get a written fixed quote within one or two business days.