Orbital Ascent Ai Game

From a docked rocket to a global leaderboard. The whole story, the bugs, and the WordPress plugin that brought it home.

TL;DR

We built a full browser arcade game called Orbital Ascent, then wrapped it in a custom WordPress plugin so every player on our site competes on one shared global leaderboard. Land a rocket on floating platforms, blast asteroids, parachute when you run out of fuel, and climb as high as you can. Free to play, no downloads, works on mobile. Built and shipped using AI assistance, with all the messy iteration that involves.

What is Orbital Ascent

Orbital Ascent is a lunar lander style arcade game with a vertical climb twist. You start clamped to a launch pad. Above you, a blue platform drifts side to side. Lift off, steer through asteroids, set down soft and level, hold steady, and the next one appears higher up. Then the next. Then the next.

The further you climb, the meaner the world gets. Wind kicks in. More asteroids appear. The decks get narrower and drift faster. Your only score is how high you can go, and how many rocks you can shoot out of the sky on the way up.

It is, on purpose, the kind of game your hands remember. Quick to learn, hard to put down, and absolutely brutal when you get cocky.

Why this game

A few reasons.

First, we wanted something playable in one tab, one click, no install. The browser is still the best gaming console nobody respects. Second, we wanted to test how far we could push an entire game (physics, art, sound design choices, UI, mobile controls, leaderboard) using AI assistance and a single HTML file. Third, we wanted a real reason to spin up a games page on the site, something visitors could actually do for fun instead of just read.

Also, lunar landers are one of the oldest, most satisfying genres in gaming. You feel like you are flying that thing. There is nothing else quite like that drift of momentum as you fight gravity for a clean touchdown.

How it was built

Orbital Ascent ai games Preview

The same way the tip calculator was: conversationally, with AI, Claude-code specifically doing the heavy lifting on the code and us steering the design.

We did not write a design document. We did not plan a sprint. We started with a one sentence brief.

Make a simple browser game where you fly a rocket from a launch pad and land it on a floating platform.

That was version one. It worked, sort of. The rocket promptly crashed straight into the launch pad it was supposed to be sitting on, because we had not actually told it to rest there. We described what we saw, AI fixed it, we described what was still wrong, AI fixed that. Repeat for hours.

The game grew one player request at a time:

  • Add asteroids that drift across the screen and crash you if you touch them.
  • Make the asteroids damage the landing pad too.
  • Make every platform harder than the last. Climb forever.
  • Add wind that pushes you off course at altitude.
  • Give us a parachute we can pop when we run out of fuel, so we can glide back down to refuel.
  • Add a laser to shoot the asteroids before they hit anything.
  • Score asteroids by size. Small ones are worth more. Smart shooters get rewarded.
  • Put a force field around the rocket while it is parked, so we cannot be cheaply killed sitting on the pad.
  • Make it look old school. Add a name entry screen and a top ten leaderboard.

Each feature went in, broke two other things, we found the breakage, fixed it, and moved on. That is the actual rhythm of building software with AI. Fast forward, fix, fast forward, fix. The trick is knowing when something is genuinely wrong versus when you are just iterating.

The bugs that actually mattered

The fun ones, the ones any real player would notice in the first sixty seconds. We hit all of them.

The bugWhat was happeningThe fix
The bouncy rocketIt jittered against platforms instead of landing.Rewrote the collision so the side it hit is decided by where it came from, not where it overlaps.
The deadlock padThe rocket could land fine but never take off again.Gated the landing logic on velocity so any upward push releases instantly.
Motion sicknessThe camera and stars chased every tiny thrust pulse.Added a deadzone camera and a Reduce Motion toggle, on by default.
Unwinnable runsAt high altitudes, asteroids would destroy the next platform before you could reach it.Made the target indestructible at a minimum size and added slow self repair.
Hovering parachuteThe chute barely descended, you could not get back to the ground.Faster terminal speed and a real drop on deploy. Land on any platform and refuel.
Mobile disasterOn a phone the THRUST button was literally off the screen.Rebuilt the control bar to flex evenly and switched the game to a portrait playfield on phones.

The mobile rebuild was the most embarrassing one. We had told ourselves up front that this had to play great on a phone. The first version did not. The buttons fit on desktop because there was enough width. On a phone they spilled off the edge and the rocket itself was tiny because the canvas was a wide landscape shape forced into a narrow portrait screen. Two changes fixed it: a control bar that uses flexible widths so all five buttons share the screen, and a portrait shaped playfield on phones so the rocket and platforms render at a usable size.

Lesson there: mobile is not an afterthought. Build it in, and test it on an actual phone, not just a desktop window resized small.

Adding it to WordPress, the right way

Once the game was solid, the question became how to put it on the site without it feeling like a stuffed iframe.

The lazy way is to drop the HTML file on the server and embed it in a page. That works, but you end up with a leaderboard that only lives on each visitor’s own device. We wanted everyone competing on one shared board.

So we built a small custom WordPress plugin. The plugin does three things:

  1. Creates its own table in the WordPress database on activation, just for scores.
  2. Exposes a tiny REST API that the game uses to read the top scores and submit new ones.
  3. Provides a simple shortcode you drop on any page to embed the game.

The game itself lives inside the plugin and is served as an isolated iframe so its styling cannot leak into the rest of the page. When a player finishes a run, the browser posts the result to the REST endpoint, the database records it, and the leaderboard returns the new top ten. Every visitor sees the same global board, no third party service required.

We are not going to publish the plugin internals here, for the same reason you do not publish your house keys. The relevant pattern is the structure: a custom table, sanitised inputs, server side rate limiting, and a shortcode that keeps the game cleanly embeddable on any page. Standard WordPress plumbing, just glued to a canvas game instead of a contact form.

Caching matters too. We are behind a CDN and a page cache, so anything that talks to the database has to bypass cache, and anything that does not should be cached aggressively. The game file itself is static and flies through the cache. The score endpoint is dynamic and lives outside it.

Where it shines and where it does not

Honest pass.

Where it works:

  • Loads instantly. No spinner, no install.
  • Plays well on a laptop with the keyboard and on a phone with the touch pad.
  • Global leaderboard makes every run mean something.
  • The difficulty ramp is mean but fair. You can always do better next time.

Where it does not (yet):

  • Phones in portrait will always have less play area than a desktop. The game scales as well as it can, but small screens are small screens.
  • There is no sound yet. That is on the list.

Try Orbital Ascent Now

The game lives on our AI Games page. Pop in, hit LAUNCH, see how far up the tower you can get, and stick your name on the board. We are watching the leaderboard. We will not be the only ones playing.

If you do beat us, please be gentle in the comments.

Key Takeaways
  • AI is fast, not magic. Every feature shipped quickly. Every feature also broke something. Iteration is the job.
  • Build mobile first or pay later. Layouts that look fine on a laptop will embarrass you on a phone. Test on the real device.
  • A small custom plugin beats a SaaS leaderboard. A custom WordPress table plus a REST endpoint gives you a global scoreboard without depending on anyone else.
  • Embed games in iframes. CSS isolation matters. A game styling its own body will eat your theme alive.
  • Static files love CDNs. Self contained HTML5 games served as static files cache beautifully and load almost instantly.
  • Fun wins. Visitors play. Players come back. A games page is a destination, not a detour.

⊕ Read more AI inspired posts on our AI Blog

⊕ Check out the latest AI News