IN PROGRESS

Citrus Runner: An endless runner and my entry into web3

How building a game for a hackathon pulled me into web3, tokenomics, and a community that paid me first.

Phaser React TypeScript Supabase Postgres SvelteKit

I didn’t set out to get into web3. I set out to build a game.

How It Started

Citrus Runner[1] is an endless runner I built in April 2025 for a hackathon on the OrangeWeb3 subnet — an Avalanche subnet community. The prize pool was $100k. I placed 4th in popular app use and 9th overall after judging.

I’m still proud of that placement. But what came after mattered just as much — OrangeWeb3 paid out my first web3 earnings. A small amount by any measure, but symbolically significant — it was the first time a blockchain community put real value in my hands for something I built. It felt right to name the game after the subnet.

The Stack

The initial build was Phaser for the game engine, React for the UI layer, TypeScript throughout, and Supabase for the backend. Phaser handles the heavy lifting of game logic — physics, sprites, collision, the loop. React sat on top managing menus, leaderboards, and anything outside the canvas.

It worked. But React as a UI wrapper around a Phaser game introduces friction that doesn’t map cleanly to how game state moves, and the DX and UX started to drag. I’m currently migrating the UI layer to SvelteKit. Svelte’s reactivity model is a much more natural fit for this kind of work, and the developer experience difference is noticeable.

The Web3 Layer

The game has a token: $FLUX[2].

The intent is for $FLUX to be the in-game currency which can be earned through play and spent on things inside the game. It’s currently live on the Avax chain and paired with the OrangeWeb3 subnet token. The community is active. Peak was around 3,000 weekly active users in June 2025, driven largely by the subnet community that’s been there from the start.

The tokenomics are unresolved. I’m being deliberate about that. I’d rather take the time to get the model right than ship something that breaks the game economy or misalign incentives. I’ve been building my mental models reading research from 1kx Network, whose writing on token design is some of the clearest thinking available on the subject.

What I’d Take Forward

Game dev is a different discipline. The feedback loop is tighter, the state management is messier, and the tolerance for latency is lower than anything I’d built before. Phaser taught me to think about frames, a mental shift that’s carried into how I design other things.

Web3 added another layer which made the game not just a product but an economy. Players are participants with skin in the game. That changes how you think about every design decision, from how rewards are structured to what actions should cost something.

Citrus Runner is still running. The community is still there. The tokenomics will come. One step at a time.

Footnotes

[1] Here’s the link to the game. Play Here

[2] This is the address of the $FLUX Token on SnowTrace. Here’s another on OrangeWeb3’s website.

[3] Read this article to learn how I built this game. Orange Vibe Jam: a post-mortem