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
Responsive 2048 browser game built with HTML, modular CSS, vanilla JavaScript, and Vite.
GamesJavaScript · CSSGitHub @serlisovykOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
🎮 Responsive 2048 browser game built with HTML, modular CSS, vanilla
JavaScript, and Vite.
This project implements the classic 2048 puzzle as a compact static web game.
The source stays intentionally small and framework-free, but keeps production
habits from larger projects: a Vite build pipeline, modular CSS, hashed assets,
HTML/CSS/JavaScript minification, autoprefixing, linting, a bundle size budget,
CI on GitHub Actions, and a clear AI-agent rule set for future maintenance.Read the full README ↗🎮 Responsive 2048 browser game built with vanilla JavaScript, modular CSS, and Webpack.
The classic 2048 puzzle as a compact static web game, written without a UI framework. The code is split into small object-oriented layers: a model with the rules, views, input, storage and controllers. It keeps production habits from larger projects: a Webpack build, size budgets, CI, linting hooks, and accessibility.
+N score pop and a New record! badge| Action | Keyboard | Touch |
|---|---|---|
| Move the tiles | Arrow keys or WASD | Swipe anywhere on the page |
| New game, switch theme, open settings | Tab to a toolbar button, then Enter or Space | Tap a toolbar button |
| Close settings, cancel, continue after a win | Escape | Tap Close, Cancel or Continue playing |
src/
index.html Page markup, metadata and the four dialogs
favicon.svg SVG favicon
fonts/ Self-hosted Rubik (Latin woff2)
scripts/
main.js Composition root: finds the DOM, creates and wires the objects
constants.js Board sizes, win tiles, timings, storage keys, settings table
themeHead.js Plain script inlined into <head>: sets the theme before the first paint
game/ Model: Board, Game, Settings, Statistics (rules and values, no DOM)
ui/ Views: grid, score, dialogs, settings, theme switch, footer
input/ Keyboard and swipe input
storage/ Safe localStorage wrapper
controllers/ Use cases and flow state: game, high score, saved game, settings, statistics, theme
styles/
main.css CSS entry, imports the rest
theme.css Scales and every UI colour for both themes, the theme reveal
base.css Font face, reset, page base, focus ring
layout.css Page layout, the short landscape layout, footer
header.css Header: logo, score boxes, score pop, record badge
board.css Board, cells, tiles and their animation classes
tiles.css Tile palette, one rule per tile value
overlays.css Dialogs: win, game over, confirmation, settings
controls.css Buttons, segmented control, toolbar, icon buttons
animations.css Every @keyframes
motion.css Reduced-motion overrides
public/ Files with an unhashed URL, copied as they are: link preview image, robots.txt, llms.txt
webpack/ Webpack config in parts: paths, browser targets, loaders, plugins
assets/ The gameplay GIF shown above
ai/ Agent docs: repo map, rules, decisions, skills, prompts, plans
Install dependencies, which also installs the pre-commit hook (needs Node.js 20.19+, 22.13+ or 24+, and Yarn 1):
yarn install
Run the development server at http://localhost:8080:
yarn dev
Build the production version into dist/:
yarn build
Preview the production build locally (run yarn build first):
yarn preview
Lint the code (yarn lint:fix also fixes what it can):
yarn lint
Format the code with Prettier (yarn format:check only checks):
yarn format
Check the bundle sizes against their budgets (run yarn build first):
yarn size
Every push runs lint, the format check, the build and the size budgets from .size-limit.json on GitHub Actions.
The pre-commit hook runs ESLint and Prettier on the staged files through Husky and lint-staged.
main is deployed to Vercel, and other branches get preview deployments.
main.js (rules)<dialog> elements, with one shared confirmation that answers a Promise (decision)data-theme, set by a head script before the first paint (decision)The game is built and maintained by AI agents (Claude Code) under the author's review. Everything they need lives in the repo, written for any agent rather than one tool:
| Part | What it gives an agent |
|---|---|
AGENTS.md | The entry point: project defaults and the rules that never bend |
ai/map.md | Where every file, class and storage key lives |
ai/rules/ | How to write the code and the docs, and the Definition of Done |
ai/decisions/ | Why things are the way they are, so nothing settled gets "fixed" back |
ai/skills/ | Playbooks: adding a feature, self-review, remaking the link preview |
ai/prompts/ | Session prompts: one task, or an orchestrator running several in parallel |
ai/superpowers/ | The plan (and spec) of every past task |
Every change follows one workflow: a Linear issue → a plan → the code on its own branch → checks and a run in the browser → self-review → the author's approval → a local merge into main.