DOM, canvas or both
DOM and CSS for menus and text-heavy UI, canvas or WebGL for the playfield, and a clean boundary between them.
Web & custom engines · UI design & implementation
Browser games and custom engines, where the interface is often half the product. Designed and built end to end, from the first wireframe to the deployed build.
What we do in Web
Native frameworks, used as intended, so your engineers inherit something familiar.
DOM and CSS for menus and text-heavy UI, canvas or WebGL for the playfield, and a clean boundary between them.
Transforms and opacity driven by custom properties and the Web Animations API, so feedback stays smooth while the game works.
Keyboard, pointer, touch and Gamepad API, with real focus management and reduced-motion support.
Bundling, code-splitting, asset compression and hosting, so the game loads quickly from a plain URL.
In code
The same component in every runtime: a health bar whose ghost segment waits 450 ms, then drains over 600 ms. It is the bar running in the demo at the top of this page.
// The compositor does the motion. CSS that goes with it:
// .fill, .ghost { transform-origin: left; transform: scaleX(var(--hp)); }
// .is-damage .ghost { transition: transform .6s cubic-bezier(.2,.7,.2,1) .45s; }
export function setHealth(bar: HTMLElement, pct: number): void {
pct = Math.min(1, Math.max(0, pct));
const previous = Number(bar.style.getPropertyValue('--hp') || 1);
const damage = pct < previous;
bar.classList.toggle('is-damage', damage);
bar.style.setProperty('--hp', String(pct));
if (damage) {
bar.animate({ filter: ['brightness(1.8)', 'none'] }, { duration: 120 });
}
}A trimmed sample to show structure and approach. Compare all five runtimes →
Covered as standard
Real builds
Each tile says what it is: recorded gameplay, an editor capture, or a product screenshot.
Custom three.js engine · WebGL
An online medieval dynasty RPG running in a browser-based engine we wrote. World, rendering and interface are built in-house.
See the gameWeb · TypeScript · 3D globe
A mission hub with a live globe, guided tutorial, progression and debrief screens. Designed and implemented.
Open the case studyWeb game · React · TypeScript
Isometric strategy with a readable board, evidence panels and a rules editor.
Play and inspectWeb game · React · TypeScript
A dense investigation console made scannable: evidence, timeline and a decision to defend.
See the set of eightWeb game · React · TypeScript
A dispatcher desk: prioritise, assign, and see what each call cost.
See the set of eightWeb · WebGL authoring tool
Paint a grid, watch the 3D world regenerate beside it. Tool UX for game teams.
Read the case study
Product screenshot · available now Web app · game UI production tool
Our own tool for turning a reference into an editable interface, with component states and a UI kit export.
Try SliceForgeWeb game · React · TypeScript
Arcade flight with a HUD that has to be read at speed.
See the set of eightWeb game · React · TypeScript
An access graph you solve by reading it: nodes, paths and the one edge that matters.
See the set of eightWeb game · React · TypeScript
A SQL investigation where the query editor, results and case notes share one screen.
See the set of eightWeb game · React · TypeScript
An alert board under time pressure: sort, prioritise, and justify the order.
See the set of eightWeb game · React · TypeScript
A timed inbox with an inspector for sender, link and tone evidence.
See the set of eightOther runtimes
The design system and motion spec stay the same. Only the implementation changes.
Web & custom engines
Send a screenshot, a recording or a build, with your target platforms and dates. You will get a straight answer on fit and scope.