Back to Work
Portfolio / Build Notes

CapitalOS

A real-time stock market tracker for monitoring positions, watchlists, and market movements. Built end-to-end as a personal project to explore real-time data pipelines, financial APIs, and a clean trader-focused UI.

Status Live
Type Personal project
Role Solo build
Hosting Railway

Built with boring tools
that do the job.

The brief was: fast, reliable, easy to ship, easy to iterate. The stack reflects that — modern enough to move quickly, conservative enough to not fight me at 11pm on a Sunday.

Frontend Next.js (React + TypeScript)
Styling Tailwind CSS
Backend Node.js API routes
Database PostgreSQL
Market Data Financial market API
Charts Charting library
Hosting Railway
CI/CD GitHub → Railway auto-deploy
Note from Max: The chips above are placeholders ready for the real stack. Drop into projects/capitalos.aspx and edit the .tech-chip blocks — the layout adjusts automatically.

How the pieces
fit together.

A walk through the moving parts — what talks to what, where the data lives, and where caching and rate-limiting sit so the third-party market API doesn't get hammered.

01

Frontend — Next.js app

Server-rendered pages for the dashboard, watchlists, and individual ticker views. Client-side state for live price updates and chart interaction. Routes are file-based so adding a new view is just adding a new file.

02

API layer — Node backend

Thin API layer sitting between the frontend and the market data provider. Handles authentication, request shaping, and a small cache so common ticker lookups don't hit the upstream every time.

03

Market data ingestion

Pulls quote data and historical bars from a financial market API. Rate-limited and cached so heavy use of the dashboard doesn't burn through the upstream quota.

04

Persistence — Postgres

User accounts, watchlists, saved positions, and historical snapshots. Schema kept deliberately small — just what's needed to make the app stateful between sessions.

05

Realtime updates

Live prices polled at a sensible interval (the upstream isn't a websocket source) and pushed to the UI. Charts redraw incrementally rather than from scratch to keep the page calm under load.

06

Deployment — Railway

One-click deploys on push to main. Postgres and the web service live in the same Railway project so the DB connection string is wired up via environment variables, no manual config.

Note from Max: Each numbered block above is a placeholder for one real architectural decision. Edit the headings and copy to describe the actual setup — add or remove items as needed.

Custom tools, dashboards,
and data-driven web apps.

CapitalOS is a personal build, but the same approach — full-stack TypeScript, a clean UI, and a deployment that doesn't fight you — works for client work too.