RR Metrics

Context
I day trade, and I run an algorithm that trades as well, and both of them produce a log that somebody has to keep. The tools that keep it for you are subscriptions, and the ones people actually use are priced for professionals rather than for a student on a small account. TradeZella is the one everybody names. So the idea was the obvious one, and I want to be honest that it was the obvious one: build the same thing, charge much less for it, and see who turns up.
It started as a class assignment in November 2025. The scaffold we were given was a Node and Mongo app where you signed in and kept a list of cartoon monsters, each with a name and an age, and I took the monsters out of it and pointed the endpoints at trades instead. Over the eight months after that it turned into something considerably larger: OAuth and websocket connections to the brokers so the day's trades arrive on their own, analytics I wanted for myself rather than for a feature list, tagging, a pre-market checklist, several accounts side by side. There is a mobile version too, written in Dart and Flutter for a different class, reading the same Postgres database through row level security. I have lost access to the repository I submitted it from, so there are no pictures of it here.
I used it every day, for my own trades and for the algorithm's. What ended it was the bill. Hosting, the broker connections, the mail, the payment machinery, all of it adding up every month against ten or so users while school and freelance work were both growing. In July 2026 I stopped selling it, took the account system out, and put the whole thing on GitHub for anyone to run on their own machine.
Details
- Role
- Founder and Engineer
- Team
- Solo
- Timeline
- Nov 2025 — Jul 2026
- Built with
- TypeScript, React, Postgres, Cloudflare Workers
- Deliverables
- Web app, broker sync, landing site, Flutter client
- Status
- Open source, self-hosted
Final artifacts



Key design moments
Being cheaper is not a way of being known
The plan was the price. That was the whole of it: the same tool as the expensive ones for a fraction of what they charge. It took me most of a year to understand why that is not a plan. TradeZella is not expensive because nobody has thought to undercut it. It is expensive because it has years of trades behind its analytics, a feature set I could not match working alone, and enough of a name that a trader who decides they want a journal already knows where to go. I had none of those and no way of telling anyone I existed. A lower price is only an argument if it reaches somebody, and every one of the ten or so people who used RR Metrics got there through somebody I already knew. This is the sign in page, which is the first thing a stranger sees, and along the bottom of it are three cards reading 12K+ trades tracked, 99% user satisfaction and 100% secure. I wrote those before there was anybody to be satisfied. They were easy to write because every landing page says them, which is also why nobody reads them.

One app instead of five subscriptions
Trade Syncer mirrors orders from a leader account to follower accounts as they fill, over a websocket. It is in here because I did not want to pay for a copy trading service on top of everything else I was already paying for. The backtesting log is in here for the same reason, and so are the strategy rules and the pre-market checklist. Each of them replaced a subscription of mine or a tab of a spreadsheet. As a tool for one person that is the right answer, and it is why I still run my own build. As a product it is the wrong one: what a stranger downloads is an app that does eight jobs adequately and not one of them better than whatever they already open to do that job. The picture is the syncer with nothing in it, which is how it greets you. Two empty boxes, a leader and its followers, and a line underneath telling you to go and connect a broker somewhere else first. It asks you to understand how it was built before it will do anything for you. I would rather have made three of these properly than eight of them at all.

Automating the entry did not automate the journal
Syncing was the point of the whole thing. Connect a broker and the day arrives with entry, exit, size and duration already filled in, which cut the time it took me to get a session into the journal by about 60%. Then nearly everyone using it went back into each trade afterwards and typed anyway. Why they took it, what they had been watching, what they would do again. Which is obvious now: the typing was never what a journal is for, and what I had automated away was the cheap half of it. The Strategy page in this picture is where I started on the other half. Rules you write once and then tick off against each trade and each day, so the thinking has somewhere to go that is not a box of free text nobody rereads. It is empty in the screenshot, and empty is roughly as far as I got with it.

Impact
The 60% is measured against me entering my own trades by hand, and the users were people I could reach rather than people who found me, so take both as what they are. What the project is now is closer to the thing I wanted at the start than the business ever was. It runs on your own machine, keeps everything in one folder you can back up by copying it, costs nothing to operate, and sits under Apache 2.0 at github.com/Snoe0/rrmetrics. The last change I made before publishing was to delete the login. There is only ever one person on your own computer, so the accounts were machinery left over from selling it, and taking them out is the moment it stopped being a business.
Reflections
This is the first thing I ever built with Claude, and most of what I know about working with an agent came out of it. It also taught me where that stops, which is design. The app looks like what you get when you ask a model for a trading dashboard: near black, one acid green accent, rounded cards with a large number and a small grey label sat above it. It is competent and it belongs to nobody. I did not draw any of it and you can tell. Design was the part that deserved the most attention, because a journal is a thing you open every evening when you are tired and slightly annoyed, and the only version of that anybody keeps using is the one that asks almost nothing of them. Nearly every good decision I made here was a decision to take something out of the way.
It is public because the alternative was worse. Eight months of work behind a login on a product I had decided to stop running preserves nothing at all, and it felt disrespectful to the work to leave it there. I know how the repository reads. Anyone opening it can tell roughly what year it was made in and roughly how, and I would still rather that than have it sit private and unused. If a trader clones it tonight and never pays for a journal again, that is a better ending than the quiet one.