Procedural Three.js handhelds, each one modelled against reference photography rather than eyeballed. Every screen is live — a game renders into a canvas and that canvas is the panel texture. Two of them have a real emulator core behind the glass. No build step: each page is a single file you can open and run.

The AGB-001 with a real GBA core running on the panel. Ships with 2048 Advance and Pong — press Esc for the cartridge menu, or drop your own .gba on the page. Battery saves and save states persist per cartridge.

The DMG with a real Game Boy core behind it. Ships with Tobu Tobu Girl, Libbet and the Magic Floor, and the dmg-acid2 conformance test — or drop your own .gb on the page.

The clamshell one. Two halves on interleaved hinge knuckles that rotate on-axis, resting at 140° — press O or click the lid to fold it shut. Backlit AGS-101 panel, so no grey veil.

The landscape one, measured off reference photography — notched shoulder buttons, angled A/B, cart slot, volume wheel. A runner plays on the live colour panel.

The handheld rebuilt against reference photography — grey bezel, dished D-pad, ribbed shell, cartridge slot. Same live dot-matrix panel, far better proportions.

First pass, and the one that proved the idea: a game draws into an offscreen canvas, and that canvas is the screen texture.
.gb or .gba file onto either emulator page and it loads locally — the file never leaves your machine.