Case study · Personal project · 2026

KilobyteLive

A browser game launcher. Press Play and it runs in this tab.

The shelf opens on Cinder Field, a first-person WebGL2 match. Behind it are HTML games, Kiln Rally (C++ compiled to WebAssembly), and tiny JSON carts. Publish by uploading a build, connecting a GitHub repo, or prompting a cart. This copy ships without a cloud account, so play stays in the browser.

Role
Designer & developer
Year
2026
Platform
Static web app
Core stack
React 19 · WebGL2 · WebAssembly

01Try it

Play it right here.

This is the real app, not a recording. Load it below or open it full-screen. Uploads and saves stay in your browser.

njoku.dev/kilobyteOpen in a new tab

Runs entirely in your browser · about 100 KB

02Tour

Five screens, one launcher.

njoku.dev/kilobyte · play
Kilobyte’s Play screen, led by Cinder Field, a first-person WebGL2 match running in the tab at 60 fps, tagged Versus bots and 16+, with Play this and Details buttons.
The shelf opens on Cinder Field, a WebGL2 match drawn in this tab. Versus bots works with no account.

03The idea

Launch it here. Store a pointer.

A full engine export is heavy. One WebGL build can weigh 40 MB, so a site that stored every upload would turn into a hosting bill fast.

Kilobyte plays that build in the tab and keeps the listing: title, genre, rating, and a pointer. Creator files stay on GitHub or on that person’s machine. A few small house games ship with the site, including the WebGL match and one WebAssembly demo. A free Supabase project can hold accounts and uploads later. This demo does not include those keys, so the bill stays at a static frontend.

  • 19games in the house library
  • 3ways to publish a game
  • 1C++ game compiled to WebAssembly
  • 0 Bof a GitHub game on the server

04Publishing

Three ways to get a game on the shelf.

  1. Path 1

    Connect a GitHub repo

    Paste owner/repo. Kilobyte reads the public GitHub API, finds the game’s index.html, and plays a Unity, Godot, or custom export through jsDelivr or GitHub Pages. It never receives a zip.

    Kilobyte storesA pointer to the repo

  2. Path 2

    Upload a build

    Drop in a zip, an index.html, or a folder, including a WebAssembly build. fflate unpacks it in the browser, the files go into IndexedDB, and a service worker serves them. A cloud copy is optional and stays off until a Supabase project is configured.

    Kilobyte storesNothing, on this demo. It stays on the device

  3. Path 3

    Prompt a JSON cart

    Describe a game in a line. A seeded generator writes a tiny recipe on the device, and a canvas engine runs it. The house carts are the small end of the shelf.

    Kilobyte storesThe cart itself, under 2 KB

05Under the hood

Small pieces, carefully joined.

Static by design

React 19 and TypeScript on Vite, with a hash router, so the whole app runs from any static host. That’s how it lives inside this site at /kilobyte/.

WebGL in the tab

Cinder Field is its own chunk and draws on a canvas in the page. Versus bots needs no account. A second player would use an optional lobby, and the page says so when that is not configured.

One C++ game, as WebAssembly

Kiln Rally is SDL2 compiled with Emscripten. The player opens index.html, index.js, and index.wasm in an iframe, and uploaded .wasm files are served as application/wasm.

Games in a URL

Share links gzip a cart with the browser’s CompressionStream and pack it into the hash (#/c/…). The link is the game, so nothing has to be saved anywhere.

This demo stays local

Cloud accounts, uploaded copies, and online lobbies need a free Supabase project. Those keys are not in this build, so play, saves, and uploads stay in the browser.

Checked on every push

GitHub Actions installs Emscripten, runs oxlint and Vitest, rebuilds the WebAssembly game, and builds the site. The job fails if a secret lands in the browser bundle.

  • React 19
  • TypeScript
  • Vite
  • WebGL2
  • WebAssembly
  • Emscripten
  • IndexedDB
  • Service Workers
  • GitHub Actions

06Run it yourself

Clone it, run it, remix it.

Kilobyte is open source. You need Node.js and about thirty seconds.

$ git clone https://github.com/michaelnjoku347/KiloByte.git
$ cd KiloByte
$ npm install
$ npm run dev
Play the Kilobyte demoOpens in a new tab
KilobyteCase study
OrbitScopePersonal project
njoku.devPersonal project
Python & Java practiceIndependent study
HomePage
All projectsPage
AboutSection
ExperienceSection
SkillsSection
ContactSection
EducationSection
RésuméPrintable
Send me a messageContact form
Switch light / dark themeAppearance
GitHub@michaelnjoku347
LinkedInProfile
View this site’s sourceGitHub