From zip to live app

Built by chatting with Codex.

A sim racing dashboard went from a downloaded zip to a live Cloudflare Pages app with D1 persistence, migrated data, a clean URL, and deploy history.

~27 minutes from repo setup to final revert deploy
5 Git commits created by the workflow
7 race records migrated from Railway
1 shareable Pages URL

The Back And Forth

The prompts stayed conversational. Codex handled repo setup, code migration, database creation, deploys, checks, and reversions along the way.

~21:25

"Export the latest zip from downloads to this folder"

Codex found the newest zip, initialized Git with `main` and `dev`, then extracted the project onto `dev`.

setup
21:27

Initial project commit

The empty project baseline was committed before application changes started.

a243ae1
~21:30

"How do we host it on Cloudflare?"

Codex inspected the app and found a Vite React frontend plus an Express API writing to a local CSV file. The path chosen was Cloudflare Pages + Functions + D1.

plan
21:37

"Okay go for it"

Codex replaced the Express/CSV backend with Pages Functions, created a D1 schema, wired `RACING_DB`, ran checks, smoke-tested the API, and deployed.

78eaa26
~21:40

"Migrate this"

Codex pulled the existing Railway `/api/races` data, inserted seven records into Cloudflare D1, and verified the live Pages API returned them.

data live
21:43

"Can we get a different name? simracing.pages.dev maybe?"

Codex created the `simracing` Pages project, updated the deployment config, committed the change, and deployed to the clean URL.

11692a5
21:49

"Can we fix this Harish +3 thing?"

Codex refined the streak badge, visually previewed it locally, committed it, and deployed the UI tweak.

cbfbcd8
21:52

"Revert this"

Codex reverted only the badge change, ran checks again, committed the revert, and redeployed the original behavior.

b07f45b

What Got Built

The final app is a single Cloudflare Pages project with the frontend and backend deployed together.

Vite React The dashboard UI builds to `dist` and is served by Cloudflare Pages.
Pages Functions `GET`, `POST`, and `DELETE` routes handle `/api/races` without a separate server.
Cloudflare D1 Race results persist in the `racing-simulator` D1 database through the `RACING_DB` binding.
Clean URL The finished app lives at `simracing.pages.dev`, with no custom domain needed.

I built and deployed this by chatting with Codex: import the zip, migrate the backend, create the database, deploy to Cloudflare, migrate data, rename the URL, test a UI tweak, and revert it.