Gulfor
- Duration
- 4 weeks
- Date
- September – October 2026
- Play
- gulfor.app
- Website
- www.gulfor.app



+14
Preface
Gulfor is a 3D co-op hack & slash that runs in the browser: open a link, pick a hero, and you are fighting. Up to eight players share a party through a simple invite link, with nothing to install and no account to create. It works with a keyboard and mouse on a computer and with touch controls on a phone.
The story takes place in the valley of Valcendre, where ash falls like snow. An expedition is three acts of five waves against the undead, each closed by a boss: Gorrhak the Greater Abomination in the Glade, the Grave Warden in the frozen graveyard of Givrecombe, and Malgrim, the Eternal Winter, on his throne in the Citadel. Beat him and the endless mode opens.
The signature mechanic is the class swap: seven classes, and you can change at any moment mid-fight while keeping your level. Rare blessings between acts reward the players who do it well.
The project went from its first commit to version 1.2 in about three weeks, through close to 190 pull requests.
Useful links
- gulfor.app, the game, free in the browser
- www.gulfor.app, the official site: heroes, world, guide, news and press kit, in English and French
Stacks involved
- TypeScript, Three.js and Vite for the game, WebAudio for the sound
- WebRTC through PeerJS for co-op, with matchmaking hosted on a Durable Object
- Cloudflare Workers, D1 and KV for the API, Workers Static Assets for the game files
- Astro for the official site, deployed on Vercel
- PostHog for error tracking and source maps, an in-house telemetry dashboard
- Bun workspaces, Turborepo, Vitest, Playwright, ESLint, Stylelint
- GitHub Actions and release-please
Details
Everything lives in a single monorepo, the studio: one install, one CI, and shared data rather than copied data.
apps/game the game (Three.js, Vite), served on gulfor.app
apps/api the Cloudflare Worker: game files and /api/*
apps/site the official site (Astro, static), built from the game's data
apps/studio the video studio: trailers filmed frame by frame in the real game
apps/atelier the 3D workshop: the game's own hero models
packages/media key art and captures rendered by the engine
The game exports only pure modules, so the Worker and the site read the same code as the client. The Worker imports the game's schemas for telemetry, leaderboard and saves. The site reads its dictionaries, classes and skills, acts, bestiary, codex and patch notes: a class or an act added to the game shows up on the site at the next build.
Co-op is peer to peer, with no game server. The host simulates the monsters and each player simulates their own hero, so movement and hits stay instant. The host broadcasts compact binary snapshots 15 times a second, quantised and delta-encoded per player, under 1,100 bytes per message over an unreliable WebRTC channel: less than 600 kbit/s upstream for the host with eight players. The host does not take hits on trust either: each skill declares its caps, and a hit beyond them is refused and counted.
Role
Solo project: game design, gameplay, rendering, networking, the API, the official site, the art direction and brand, the trailers and the release pipeline.
What I built
The game
- Seven classes with their own skills, swappable mid-fight, and a level that follows the player
- An expedition of three acts and three bosses, a written ending, then an endless mode
- Four difficulties, from Story to Nightmare, and the Winter Pact: eleven conditions that make a run harder and pay more
- Daily expedition, weekly challenge, leaderboard, 31 achievements, a codex and an altar to spend embers
- Saved chapters: a solo run can be closed after any act and picked up from the camp
- A mobile lobby designed for touch, with twelve tap targets at most, in landscape and portrait
Art direction
- "Ember & Frost": what lives is warm (ember, copper, bronze), what is dead is cold (frost, bluish bone), written down in a brand guide
- Textures, icons, effects and sound generated by code; characters and props from free CC0 packs adapted to the palette
- Rendering labs (
?lab=grade,?lab=location,?lab=char) to tune tone mapping, light and materials without starting a game - An in-house 3D workshop that rebuilds the heroes from generated reference sheets and exports them to the game
Studio tools
- A video studio that films the trailer, the presentation and short formats (16:9, 9:16, 1:1, 4:5) frame by frame inside the real game, then dresses and scores them
- A media library of key art and captures rendered by the engine, described by a tested manifest and picked by subject
- A build for web game portals, with their SDKs loaded on demand and saves synced across devices with a code
Platform
- A Cloudflare Worker that serves the game and its API: telemetry with a
/statsdashboard, leaderboard, TURN credentials, player feedback and a public roadmap - Player feedback straight from the game into GitHub issues, without the player needing an account
- A preview on every push to
main, production on every release, a smoke test after each deploy and patch notes for players written in the PR
Technical achievements
Eight players, no game server
The whole multiplayer runs between browsers. Matchmaking goes through the game's own Worker, with a fallback to PeerJS's public service, and a two-tab end-to-end test plays a real wave on every PR that touches the network.
One studio, one source of truth
The game, its API, its site, its trailers and its images share the same data. A balance change, a new class or a new act reaches every surface without being written twice.
In short
Gulfor is a co-op hack & slash you can play right now in a browser, with friends, on a computer or a phone. Try it at gulfor.app.






