StratTrax
Builtmy code, end to end
A third-party member app running inside a live options-trading platform's portal
The platform tells a member how one strategy backtests. StratTrax lets them blend strategies into a portfolio, journal what they actually traded, and see the two side by side. It runs as a sandboxed app inside the platform's member portal, and every byte of platform data arrives through the owner's SDK.
Role
Solo project · designed, built, and shipped by me
Timeline
September 2026 – present · in production
Stack
- React 19
- TypeScript 6 (strict)
- Vite 8
- Tailwind CSS 4
- TanStack Query 5
- React Router 7
- Recharts
- Node storage service + SQLite
- Railway
- Vitest + Testing Library
- GitHub Actions CI
The problem
Members of the platform run several alert strategies at once, but the platform's backtester evaluates one strategy at a time. Nobody could answer the question that matters to someone running a mix: what does my actual portfolio of strategies look like, and how does what I really traded compare with what the simulation said I should have made?
The platform owner opened a member-app program with an SDK and a strict integration contract. I designed StratTrax to live inside it.
What I built
A tracker is a portfolio of saved strategy profiles, each with its own allocation. Run it and you get the combined result: equity and drawdown curves, per-strategy contribution, P&L by day, week, and month, capital in use, exit reasons, and a full trade log that stays fast past 500 rows through virtualization.
The journal pulls the member's executed trades, lets them assign each one to a strategy and add notes and tags, then lines up realized results against the platform's simulation for the same window. Compare overlays up to four trackers or profiles on one chart, and the research and optimizer views run configurable studies side by side.
Member-authored settings save to a small Node storage service on Railway, keyed to the platform member ID, so a member can pick up where they left off on another device.
Inside the member portal



Building inside someone else's platform
The integration contract is not negotiable, so the code enforces it mechanically. The app renders in a sandboxed iframe and reads platform data only through the SDK. What may be stored on a member's device is tightly limited, so a lint-time persistence guard scans the source and fails the build if any code outside the approved storage modules touches localStorage, IndexedDB, cookies, or the Cache API.
Every member gets hourly quotas, including 120 backtests. StratTrax mirrors those quotas itself: nothing runs on load or on a keystroke, the Run button shows what a run will cost and what is left this hour, cached legs cost nothing, and a cooldown is shown as a cooldown instead of a failed request.
Living in an iframe has its own problems. I replaced the SDK's default auto-sizing with a measured height report and wrote scroll restoration that works across the cross-origin boundary, then covered both with regression tests.
Research and the optimizer


No number without its evidence
Every result sits under an honesty strip: alerts loaded, filtered, skipped, quality-excluded, and capped, per strategy and in total, with a red banner if the simulated account blew up. When the platform caps a trade list, the tiles fall back to the platform's own aggregates and are marked partial. A null is treated as unknown, never as zero.
Caveats on the page


By the numbers
300+
commits
in under four weeks, all mine
1,800+
automated tests
across 176 test files
54K+
lines of TypeScript
about half of it tests
9
CI checks on every push
types, lint, tests, SDK contract, bundle size
How I worked
Spec first. An approved design spec, four milestone plans, and dated release notes live in the repository next to the code. I build with AI coding agents, and the process is what keeps that honest: nothing ships unless typecheck, lint, the full test suite, the SDK contract tests, and the bundle-size check all pass.
StratTrax is in production inside the platform's member portal today.
Want to talk through how this was built?
I am happy to walk through the decisions, the parts that did not work, and what I would do differently. Email is the fastest way to reach me.