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,即可验证所有权并自行管理介绍。
一分钟完成验证基于 Next.js 构建的 AI 驱动网络监控与 ping 分析平台,提供实时连通性洞察和诊断。
AI 翻译
AI-powered network monitoring and ping analytics platform built with Next.js for real-time connectivity insights and diagnostics.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Find the fastest server for your game, tested from your own connection.
PingPilot AI helps gamers choose the best server region. Pick a game, and the app tests every one of its server regions from the player's own internet connection. It then recommends the best region and explains why. Every test is saved, so players can see how their connection behaves over days and weeks, not just in one snapshot.
Supported games: Dota 2 · Mobile Legends: Bang Bang · Delta Force · Counter-Strike 2 · League of Legends · plus any custom server. Valorant is listed as coming soon (see Known limitations).查看完整 README ↗Find the fastest server for your game, tested from your own connection.
PingPilot AI helps gamers choose the best server region. Pick a game, and the app tests every one of its server regions from the player's own internet connection. It then recommends the best region and explains why. Every test is saved, so players can see how their connection behaves over days and weeks, not just in one snapshot.
Supported games: Dota 2 · Mobile Legends: Bang Bang · Delta Force · Counter-Strike 2 · League of Legends · plus any custom server. Valorant is listed as coming soon (see Known limitations).
Live test: every region is tested in turn. Each finished region appears as a dot on the radar (closer to the centre means lower ping), and pings are colour-coded by quality.
Dashboard: key numbers, the main route over time, recent tests and personal suggestions.
Plain-language advice based on the player's own history, for example:
Every suggestion shows the numbers behind it. Suggestions are generated instantly by a built-in rules engine, with no third-party AI service, API keys or running costs.
Sign up with email and password or Continue with Google. Includes email confirmation, password reset, and clear error messages (wrong password, unconfirmed email, too many attempts).
Aggregate usage stats: users, active users, tests per day, and most-tested games. Only anonymous totals are shown, never individual users' data.
It measures the player's real connection. Tests run in the player's own browser, not on our servers. The numbers reflect their own home network, ISP and route.
It says exactly what it measures. Browsers can't send traditional "ping" packets or connect to game servers directly. So PingPilot times secure web requests to a cloud endpoint in the same city as each game's servers. That tracks in-game ping closely, and the app says so on screen rather than implying otherwise.
No made-up numbers. If a region can't be reached, it shows as Unreachable. The app never fills gaps with estimated or simulated values.
It only advises. PingPilot never changes DNS, firewall, router or system settings.
| Area | Summary |
|---|---|
| Login reliability | Fixed the root cause of random logouts and "session not found" errors. The browser was signing in to an old database while the server checked a new one. Added Google sign-in and password reset. |
| Game Ping Optimizer | New screen built on real, in-browser measurements that replace the old simulated results. Covers 5 games and 55 server regions. |
| Suggestions | Rules-based advice from each player's history. No API keys or paid services required. |
| New screens | Dashboard, History, Settings and Admin, all on real data. The old demo-data pages were removed. |
| Data privacy | Each player can only ever see their own data, enforced by the database itself (Row Level Security on every table). Previously, all users shared one history table. |
| Security | Every page and API checks the login on the server. Every input is validated. Security headers (CSP, clickjacking protection, HSTS) are set, and APIs are rate limited. |
| Reliability | Automated checks (lint, type-check, 94 tests, production build) run on every change via GitHub Actions. Includes structured server logs and optional Sentry error monitoring. |
| Documentation | This README plus guides for auth, the optimizer, suggestions and security. |
lib/games/catalog.ts).Next.js 16 (App Router, proxy.ts) · React 19 · TypeScript · Tailwind CSS 4 · Supabase (Auth + Postgres with RLS) via @supabase/ssr · Recharts · zod · Sentry · Vitest · GitHub Actions · Vercel
Next.js 16 differs from older versions (e.g.
middleware.ts→proxy.ts). Readnode_modules/next/dist/docs/before changing framework-level code. SeeAGENTS.md.
Requirements: Node.js 22+ (see .nvmrc) and a Supabase project.
npm ci
cp .env.example .env.local # then fill in the values below
npm run dev # http://localhost:3000
One-time setup:
supabase/migrations/, in filename order. Either use the CLI (supabase link --project-ref <ref> then supabase db push), or paste each file into the Supabase SQL editor. They're safe to re-run.update auth.users set raw_app_meta_data = raw_app_meta_data || '{"role":"admin"}' where email = '[email protected]';
| Variable | Required | Visible to browser | Purpose |
|---|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | yes | yes | Supabase project URL |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | yes | yes | Supabase publishable (anon-level) key |
NEXT_PUBLIC_SENTRY_DSN | no | yes | Browser error reporting |
SENTRY_DSN | no | no | Server error reporting |
SENTRY_AUTH_TOKEN, SENTRY_ORG, SENTRY_PROJECT | no | no (build only) | Source-map upload during next build |
NEXT_PUBLIC_* values are baked in at build time, so redeploy after changing them. No service-role key is used anywhere. All database access runs as the signed-in user, under Row Level Security.
Design preview (development only): with npm run dev running, open /dev/preview/dashboard, dashboard-empty, optimizer, history, settings or admin to see the signed-in screens with sample data (lib/dev/fixtures.ts), without an account. These routes return 404 in production builds.
| Command | |
|---|---|
npm run dev | Dev server |
npm run build / npm start | Production build / serve |
npm run lint | ESLint |
npm run typecheck | tsc --noEmit |
npm test · npm run test:watch · npm run test:coverage | Vitest |
Browser Next.js on Vercel Supabase
─────── ───────────────── ────────
optimizer probe ──HTTPS──▶ AWS regional /ping endpoints (timing only)
│ raw samples
▼
POST /api/ping-runs ─────────────────▶ proxy.ts (session refresh, 401/redirect)
route: auth → rate limit → zod → recompute stats ──▶ ping_runs / ping_results (RLS)
GET /api/suggestions ────────────────▶ route: auth → features from history → rules ─────▶ ping_runs (RLS)
Server components (dashboard, history, settings, admin) ── user's session ─────────────▶ tables (RLS) / admin_usage_stats()
Errors ── /monitoring tunnel ──▶ Sentry
| Path | Contents |
|---|---|
proxy.ts | Session refresh and route protection (runs before every request) |
app/ | Pages and route handlers (app/api/*, app/auth/*) |
components/ | UI: optimizer/, charts/, suggestions/, history/, settings/, admin/, auth/, games/, shared/, ui/ |
lib/supabase/ | Browser, server and proxy Supabase clients |
lib/auth.ts | requirePageUser, authenticateRoute, isAdmin |
lib/games/catalog.ts | Games, regions and probe endpoints (data only; edit here to add a game) |
lib/latency/ | Browser probe, pure stats (shared client/server), zod schemas, run service |
lib/suggestions/ | Feature extraction from history + the rules engine |
lib/rate-limit.ts, lib/logger.ts | Postgres-backed rate limits, structured JSON logs (+ Sentry) |
supabase/migrations/ | Schema, RLS policies, SQL functions |
tests/ | Vitest unit and route-handler tests |
Guides: AUTH · OPTIMIZER · SUGGESTIONS · SECURITY
.github/workflows/ci.yml) runs on every pull request and every push to main: lint → type-check → tests with coverage → production build. It needs no secrets.main to production. Set the env vars above in Vercel for both Production and Preview.main in GitHub and require the CI check to pass before merging.