Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證✈️ One plane. Everyone's in it. Your bag is your seat. A browser flight simulator flown live by its token's market: market cap is altitude, the five-minute move is attitude, and the 178 seats go to the biggest holders, in order.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
One plane. Everyone's in it. Your bag is your seat. A flight simulator flown by one number: the aircraft's altitude and attitude are read live from its token's market, so the aeroplane on your screen is the chart — and its 178 seats go to the biggest holders, in order. Flight SA350 · Nonstop · rendered live in the browser — the same scene the cabin windows look out on Seat Airlines never asks your wallet to approve a transaction. Every signature it requests is a plain-text message, and Wallet safety prints each on [README 설치·사용 부분 발췌] Quick start Requires Node 22.檢視完整 README ↗
Market cap is altitude. Your bag is your seat.
A flight simulator flown by one number: the aircraft's altitude and attitude are read live from its token's market, so the aeroplane on your screen is the chart — and its 178 seats go to the biggest holders, in order.
Flight SA350 · Nonstop · rendered live in the browser — the same scene the cabin windows look out on
| Market cap is altitude | $163K flies at 163,000 ft. $1M breaks out above the clouds, $10M is space, $50M is the moon, $100M is Mars. |
| The five-minute move is attitude | A rising market pitches the nose up; a falling one pitches it down. |
| Your bag is your seat | The 178 biggest holders are seated by rank, flight deck first. Everyone else rides in the cargo hold. |
| Seats are finite | Out-hold the holder in front of you and you take their seat — and the PA tells the whole cabin. |
| Every seat is a billboard | A seated holder can put a square image on their seat, and it moves with them. |
| Your seat is which room you are in | In the cabin directory you see and reach your own section, and nobody else's. |
[!IMPORTANT] Seat Airlines never asks your wallet to approve a transaction. Every signature it requests is a plain-text message, and Wallet safety prints each one word for word.
One input drives everything the aircraft does — its token's market data — and nothing else.
| The market's… | …becomes |
|---|---|
| Market cap | Altitude, read straight off the number |
| Five-minute change | Pitch; its rate of change becomes bank |
| Holder count | Souls on board |
| Attitude | The overhead annunciators, and the PA announcements they trigger |
Market cap is altitude, so the milestones are places — five of them so far, each a different world outside the windows. → The five levels
In the weather · under $1M Low over rolling farmland among the cumulus: woods that stand up in three dimensions, villages and farms whose windows light up after dark, rivers and lakes, and a coast and open sea every few minutes, with ships under way. Your own sky, from your clock and your local weather.
Above the clouds · $1M On top of the deck: a sea of billowing cumulus to the horizon, gaps down to the country that open and close with the real weather, and a deeper blue overhead.
Space · $10M The sky drains to black and the horizon bends into a planet — oceans, coastlines and weather under a thin glowing band of atmosphere, with the stars out.
The moon · $50M Craters in real relief under a low sun, rays across the maria, a knife-sharp airless horizon — and Earth hanging off the port side.
Mars · $100M — the furthest out, so far Layered mesas, sand-filled craters and dune fields fading into a dusty butterscotch sky, under a smaller sun, with Phobos and Deimos off the port side.
The sky is the visitor's own: the sun is placed from their clock and time zone, and the weather is live from Open-Meteo — no location prompt, ever. → The sky outside
The site opens on the aeroplane full screen: press See who’s on board to go in — a few seconds in, the whole cabin rises in beside the plane, every seat and its advert, over a Claim your Seat button — or connect a Solana wallet and Fly — arrow keys or a drag to climb, dive and turn, low over the hills, with a brief to reach 10,000 ft. At 10,000 ft an engine blows; the ground, when it comes, sends you in. Inside, the page opens outside, on the whole aeroplane, flying over ground that goes past for real: farmland with rolling hills, woods, villages and farms that stand up in three dimensions, rivers and lakes, a coast every few minutes and a stretch of open sea with ships under way. It banks into gentle turns, ailerons and rudder working, and every window lit from outside is a row somebody has genuinely booked.
Straight under the aeroplane is Who’s on board: every held seat and the advert on it, cabin by cabin, for anybody, with nothing to connect. Connect a wallet to step inside to a seat, turn your head, walk the aircraft, climb into the flight deck or drop into the cargo hold.
178 seats across five cabins — flight deck, first, business, exit row, economy — filled strictly by rank. Your seat is your placement on the wall, the size of your tile, and which cabin's directory and room you belong to.
Check in with Phantom, Solflare, Backpack or Nightly and your boarding pass is issued on the spot.
→ The seat ladder · Cabins and seats
Every seat is a square, so every held seat is a billboard. Holders put a 1:1 image on the seat they hold; the whole aircraft reads as a mosaic, best placements at the front. Adverts belong to the wallet, so they follow their holder up and down the cabin.
A holder directory with the cabin's own manners: publish a card, read your own section's cards, introduce yourself, talk in your cabin's room — and from the flight deck, one PA announcement a day that the whole aircraft hears.
→ Your seat is which room you are in
The full guide lives on GitBook, synced from the docs/ folder of this repository.
Getting started
How it flies
The cabin
The wall
Section network
Safety & help
For developers
The page is a static single-page app on GitHub Pages. Anything that has to be shared between visitors — adverts, the directory, the holder list — lives in one Cloudflare Worker, which holds the RPC key so no browser ever has to.
flowchart LR
subgraph Browser["seat-airlines.space · GitHub Pages"]
UI["React 19 + Tailwind 4<br/>the page, the seat map, the directory"]
GL["three.js<br/>the aircraft, the cabin, the world"]
UI --- GL
end
JUP[("Jupiter<br/>market data")] -->|"market cap · 5m move · holders"| UI
OM[("Open-Meteo<br/>weather")] -->|"live sky"| UI
UI <-->|"adverts · directory · holder list"| W["Cloudflare Worker"]
W --- KV[("KV<br/>records")]
W --- R2[("R2<br/>artwork")]
W --- D1[("D1<br/>cards · messages")]
W -->|"holder scan, cached a minute"| RPC[("Solana RPC")]
The seat ladder itself lives in src/lib/seating.ts — no browser and no Cloudflare in it — and the page and the Worker import the same file, so they cannot disagree about who sits where. → How it is built · Engineering notes
Requires Node 22.
npm install
npm run dev # http://localhost:3000
npm test # the page's unit suites
npm run build # typecheck, then bundle to dist/
With no configuration at all, a build flies the committed token against the production Worker. To run the Worker locally too — Miniflare, with simulated KV, R2 and D1 — see Run it locally and the Worker's README.
├── src/
│ ├── App.tsx the landing, then the page: the view, its section panels
│ ├── components/ views, the seat map, the directory, the departure board
│ ├── three/ the 3D world: sky, terrain, the aeroplane, the cabin
│ ├── lib/ flight model, market feed, seating, wallet, directory client
│ └── content/cabin.ts the cabin's layout and copy
├── worker/ the Cloudflare Worker: adverts, directory, holders
├── docs/ the GitBook documentation (synced both ways)
├── test/ unit suites for the page
├── public/ icons, logo, audio, CNAME, the wallet-free mini-game
└── gitbook-docs.yaml the GitBook site contract
The wallet-free, standalone flight game is available at seat-airlines.space/minigame/. It is also safe to embed as a Radbro playable build: it uses relative assets, has no wallet or network dependencies, and answers Radbro's ready/result messages without pinning the parent origin. The same build therefore works under both radbro.fun and radbro.gg.
Every setting is optional, and every VITE_ value is public — Vite writes it into the bundle — so they are repository variables, never secrets.
| Variable | What it does |
|---|---|
VITE_TOKEN_MINT | The token the aircraft flies; overrides the committed address |
VITE_BANNERS_API | The Worker: the advert wall, and by default everything else |
VITE_HOLDERS_URL | An indexer for the holder list, if you have one |
VITE_DOCS_URL | Where the footer's Docs on GitBook link goes |
[!WARNING] Leave browser RPC configuration unset in production when a Worker is available. If a fallback is needed, use only an unkeyed
VITE_RPC_URL_PUBLIC; keyed RPC endpoints belong in the Worker secret.
The full list, and the Worker's bindings and secrets: Configuration.
| What | How |
|---|---|
| The page | Every push to main runs the tests, builds and publishes to GitHub Pages at seat-airlines.space. |
| The Worker | Pushes that touch worker/ type-check, test and deploy it — when the repository has a CLOUDFLARE_API_TOKEN secret. |
| The docs | GitBook Git Sync publishes docs/; a push that changes only the docs does not redeploy the site. |
| A new token | npm run token:update -- <new CA>: checks on-chain that it is a token mint and shows its name, asks you to type yes, writes it everywhere it is printed (page, Worker, index.html, docs), runs the tests and a build, pushes to main, and waits for both deploys to go live. --no-push stops before committing. |
Step by step, including DNS for the custom domain: Deploying.
MIT © 2026 Matt Mobley