Solo product · Live at cooldown.trade
A tool that reads a trader's own on-chain history back to them and names the moment they stopped trading a plan and started trading a feeling. I built all of it: the detection engine, the interface, the infrastructure, and every decision underneath.
Traders on perpetual-futures venues lose money in a recognizable shape. A position is stopped out, and within minutes a larger one opens in the same direction. Size climbs across a session that started small. Holding times collapse. Nobody thinks this is what they're doing while they're doing it, and by the time the session is over the account balance is the only record of it.
Every fill is public on-chain. The evidence was already there. Nothing was reading it back.
Autopsy
After the fact
Paste any wallet address. Cooldown pulls its complete fill history, reconstructs it into round trips, and streams back a report on what the trading actually looked like: which sessions ran hot, which patterns fired, and what the difference in outcome was. Free, no account, works on anyone's public address.
The Ward
As it happens
The same detection running live on your own trading, with a tilt reading that updates as fills arrive, and an intervention that reaches you on Telegram against a cooldown protocol you set in advance, while calm.
It gives no signals, holds no funds, and executes nothing. Every output describes what already happened.
Seven detectable patterns — revenge re-entry, size escalation, overtrading bursts, hold-time collapse, stop-chasing, marathon decay, and returning to the same instrument a session after being hurt by it. Each is scored per session against that trader's own trailing thirty-day baseline, not against a population average, because the same position size means different things for different accounts.
Patterns that lack the data to fire honestly report themselves dormant rather than reporting zero. A silent detector and a detector with nothing to say are different claims, and the interface makes them look different.
A detector that fires on everything is useless and feels insightful, which is a dangerous combination. So the thresholds were graded against three wallets before release: one with a publicly documented tilt episode, one negative control, and one disciplined trader who should almost never trip.
Six rounds of grading, each recorded in a ruling ledger in the repo. Then the parameters were frozen. Any change to them re-runs all three wallets and has to survive the same specific sessions. It's a slow way to work and it's the only reason I trust the output.
The whole product is a report about someone's worst trading days, so the register is clinical rather than punitive: dark, quiet, closer to a medical instrument than to a dashboard. Numbers get room. Nothing pulses or celebrates.
The scan streams — a full history can be tens of thousands of fills, and watching the reconstruction happen is more honest than a spinner that hides a thirty-second wait.
Next.js on Vercel, Postgres, Redis, a separate long-lived process for live monitoring because it can't be serverless. Migrations are manual and forward-only. Rate limiting fails closed. The engine is a separate package imported by both tiers so the money math exists in exactly one place.
The tilt tax reads realized PnL on tilt-flagged trades against the wallet's own baseline expectancy. It counts the wins too — tilt-entered trades sometimes pay, and the times they pay are what keep the pattern alive.

The payment rail. Cooldown was built to sell a subscription, and the payment processor declined the domain — their review categorized it as a crypto trading and signals product, which it isn't, but the category is the category. A second processor's acceptable-use policy ruled it out too.
What saved the project was sequencing: no checkout code had been written yet, on purpose, because payment integration was queued behind the approval it depended on. The rejection cost a sandbox catalog and nothing else.
The replacement was direct stablecoin payment, which works but can't do recurring billing — which is what pushed the product toward a native app and a store as the billing rail. That's the current direction.
The engineering I'm proudest of here isn't a feature. It's that the product refuses to display anything it can't stand behind: dormant detectors that say so, an empty state that admits monitoring hasn't started rather than claiming a nominal baseline, a scan that shows you the reconstruction instead of hiding it behind a spinner. Getting there meant deleting fabricated placeholder data from five separate surfaces, including my own.