❯ cat project.md
WarStonks
A desktop trading companion for Warframe — live market analysis, price alerts, arbitrage scanning, and portfolio tracking. All in one app.
// the problem
Warframe has a complex player-driven economy. Hundreds of tradeable items, fluctuating prices, arbitrage windows that open and close in minutes. The existing tools were either too basic, too fragmented, or required jumping between five browser tabs to get a complete picture.
I wanted one app. Something that lived on my desktop, pulled live data, and let me make informed decisions without the friction of piecing things together manually. Nothing existing did exactly that — so I built it.
// what it does
Search any item and get live price history, volume, buy/sell spread, and liquidity data pulled directly from warframe.market and warframestat.us.
Automated scanner that identifies arbitrage opportunities across the market — items where the spread between buy and sell orders creates a profitable window.
Track specific items with price targets. Get alerted when an item hits your buy or sell threshold so you don't have to monitor manually.
Input your current inventory and the app calculates which relics are worth farming based on current market value of their drops.
Local trade history stored in SQLite. Track performance over time — what you bought, what you sold, actual profit/loss per trade.
// technical decisions
Why Tauri instead of Electron?
Electron bundles an entire Chromium instance — it's heavy and slow to start. Tauri uses the OS's native webview and a Rust backend, which means a fraction of the binary size and noticeably faster startup. For a trading app where you want data fast, that matters.
Why Rust for the backend?
The scanner runs continuously, processing market data across hundreds of items. Rust handles that work without burning CPU or memory — and Tauri's backend is Rust natively, so it was the obvious fit. It also forced me to learn Rust properly, which was half the point.
Why SQLite for storage?
No server, no cloud dependency. Trade history, watchlists, and cached market data all live locally in a single file. Fast, portable, and the user owns their data.
// what I learned
This project was the first time I worked seriously with Rust. The borrow checker is unforgiving — but after fighting it long enough, you start writing code differently. More intentional. Less sloppy about ownership and lifetimes. That thinking has carried over into everything I've written since.
Building a real-time data app also forced me to think carefully about performance — when to cache, when to fetch fresh, how to keep the UI responsive while background processes are running. Problems that don't show up in tutorial projects.