Full-Stack / FinTech / Game

Fintasy

Stock Royale, a Battle-Royale Trading Game · August 2025 – Present

Vue 3TypeScriptPythonFastAPIWebSocketsPostgreSQLAlpaca APITauri 2.0UnoCSSVitestPytest
Fintasy

01 // THE PROBLEM

Paper trading teaches the mechanics of a market but none of its pressure. Leaderboards update once a day, nobody can lose, and nothing forces a decision. Fintasy set out to make trading feel like a competitive match without putting a cent of real money on the line.

02 // THE SOLUTION

Fintasy started as a competitive paper trading platform and has grown into Stock Royale: a 60-trader battle royale where players drop into market sectors, fight 30-second leveraged trading duels, and outrun a collapsing storm until one trader is left solvent. An authoritative FastAPI match engine ticks at 10 Hz and streams state over WebSockets to a Vue 3 and TypeScript client, while Alpaca market data backs the paper trading side. Every balance is held in integer cents, so no match ever drifts by a penny.

03 // DEEP DIVE

Status

Personal project · August 2025 – Present. Started as a school project for a competitive paper trading app, then rebuilt and expanded into a full game. Active development continues.

What Fintasy is now

Two modes on one platform:

  • --Stock Royale. Up to 60 traders per match on a 12-sector concentric map (Utilities and Materials on the outer ring, Big Tech, AI Semiconductors, and High-Beta at the center). Players drop into a sector, contest it in 30-second micro-trading duels at 1x, 2x, or 5x leverage, and stay ahead of a storm that collapses the map over 5 rounds, with tick damage climbing from $50/s to $1,000/s in the final circle.
  • --Paper trading. Live and historical quotes from Alpaca Markets, portfolios, watchlists, real-time equity charts, and multi-user tournaments with custom starting pots and durations.

Engineering highlights

  • --Authoritative 10 Hz match loop. The FastAPI server owns all match state: lobby matchmaking, the market price simulator, the zone collapse scheduler, and duel resolution. Clients only render what the server streams, which keeps 60 players consistent and makes cheating by editing the client pointless.
  • --Integer-cent accounting. Every trader starts with $15,000.00 stored as 1,500,000 cents. All P&L, leverage, storm damage, and payouts are integer math, so balances are exact across thousands of ticks per match.
  • --Auto-liquidation engine. A 90% drawdown margin buffer liquidates leveraged positions before a balance can go negative, so the game can never create debt.
  • --Bot-filled lobbies. Four AI trader archetypes (Momentum, Mean Reversion, Breakout, Scalper) fill empty seats, so a match starts in seconds instead of waiting on a half-empty lobby.
  • --Ranked progression. Rocket League-style MMR tiers from Bronze up to Apex Grandmaster, paired with Apex Legends-style RP scoring for placement and eliminations.
  • --Web, PWA, and desktop. One Vue 3 + Vite codebase ships as a responsive web app with offline caching and as a native desktop build through Tauri 2.0, with a Steamworks bridge for achievements and Steam Deck gamepad input.

The marketing site

I designed and built a full landing page for the game: a hero with a live, simulated match radar, a four-beat "how a match plays" section with an animated vignette per beat (the drop, the duel, the storm, the lobby), an FAQ, and a closing call to action. It runs from the same components as the in-app landing route but builds to a self-contained static bundle, which is what is embedded on this site.

View the Fintasy landing page

How it was built

  • --Monorepo with pnpm workspaces: a Vue client package and a Python server package.
  • --Work was planned as small, verified missions. Each change shipped with tests that guard the behavior it added, from match-engine rules in Pytest to layout and copy retention checks in Vitest.
  • --Accessibility and motion were treated as requirements: every animation respects reduced-motion preferences, and the landing page holds its layout from phone width up.

What is next

  • --Hosting a public match server so Stock Royale can be played, not just read about.
  • --Seasonal ranked ladders and replays of finished matches.
  • --Steam release of the desktop build.