We built a retail investor dashboard serving live fund performance from a paper trading account, with compliance banners enforced as server-side dependencies and JavaScript bundle under 120KB.
7
Pages built and deployed
<5ms
API proxy latency (Redis, current NAV)
<120KB
JavaScript bundle size
100%
Compliance banner coverage
CHAPTER 01
Most algorithmic fund presentations fall into one of two failure modes. The first is the spreadsheet export: a static table of trades emailed weekly, no visual context, no narrative. The second is the over-engineered Bloomberg terminal clone: 40 metrics on a dark screen, none of them explained in language a retail investor understands.
Invest AI needed a third path. The product targeted retail investors in the $100 to $10,000 allocation range who wanted exposure to an AI-driven trading strategy without understanding the underlying mechanics. The dashboard had to serve real data from the live system, not mocked data, because any investor who discovered the numbers were illustrative would immediately disengage.
A secondary constraint was compliance. The platform served performance data from a paper trading account. Every performance display needed a disclosure banner. The legal requirement was that no performance chart could appear without an accompanying statement that past results on simulated capital did not guarantee future returns on investor capital.
CHAPTER 02
The /api/fund-stats Next.js proxy route acted as the isolation layer between the dashboard and the Apex Redis/ClickHouse backend. The proxy accepted query parameters for time window and returned a normalized JSON response with nav, pnl_absolute, pnl_percent, win_rate, trade_count, strategy_allocations, and recent_trades.
Auth used Supabase Postgres for investor records and access control. The /invest page wrote to a Supabase investors table. Manual approval flow during the paper phase: the operator reviewed requests and granted access by setting approved=true in the investors table.
The design decision to defer investor-level allocation tracking was deliberate. Building per-investor sub-account ledgering during the paper phase would have created infrastructure that operated on hypothetical allocations. Building it at the point of real capital inflows, when actual dollar amounts existed, was lower risk.
ARCHITECTURE OVERVIEW
PRESENTATION
Next.js 15
API LAYER
React 19
auth + rate limit + versioning
SERVICES
Tailwind 4
DATABASE
Supabase (Postgres)
QUEUE
Vercel
CHAPTER 03
The /trades page auto-refreshed every 30 seconds by polling /api/fund-stats with a scope=recent_trades query parameter. Each trade appeared as a card showing symbol, direction, entry price, current P&L, strategy source label, and an emoji indicator for human-readable signal strength. The emoji indicator was not decorative. It was the primary affordance for non-quant investors to understand what strategy quality meant.
The /strategies page showed six strategy cards, each with a plain-English description. dark_matter_rs became Multi-timeframe momentum with confidence scoring. cross_asset became Finds when stock moves predict crypto moves and vice versa. The translation preserved the underlying mechanism while making the description accessible to an investor who had never seen a signal pipeline.
The /performance page used compliance banners rendered server-side before chart data. If the banner query failed, the page returned a 500 rather than silently rendering charts without compliance context. This made compliance a hard dependency of the performance view, not an optional UI element.
TECH STACK
CHAPTER 04
7 pages built and deployed. API proxy latency: 50ms to 200ms for historical queries, sub-5ms for current NAV as a Redis read. Auto-refresh on /trades: 30-second interval, 2 requests per minute per investor. JavaScript bundle size: under 120KB with no chart library, all CSS-rendered data visualization. Compliance banners: 100% coverage on all performance display pages.
7
Pages built and deployed
<5ms
API proxy latency (Redis, current NAV)
<120KB
JavaScript bundle size
100%
Compliance banner coverage
CHAPTER 05
DECISION · 01
Proxy your own backend, even when it is redundant. The /api/fund-stats proxy added a layer between the dashboard and the Apex Redis/ClickHouse backend. When Apex changed its Redis key schema (which happened three times during the April bug sprint), only the proxy function needed updating. The dashboard pages were unchanged.
DECISION · 02
Consumer-facing dashboards need a different data model than operator dashboards. The Apex operator dashboard showed 40 metrics. The investor needed three numbers: is my money growing, is the system actively trading, and how have each strategy performed.
DECISION · 03
Compliance is architecture, not a feature. Making compliance banners non-dismissable and positioning them above performance charts was enforced at the database-and-API level, not as an optional UI element.
START A PROJECT
We build fast. Most projects ship in under two weeks. Start with a free 30-minute discovery call.
Start a ProjectWe launched a multi-tenant market intelligence SaaS serving computed signals from 425M rows, with all API routes under 500ms cold and unit economics positive from customer one.
425M+ ClickHouse rows at launch
Read case study →
PlatformsWe debugged 65 compounding bugs across seven subsystems of a live trading engine, fixed a score overflow that silently blocked all dark_matter_rs signals, and cut Redis memory from 11.8GB to 7.15GB.
65 Bugs fixed in one session
Read case study →
PlatformsWe built a 90-inbox Google Workspace cold email system using Maildoso + Smartlead warmup, capable of 3,600 sends per day at 92 to 95% inbox placement for $369/month.
90 GWS inboxes
Read case study →