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
Test Dota 2, MLBB, Delta Force, CS2 and League of Legends server regions from your own connection and get a clear recommendation.
GamesTypeScript · PLpgSQLGitHub @Daddyk5OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
AI-powered network monitoring and ping analytics platform built with Next.js for real-time connectivity insights and diagnostics.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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).Read the full 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.