Project
Utopia
A self-hosted personal finance platform with real-time market intelligence. Track every euro, monitor crypto and stocks live, and keep your data on your own server.
About the Project
Utopia grew out of frustration with fragmented personal finance tools: a spreadsheet for budgets, one app for investments, another for crypto – and none of them communicating with each other. The aim was to develop a single dashboard covering all of it (income, expenses, savings, live market prices, a portfolio view) on your own hardware, with no third-party service involved.
The entire stack ships as a single Go binary with PostgreSQL running directly on the server. Authentication is passwordless via WebAuthn passkeys. Market data streams directly from Binance at one-second intervals and Yahoo Finance for equities – cached server-side so every connected client gets instant responses.

Key Features
Interactive cash-flow charts, category spending breakdowns, and net-worth tracking across any date range. Built on ECharts for fluid, zoomable visualisations.
Set monthly spending limits per category. Actual-vs-budget bar charts highlight overspend instantly. An alert triggers when you approach or exceed the limit.
Crypto prices stream from Binance WebSocket at 1-second intervals across 500+ USDT pairs. Stocks and ETFs are polled from Yahoo Finance every 60 seconds.
Monitor asset allocations across crypto holdings and equity positions. Portfolio value is calculated continuously against live prices with historical performance charts.
Fully passwordless via WebAuthn. Your device biometric or PIN is your credential; nothing to breach, phish, or forget.
One Go binary, PostgreSQL on the server. Spins up in minutes on any VPS or home server. Your financial data never leaves your infrastructure.
Technology
Ships as a single statically-compiled binary. That one executable handles HTTP routing, database migrations, Binance WebSocket streams, Yahoo Finance polling, passkey ceremonies, and static file serving, with no interpreter or runtime required on the server. Cold starts sit under 10ms.
HTML templates that compile to typed Go functions rather than parsed strings. The practical upside is that structural errors and type mismatches are caught at build time, before anything reaches the browser. The UI is entirely server-rendered; the client receives plain HTML.
A tiny SSE-based reactivity library that enables live DOM updates without a JavaScript framework. Dashboard widgets refresh in real-time through server-sent events, client-side complexity stays minimal while the server retains full control.
All financial data is persisted in PostgreSQL with automatic schema migrations via golang-migrate. ACID transactions ensure integrity for every import and update. Indexed aggregation queries stay fast even across years of transaction history.
Passkeys are public-key credentials bound to the device; the private key never leaves it. The server stores only the public side, so there is nothing sensitive to protect on that end and nothing to reset or recover. Authentication follows the WebAuthn / FIDO2 standard throughout.
A persistent Binance WebSocket connection streams 1-second miniTicker events for every subscribed pair. Prices land in an in-memory store and are served to clients via a lightweight REST endpoint. The frontend aggregates raw prices into 10-second OHLC candles rendered with ECharts, including gap-fill from Binance Klines on page load.
Live Crypto Tracker
Powered by Binance WebSocket: 1-second price updates, full OHLC candlestick charting.
Prices in EUR · fetching live rate... · Source: Binance