Why I started building this

I started with a small goal: make one race that players would want to try again.

I didn't want to begin with a big garage, lots of menus, or a long tutorial. I wanted the player to start driving immediately and already have someone to race.

That opponent is a ghost. The first ghost gives new players a time they can beat. After that, the game records their best run and turns it into their next opponent.

What you can do in the game

Ghostline: City Sprint is a short Android racing game with one car and one city route.

You race against a ghost while the game shows whether you are ahead or behind. When you finish, your fastest valid run is saved. On the next attempt, you race against that run.

You can retry immediately, recover if you leave the road, and compare your time on an online leaderboard.

It is still a small prototype. There is no campaign, car collection, traffic, police, or live multiplayer yet. For this build, I focused on making the main race fun and replayable.

How I put it together

I built the game with Unity 6. The leaderboard uses Cloudflare Workers and D1. I use Firebase only for crash reports.

I used Codex with GPT-5.6 throughout Build Week. I asked it to help me fix gameplay bugs, improve the Android build, write tests, inspect logs, and work through problems that behaved differently in the emulator than in Unity.

I didn't use every suggestion automatically. I tested the changes, checked the actual Android build, and went back when something didn't work.

I had already started the game before Build Week. During the event, I added the mobile controls, ghost-racing system, recovery, better checkpoint handling, updated car and city visuals, clearer race screens, Android verification, and more tests. I don't want to pretend the entire project was created during the event.

The problems that took the most time

The most annoying bug involved checkpoints. On a slow frame, the car could move completely through a checkpoint and the game would behave as if it had never crossed it. I changed how crossing was detected and added a test so the same bug would not return.

I also recorded the wrong build more than once because old Gradle files were still present. After that, I started checking the exact APK before installing and recording it.

The parts I'm happiest with

The game now has a complete loop: race, finish, compare, retry, and improve.

A first-time player always has a rival. Once they improve, their own best run becomes the next challenge.

The Android build, leaderboard, and tests are working. There are currently 84 passing Unity tests and 18 passing backend tests.

What building it taught me

I learned that a racing game does not need many cars or tracks to feel competitive. A clear opponent and a quick retry can do a lot.

I also learned that Codex works best for me when I give it one clear problem at a time and verify the result instead of assuming it is correct.

Where I want to take it next

Next, I want real people to play it on Android phones. Their feedback will tell me what needs work before I start adding more cars, routes, and features.

Built With

  • openai-codex
Share this project:

Updates