Gulfor

Duration
4 weeks
Date
September – October 2026
The gulfor.app homepage: Ash falls like snow, play for free in your browser
The gulfor.app homepage: Ash falls like snow, play for free in your browser
Gulfor key art: an Emberbearer, axe raised in ember light, facing frost-bound Malgrim across the captive Hearth
Gulfor key art: an Emberbearer, axe raised in ember light, facing frost-bound Malgrim across the captive Hearth
Melee in the Glade: seven heroes strike ghouls, skeletons and an abomination amid bursts of ember and frost
Melee in the Glade: seven heroes strike ghouls, skeletons and an abomination amid bursts of ember and frost
+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.

  • 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 /stats dashboard, 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.

Similar projects

The s3nd.sh homepage: send anything with a code, the sync code on a split-flap board
The s3nd.sh homepage on mobile
s3nd
s3nd
Duration
4 weeks
Date
August – September 2026
Homepage of onmangekoi
Homepage of onmangekoi on mobile
onmangekoi
onmangekoi
Duration
4 months
Date
April 2026
Homepage of tripbrain.fr with the live demo embedded in a phone mockup
The TripBrain roadbook on mobile
TripBrain
TripBrain
Duration
6 months
Date
March 2026
Logo

© All rights reserved by Abderrahmane Mouzoune