[{"data":1,"prerenderedAt":102},["ShallowReactive",2],{"portfolio-warptrader":3},{"id":4,"title":5,"banner":6,"body":7,"client":73,"description":74,"extension":75,"image":44,"keywords":76,"meta":83,"navigation":84,"path":85,"seo":86,"slug":87,"stem":88,"tags":89,"technologies":94,"thumbnail":44,"url":100,"__hash__":101},"projects/projects/warptrader.md","WarpTrader","space_pnkchk",{"type":8,"value":9,"toc":65},"minimark",[10,15,19,23,26,38,45,52,58,62],[11,12,14],"h3",{"id":13},"background","Background",[16,17,18],"p",{},"Long before I wrote code for a living, I was the kid tying up the family phone line dialing into local BBSes. The game that ate more of my evenings than any other was TradeWars 2002: buy low, sell high, plot your warps carefully, and spend the hours after your turns ran out scheming about tomorrow's. WarpTrader is my love letter to that game — a full multiplayer remake with faithful mechanics, playable in a browser instead of a terminal emulator.",[11,20,22],{"id":21},"development","Development",[16,24,25],{},"The fun of this project has been pairing a 1990s game design with a 2020s serverless stack. The front end is Nuxt 3 with TypeScript and Tailwind, deployed on Cloudflare Pages, with a hybrid UI that keeps the green-phosphor terminal flavor without the pain of actually using one. Everything else is Supabase: Postgres, auth, row-level security, realtime, and scheduled jobs — no dedicated game server anywhere.",[16,27,28,29,33,34,37],{},"The most interesting problem was cheating. In a multiplayer economy game, the client can never be trusted, so the whole design is server-authoritative: RLS gives players scoped read access only, no table has a client write policy, and every mutation — moving, docking, haggling with a port — goes through a vetted ",[30,31,32],"code",{},"SECURITY DEFINER"," RPC in Postgres. The daily tick that restocks ports and refills turns runs on ",[30,35,36],{},"pg_cron",". Your browser literally cannot write game state; it can only ask nicely.",[16,39,40],{},[41,42],"img",{"alt":43,"src":44},"The sector screen — tactical view, warp links, and a target lock on another trader","/img/projects/warptrader/sector-screen.png",[16,46,47,48,51],{},"A ",[30,49,50],{},"big_bang()"," generator builds each universe — a thousand sectors wired into a connected warp graph, seeded with trading ports. Every game-scoped table is keyed by game ID, so tournaments and parallel universes come for free. And because the original borrowed some legally questionable sci-fi names, every player-facing string and color lives in JSON theme files — the whole game can be rebranded without touching engine code.",[16,53,54],{},[41,55],{"alt":56,"src":57},"Exploring a sector with a gaseous planet — a fresh Genesis detonation, per the sector activity feed","/img/projects/warptrader/planet-sector.png",[11,59,61],{"id":60},"status","Status",[16,63,64],{},"WarpTrader is in active development. The core loop is playable today — movement with fog-of-war, port trading with multi-round haggling, scanning and ether probes, and the StarDock economy with shipyard trade-ins and a hardware emporium. Combat, planetary colonization, and corporations are next on the roadmap, and an early build is live at warptrader.io.",{"title":66,"searchDepth":67,"depth":67,"links":68},"",2,[69,71,72],{"id":13,"depth":70,"text":14},3,{"id":21,"depth":70,"text":22},{"id":60,"depth":70,"text":61},null,"A modern, multiplayer web remake of the classic 1990s BBS door game TradeWars 2002, built on a fully server-authoritative serverless stack.","md",[77,78,79,80,81,82],"use-case","front-end","back-end","game-development","serverless","typescript",{},true,"/projects/warptrader",{"title":5,"description":74},"warptrader","projects/warptrader",[90,91,92,93],"Game","Personal","Serverless","Supabase",[95,96,97,93,98,99],"Nuxt 3","TypeScript","Tailwind CSS","PostgreSQL","Cloudflare Pages","https://warptrader.io","cmBKRXhpxRvvVrCJkdxrnpGdxbHRC14777s88feBTVc",1782966433499]