Local prototype

A game that never touches the network

A browser pet game with no backend and no network calls at all: it installs to the home screen, saves to the device, and works with the aeroplane mode on.

Local prototype

Runs locally — there is no public link to give you.

PipsKeep running in a browser: a small green creature called Quince sits in a meadow enclosure saying “A whole Keep to sniff! Where do we start? Everywhere. Good.”, with Feed, Clean, Play, Pet, Rest and Items controls beneath and a Keep level meter above them.
Running locally — there is no deployment to link to. Every screen here came from the game on this machine.

What it is

PipsKeep is about very small creatures with very large opinions. You feed them, clean up after them, send them on expeditions they take credit for, and turn a patch of meadow into a Keep.

It runs locally and is not published anywhere — there is no URL to give you. It is here because of how it is built rather than what it is.

How it is built

Time is injected, never read
Nothing in the game's core calls the clock. A single clock interface is passed in from the outside, and timestamps only enter as data. That one seam is why a real-time pet game has a fast, deterministic test suite: 'leave a creature alone for six hours' is a unit test rather than an overnight vigil.
Genuinely offline
A service worker precaches every built asset, cache-first, so after the first visit there are no runtime network requests at all. The browser then offers to install it like an app.
Saves that survive their own updates
State lives in IndexedDB behind a versioned schema with migrations, so a later build can read a save written by an earlier one instead of discarding it.
Strict layers
Pure logic knows nothing about rendering. Rendering reads state and never mutates it. The interface dispatches actions and never writes state directly. Boring, and the reason the logic is testable at all.

Our own software, not a client engagement. There are no business figures attached to it and none are claimed — the point of the link above is that you can check the work yourself.

Runtime network requests
None
Saves
IndexedDB, versioned with migrations
Rendering
PixiJS world, plain DOM interface

Built with

  • TypeScript
  • PixiJS
  • Vite
  • Vitest
  • IndexedDB
  • PWA