One waiter, six tables
Tray Rush started in a restaurant. I was waiting for my order and couldn't stop watching our waiter: the only one on the floor, running between six tables and the kitchen, and somehow remembering who had ordered what. Every table wanted something at once, and every trip was a small decision about what to carry and where to go first.
That decision is the whole game. Customers order, the kitchen cooks, and you choose which dish to pick up and which table to serve before someone's patience runs out. Everything else in Tray Rush, the coins, combos, VIP guests and busy spells, exists to make that choice harder in an interesting way.
A game that opens in a tab
I wanted anyone to be able to play from a link, on a phone or a laptop, without installing anything or making an account. So Tray Rush is a web page: JavaScript for the game, and three.js, a free 3D library, to draw it. There is no game engine and no plugin. The first visit downloads a few megabytes, most of it the three character models, and the game starts as soon as they arrive.
Rooms built from code
There are no 3D model files for the diner or the plane. Every table, chair, counter, plant, window and seat is built in code from simple shapes such as boxes, cylinders and rounded slabs, then coloured and placed. The diner sits inside a small city block with buildings all around it; the plane has 36 seats, overhead bins, window shades and a galley at the front.
Building in code has a big advantage on phones. Before the first frame, pieces that share a material are merged into one shape, so the graphics chip draws the whole diner in a few dozen batches instead of hundreds of separate objects. That keeps the frame rate steady on modest phones, which is where most people play.
The people
The waiter, the waitress, the cabin crew and every customer come from three free character models made by Quaternius. When the game loads, it reshapes them slightly, with bigger heads and hands, so they read clearly from the camera's height and feel friendlier. Outfits, hair and skin tones are painted in code, which is how three models become a full restaurant of different guests.
Customers do more than wait. They walk in and sit down, wave you over when you're close, get impatient as their bar drains, cheer when a dish arrives quickly and storm out when it never comes. On the plane, passengers sometimes get up for the lavatory, and a few wear headphones. None of it changes the rules, but it makes the room feel busy.
Sound made in the browser
Tray Rush ships without a single audio file. The kitchen bell, the footsteps of an angry customer, the coins, the combo chimes and both music loops are synthesised in the browser while you play, using the Web Audio interface every modern browser has. Each venue has its own music: an upbeat diner tune and a calmer one for the cabin.
Smooth on a phone
A browser game has to cope with every kind of device, so a lot of the work went into things players never see:
- Every visual effect is prepared before the shift starts, so the game doesn't stutter the first time a customer orders or a combo lights up.
- The game measures its own frame rate. On a struggling device it turns effects down step by step: edge smoothing, the soft glow, then shadows and resolution.
- It pauses when you switch to another tab or app, so no order runs out while you're away.
- If the browser takes the graphics away, which phones do when memory runs low, the game pauses and rebuilds the scene when they come back.
- The buttons and score stay clear of a phone's notch and rounded corners, and the layout follows the screen when you turn it.
Testing on eight screens
Before each release, an automated browser plays both venues on eight screen sizes, from a small 360-pixel phone to a 1080p desktop monitor. It orders, picks up, serves, misses an order, finishes a level and gets fired, checking the coins at each step, and it fails the release if anything shows an error or any text is too small to read. A separate run plays with real touch input on phone screens. The rules themselves, from tips and combos to timers and star ratings, are covered by unit tests, so a change to one never quietly breaks another.
The visual update
A day after launch, Tray Rush got its first visual update. Each venue now has its own light for day and night, with a colour grade on top: warm lamps in the diner, cool daylight through the cabin windows. The diner gained floor tiles, planters and a tiled wall behind the counter; the cabin gained window shades, bin latches and a new carpet; and every serve, pickup, VIP order and combo now has its own small effect. The rules didn't change at all. The update notes list everything in it.
The tools
Tray Rush is written in JavaScript and built with Vite. It was developed with Claude Code, an AI coding assistant. The game is hosted on Cloudflare and the portal around it is a small hand-built site.
New games and behind-the-scenes clips go up on Instagram first: @moeex.creates.