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,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Public website for the Mana Games Online Tour: tournaments, draws, results, weekly
rankings with full history, player profiles and head-to-head records.
The data and the rules belong to the Mana Games forum; we only read them and present
them. The forum itself is off-limits.
The full project specification is in CLAUDE.md. Non-obvious design
decisions are recorded in docs/decisiones.md. The real structure
of the pages we scrape is documented in docs/estructura.md.查看完整 README ↗Public website for the Mana Games Online Tour: tournaments, draws, results, weekly rankings with full history, player profiles and head-to-head records.
The data and the rules belong to the Mana Games forum; we only read them and present them. The forum itself is off-limits.
The full project specification is in CLAUDE.md. Non-obvious design decisions are recorded in docs/decisiones.md. The real structure of the pages we scrape is documented in docs/estructura.md.
Next.js 16 (App Router) · TypeScript · Tailwind 4 · Drizzle ORM on Postgres (Neon) · Zod · Vitest · Playwright for scraping · ECharts for charts.
You need Node 20.9 or newer.
git clone https://github.com/franzaragoza1/TennisElbowHubUltimate.git
cd TennisElbowHubUltimate
npm install
Everyone uses their own Neon project, free of charge. We do not share a database in development: that way you can break whatever you want without affecting anyone else.
A local Postgres in Docker will not work: db/client.ts uses the
@neondatabase/serverlessdriver, which speaks Neon's HTTP protocol, not the regular Postgres wire protocol.
cp .env.example .env
Fill in DATABASE_URL with your Neon connection string. Admin access
(ADMIN_DISCORD_USER_IDS) needs your real Discord user id and a working
AUTH_DISCORD_ID/AUTH_DISCORD_SECRET pair — see the comments in .env.example.
GROQ_API_KEY can be left empty (it only affects the generated head-to-head copy).
The file must be named exactly .env — the scripts load it with --env-file=.env.
npm run db:migrate
Your database starts empty. Do not fill it by scraping (see below). Ask for the
data/raw/ zip (about 23 MB), unzip it at the project root and run:
npm run load
That parses the archived HTML and loads it into your database. It takes a while and
leaves a trace in the import_runs table.
npm run dev
| Command | What it does |
|---|---|
npm run dev | Development server |
npm run build | Production build |
npm test | Tests (Vitest) |
npm run lint | ESLint |
npm run db:generate | Generates a migration from changes to db/schema.ts |
npm run db:migrate | Applies pending migrations |
npm run load | Parses data/raw/ and loads it into the database |
npm run backfill | Scraping owner only. Downloads HTML from the forum |
npm run explore | One-off reconnaissance of forum pages |
npm run backfill and npm run explore are not for everyone to run. Two reasons:
.playwright/,
holding the anti-bot challenge cookies. That profile belongs to one specific machine
and is not in git.If you need fresh data, ask for it. Whoever scrapes shares the data/raw/ zip again and
everyone runs npm run load.
main is the stable branch and is connected to Render: anything merged there is
deployed to production automatically.main. One branch per task (feature/whatever) and a Pull
Request.npm run lint, npm test, npx tsc --noEmit and npm run build locally
before merging, and check the change in a local npm run dev if it touches the UI.Deployed on Render (service xkt-tour, see render.yaml). Production environment
variables live in the Render dashboard, never in the repo. The production database
is a separate Neon project that only the deployed app connects to.
Migrations reach production on their own. render.yaml sets a buildCommand that
runs drizzle-kit migrate before next build, against the production DATABASE_URL
(set directly in Render's dashboard, not synced from this repo). So you never apply a
migration to production by hand: commit it and merge. Two consequences worth knowing:
main.