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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A radar for GeoFS
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A modern, real-time flight radar for the GeoFS flight simulator. RadarThing tracks live traffic, records flight history, overlays weather and airport data, and gives pilots and controllers a cleaner operating picture than the original GeoFS radar.
Tampermonkey installs are persistent. Console installs use the same hosted loader, but they need to be run again after a full GeoFS page reload.
Core tracking is free. RadarThing PRO unlocks more aviation data and analytics.
| Free | PRO |
|---|---|
| Live aircraft tracking | Everything in Free |
| Search, filters, multi-select, and follow mode | Full NOTAM access with decoded text |
| Flight recording and replay | AIRMET and SIGMET overlays |
| Remote autopilot commands | Global airport charts and procedures |
| Basic flight stats | Full flight history and advanced analytics |
| Precipitation overlay | Radar Mode and chart-focused workflows |
| Live ATC indicators and audio | Shareable flight cards |
| Aircraft image uploads | Subscription management through Stripe |
Editable userscript source files live in:
userscript.jsseabus.jsuserscript-src/radarthing-runtime.jsuserscript-src/config.jsonscripts/build-userscript.mjsGenerated userscript files are built into public/userscript/ and radarthing.user.js. Do not hand-edit or commit those generated artifacts. Rebuild them from source instead:
pnpm run build:userscript
To test unpublished userscript changes in GeoFS, run pnpm run build:userscript:dev and install the generated radarthing.dev.user.js in Tampermonkey. This standalone build uses the current branch code and sends ACARS requests to http://localhost:3000; run pnpm dev for the local website and API. Disable the regular RadarThing userscript while testing to avoid loading both copies. The local app needs its Convex functions configured for ACARS publishing.
The public install flow is:
/userscript redirects Tampermonkey users to /userscript/radarthing.user.js./loader./userscript/latest.json.ACARS entries can be published from the GeoFS panel after saving an active flight, provided the GeoFS ID is linked to a RadarThing account. They appear on RadarThing as soon as the pilot publishes or removes them. A local word filter checks text before publication; edit src/lib/acars-moderation.ts to update its blocked words. Viewer reports and blocked submissions are reviewed by RT ID at /admin/acars-moderation.
Aircraft SVG icons in public/icons/aircraft/adsb-radar/ are by ADS-B Radar for macOS: https://adsb-radar.com, App Store listing.
App: Next.js 15, React 19, TypeScript, Tailwind CSS, shadcn-style UI components
Data: Convex for users, flight history, charts, aircraft images, virtual airlines, challenges, and moderation data
Realtime: SSE traffic stream served by the companion ../radar-sse service
Mapping: Leaflet with custom aircraft markers, weather overlays, chart overlays, and map layer presets
Auth and billing: Clerk, Stripe, UploadThing, Resend, and PostHog
Install dependencies:
pnpm install
If pnpm is not installed yet, enable it through Corepack first:
corepack enable
Run checks:
pnpm lint
pnpm typecheck
pnpm run check
Format code:
pnpm run format:write
Supporting services:
pnpm run cf # Cloudflare tunnel
pnpm run stripe # Stripe webhook listener
Convex development:
pnpm run convex:dev
After changing files in convex/, run Convex locally and deploy the Convex changes with the project deploy process.
Production Convex backups are exported by the Convex Backup GitHub Actions workflow and uploaded to UploadThing.
UploadThing free apps do not allow private files, so backups are encrypted locally before upload and stored as .zip.enc files. Treat BACKUP_ENCRYPTION_KEY like a production database password: keep it in a password manager. If this key is lost, existing encrypted backups cannot be restored.
Backup filenames are target-aware and human-readable, for example:
radarthing-prod-db-only-2026-05-07_08-00-00Z.zip.enc
radarthing-prod-db-and-files-2026-05-07_08-00-00Z.zip.enc
Required GitHub Actions repository secrets:
CONVEX_DEPLOY_KEY
UPLOADTHING_TOKEN
BACKUP_ENCRYPTION_KEY
Generate the encryption key with:
openssl rand -base64 48
Trigger a manual backup from GitHub:
The workflow runs daily at 08:00 UTC and prunes encrypted UploadThing backups older than 30 days.
Run the backup locally:
pnpm run backup:convex -- --label prod --retention-days 30
Sync production data into the default Convex dev deployment for local testing:
pnpm run sync:convex:prod-to-dev
The sync script exports a backup of the current dev deployment first, then
replaces the default dev deployment with production data via
convex import --replace-all. It refuses to run if CONVEX_DEPLOY_KEY is set.
Include Convex file storage:
pnpm run backup:convex -- --label prod --include-file-storage --retention-days 30
Decrypt a downloaded backup:
BACKUP_ENCRYPTION_KEY="<same key used for backups>" pnpm run backup:convex -- \
--decrypt ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zip.enc \
--output ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zip
Restore with Convex after decrypting, preferably into a non-production deployment first:
pnpm exec convex import ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zip
Environment variables are validated in src/env.js using T3 Env. Server-side variables include Clerk, Stripe, UploadThing, and Resend keys. Client-side variables must use the NEXT_PUBLIC_ prefix. Add new variables to .env.example when introducing them.
Found a bug or have a suggestion? Open an issue on GitHub or join the RadarThing Discord from the homepage.
Guide copy lives in content/guides/*.md as plain Markdown. Edit those files to update the public /guides/[slug] pages; JSX is not needed for article content. The server renders Markdown with react-markdown (raw HTML is not enabled).
To add a guide, create a Markdown file with one H1 title and add its slug, title, and description to src/lib/guides.ts. That registry drives navigation, static routes, metadata, and sitemap entries. Use root-relative links for site pages. Check instructions against the current UI and subscription limits before publishing.