About

A shelf of classics,rebuilt in a browser.

A small, curated shelf of console classics you can open and play in a browser tab.

Alongside it, a plain-language guide to the machines they ran on. No accounts, and nothing here is for sale.

Why it exists

Three reasons

To see how far AI could take it

Claude Code wrote this site. I decided what it should be.

The catalogue, the emulator, the design system, the performance work, even the documentation.

It started as a question — how much of a real product can be built this way? The answer kept coming back: most of it.

Because these games are hard to reach

Playing a classic usually means hunting down the hardware, a cartridge, and a television that still takes the cable.

That is a lot of friction for simple curiosity. A browser tab is a much shorter trip.

Because the places that have them are hard work

Most sites that already do this were built in another era — heavy with advertising, and laid out as though you already know your way around.

They assume you know what an emulator is, what a ROM is, and which console ran what. If you are not already a gamer, that is a wall rather than a door.

So this one follows what streaming and cloud gaming got right — browse, pick, play — and puts the vocabulary on a Learn page instead of assuming it.

Who it's for

Mostly the curious

For anyone who grew up with these machines and wants five minutes back in them.

For anyone who did not, and has been told their whole life that Chrono Trigger is worth playing.

And for anyone who finds the era interesting as history. If the letters NES and SNES mean nothing to you yet, Retro Gaming 101 starts from zero.

What it isn't

Being clear about this

Not a store

Nothing is sold. No accounts, no payments, no advertising.

Not official

No affiliation with, and no endorsement from, Nintendo, Sega, or any other publisher. Every name and logo belongs to its owner.

Not mine to own

No ownership is claimed over any game, character, trademark, or artwork here. All rights stay with the people who made them.

Not a finished product

A demonstration and a personal experiment, not a service with uptime promises. Things change, break, and get rebuilt.

How it works

All of it, in your tab

There is no server doing the work. The site is a set of static files.

The emulator runs inside your browser using WebAssembly — the same machine code the original consoles ran, interpreted locally.

Save states live in your own browser and are never uploaded. Clearing your browser data clears your progress with it.

The design

How it got its look

The brief was arcade without kitsch — the neon of the era, laid out with the calm of a modern streaming service. The reasoning, not the spec sheet:

Typography

Three typefaces, three jobs

Press Start 2P is the pixel face, used only for the wordmark so it stays a signature rather than a gimmick.

Barlow Condensed carries the display headings — condensed and heavy, filling a card the way arcade marquees do.

DM Sans handles body copy, because long descriptions need to be read, not admired.

Colour

Warm sand on cold night

There is no primary, secondary or tertiary here. Three colours, three jobs: surface, text, light.

Surface is Night — a near-black with a warm navy tint, so large dark areas never read as flat grey.

Text is Sand — a warm off-white that keeps the interface from feeling clinical.

Light is magenta and cyan: the glow behind the hero and the closing note, the horizon line, the floor grid. The logo is their one solid use, and no card is painted in either.

The stage

A synthwave floor behind the hero

The homepage hero sits on a perspective floor: a striped plane tilted in 3D, drifting slowly toward you.

It took three rebuilds. The version before this drew the grid as SVG lines, which could not animate — moving them dragged their perspective spacing along and emptied the horizon.

Letting the 3D projection derive the spacing fixed it.

Motion

Alive, but never something you wait on

Content rises as it enters view, rails stagger their cards, the ambient glow breathes. All of it respects the reduced-motion setting.

The lesson came the hard way: animating each card's contents separately meant roughly 1,100 animated elements on the homepage, and scrolling stuttered.

Collapsing each card to one animated element cut the blocking work by about 82%.

Performance

Measured, not guessed

Almost every decision here came from measurement rather than intuition.

Scroll stutter turned out to have nothing to do with images loading, the obvious suspect. Rails were quietly swallowing a quarter of the page scroll, because a horizontal scroll container silently becomes a vertical one too.

Both were found by measuring. Neither was visible in the code.

Colophon

Built with

Written by
Claude Code, directed by Enlin
Emulation
EmulatorJS, running entirely in your browser
Framework
Next.js, exported as a fully static site
Hosting
Firebase Hosting
Storage
Cloudflare R2, holding every game file and cover
Icons
Material Symbols, by Google
Typefaces
Press Start 2P, Barlow Condensed, DM Sans
Cover art
libretro-thumbnails, a community archive
Console photos
Wikimedia Commons, attributed on the Learn page

What’s next

The joystick is still plugged in.

This is not a finished piece. There is more coming, and more built the same way — by asking for it and seeing what comes back.

And the controller in the logo is not only branding.