How it works
A fish tank, watched by a model that runs in your browser, turned into a paper-trading feed. No servers do the seeing — only the deciding.
- 01
A camera watches a fish tank
An admin uploads a video of a fish tank, or points at a live stream URL. The video plays in your browser — nothing is uploaded to an inference server.
- 02
Your browser finds the fish
A small object-detection model (YOLOv8n, ~12MB, cached after first visit) runs inside a Web Worker via WebGPU or WebAssembly. Every detection above a confidence threshold is treated as a fish — there's no dedicated 'fish' class, so the label is ignored entirely.
- 03
Detections become tracks
A centroid + IoU tracker links detections across frames into persistent identities — Fish-01, Fish-02, and so on. A track survives up to 15 missed frames before it's retired.
- 04
The tank is a grid
The video is divided into a numbered grid, sized to its aspect ratio. As a fish's centroid moves between tiles, and as it crosses the centerline left-to-right or right-to-left, those movements become events.
- 05
Events become signals
Events are batched, signed with a session token, and sent to the server every few seconds. When a fish crosses the same direction enough times within a configurable window, that momentum triggers a signal — L2R is treated as BUY, R2L as SELL.
- 06
Signals open simulated trades
Each signal resolves a token from the tile it occurred in, and opens a paper position with a stop-loss and take-profit. Positions are marked against a simulated price feed and closed automatically when they hit either bound. No real funds move — this is Phase 1.