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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Juegos de salón para jugar solo o con amigos desde el celular
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Mobile-first web app with party games to play with friends: card games, drinking games, guessing games. Open it on a phone or tablet, pick a game from the menu, type in the players, and the phone runs the game. In Spanish, English, Portuguese and German.檢視完整 README ↗Mobile-first web app with party games to play with friends: card and dice games, word and logic puzzles, guessing games. Open it on a phone, pick a game, type in the players, and the phone runs the game. In Spanish, English, Portuguese and German, with no account needed.
Play: https://juegosdesalon.cl/
The two things to know first:
Everything else is a game you play in a group (one phone passed around, or a room with each player on their own phone) or alone.
Spanish is the default and the language the games are written in first; the other three are adaptations, not literal translations, and content only Chileans or Brazilians would know is tagged so a global Cup can leave it out (D-186, D-324). Everything internal to the repository is in English (D-316); some linked documents are still in Spanish while they are migrated. The screenshots show the app in Spanish.
The games with their own section below come first; after them, the one-player games that also make up The Cup, each opening on its own page.
| Game | Players | Modes | Status |
|---|---|---|---|
| 🏆 The Cup / La Copa / A Copa | 2 to 10 | Each on their own phone | v0.83 |
| ⏳ Timeline / Línea de Tiempo / Linha do Tempo | 1 to 6 | One phone · Several phones · Play alone | v0.9 |
| 🔢 Bulls and Cows / Toque y Fama / Toque e Fama | 1 to 2 | One phone · Two phones · Play alone | v0.4 |
| 🪢 Hangman / El Ahorcado / Forca | 1 to 6 | One phone · Several phones · Play alone | v0.26 |
| 🎲 Liar's Dice / Dudo / Dado Mentiroso | 1 to 6 | One phone · Several phones · Versus the phone | v0.32 |
| 📝 Generala / General | 1 to 6 | One phone · Several phones · Play solo | v0.189 |
| ⚓ Battleship / Batalla Naval / Batalha Naval | 1 to 2 | One phone · Two phones · Versus the phone | v0.6 |
| 🍹 Julep / Julepe / Paga o Bolo | 1 to 6 | One phone · Several phones · Versus the phone | 🧪 lab |
| 👑 Fourth King / Cuarto Rey / Quarto Rei |
Not a game but a tournament that lasts a week. Someone creates a cup and shares the link; everyone joins with their name and a 4-digit PIN, from any phone or computer. Every day a different game opens, the same for everybody, playable once. Each day hands out points by position (10, 8, 6, 5, 4, 3, 2, 1), so every day weighs the same and one crushing day does not decide the cup (D-94, D-113). The final is worth double, everyone gets one ×2 wildcard, and the most points on day 7 lifts the cup. It borrows what makes daily puzzles work (Wordle, Connections): same challenge, once a day, comparable scores, little luck, and a share card that does not give the answer away.
The admin picks the week (D-163) from fourteen games, dragging them into place, or takes a random proposal with no two days of the same skill in a row. The Grand Final always closes the cup. The classic week:
| Day | Game | Skill |
|---|---|---|
| 1 | ⏳ Timeline Flash: 10 milestones, placed with Timeline's drag and drop | knowledge |
| 2 | 🔢 Bulls and Cows: guess the number | deduction |
| 3 | 🕵️ Agents: find your 11 agents among 15 words from four clues (D-421) | association |
| 4 | 👑 Queens: one per row, column and color region, never touching; scored by solve time (D-166 to D-169, D-283) | logic |
| 5 | 🔤 Bulls and Cows: Word: a 5-letter word colored like Wordle; every letter pinned down scores | deduction |
| 6 | 📅 What year was it?: closer is better, older gets more slack | estimation |
| 7 | 🏁 The Grand Final: one round of each game of the week, worth double | everything |
The other eight: 〰️ Zip, ☀️ Tango, 📍 Where is it? (drop a pin for five cities on an unlabeled satellite globe; up to 100 points each, minus 4 per 100 km off, D-155, D-159), 🧶 Untangle (Simon Tatham's puzzle: ten levels of knots against a four-minute clock, D-179), 🚂 Train on the Edge and the three below. Every cup game also plays on its own from the menu at /<slug>/ (D-142, D-149, D-198), with its own social card (D-162). The Cup reuses the app's existing UX rather than inventing its own (D-102).
How it works:
code:day), so everyone plays the same content with no server (D-97).juegosdesalon.cl/cup/?pirata instead of a 5-letter code./?recap=demo).Spec and design: docs/games/cup.md
Three one-player games that left the lab together (D-332): on the home page, in The Cup's pool and replayed in the Grand Final (D-418). Standalone, every board is new; in a cup, the code and the day decide it.
/routes/; inspired by Junction Nine, by Bricks and Chips): turn rectangles of a 3×3 metro map until every color is one unbroken line; five stages against a 7-minute clock (D-293 to D-295)./plots/; inspired by Nikoli's Shikaku): split the grid into rectangles, each holding one number equal to its area; five boards against the clock (D-310, D-312)./paint-mines/; inspired by ColorSweeper, by ARRKKA): a color Minesweeper whose solved grid is a drawing (D-289 to D-298).Variants (D-331): Plots has 🔢 Numbers and ⚡💧 Utilities, Paint Mines easy and ⚡ hard. Standalone the player picks one (or the link says ?mode=…), each with its own leaderboard; in a cup the admin picks it per day. Every variant scores 0 to 100.
Spec and design: docs/games/routes.md, docs/games/plots.md, docs/games/paint-mines.md
A one-player mini Codenames (inspired by Codenames, by Vlaada Chvátil), at /agents/, in The Cup and in One a Day from 2026-10-24, in Connections' place (D-286, D-287, D-421). Four clues come one at a time, «SEA · 3», and you tap the 11 agents among 15 words while avoiding 3 neutrals (−15) and the assassin (−40). Hold a card to mark it suspect or ruled out. Each language has its own deck of about 118 clues, adapted, not translated.
Spec and design: docs/games/agents.md
A bridge builder inspired by Poly Bridge, out of the lab since D-456, at /bridges/, in The Cup's pool and in One a Day from 2026-10-27. Lay beams over a gap (the deck is already laid), then test: the train crosses or the bridge falls. Five crossings in 7 minutes, drawn from a catalog of 33 with the day's seed, scored on stages passed, wood saved against the cheapest known bridge, solidity and speed. The Grand Final skips it (seven minutes of building).
Spec and design: docs/games/bridges.md
🔗 Connections (16 words, 4 groups) was day 3 until Agents replaced it (D-421); old cups keep it and it still opens at /connections/, in the lab's Storeroom. 🔍 The Case, a Clues by Sam-style deduction mystery, also sits in the Storeroom at /labs/case/, playable but no longer worked on (D-257, D-263, D-267, D-280).
Place undated events in the right spot on a shared timeline: right and the card stays, wrong and it is discarded. The first to place the cards needed wins; the round is always played to the end, and ties go to the fastest. Cards do not repeat across back-to-back games, and a new theme is just a data file.
| Theme | Cards | Years | What it covers |
|---|---|---|---|
| 📜 History | 96 | 2560 BC to 2022 | Milestones of humankind |
| 🎵 Music | 91 | 1600 to 2023 | From Beethoven to Taylor Swift |
| 🇨🇱 Chile | 120 | 1520 to 2023 | From the 1960 quake to the uprising |
| 🍿 Pop culture | 108 | 1928 to 2023 | Movies, memes and video games |
| 🇧🇷 Brazil | 139 | 1500 to 2025 | From Cabral to COP30, telenovelas and carnival included |
| ⚽ Soccer | 121 | 1863 to 2025 | World Cups, clubs, goals and transfers |
| Total | 675 |
Spec and design: docs/games/timeline.md
Crack a secret number with no repeated digits. For every guess the phone answers on its own: fama is a right digit in the right place, toque a right digit elsewhere. Nobody counts by hand, nobody cheats.
Spec: docs/games/bulls-and-cows.md · Feasibility study: docs/games/bulls-and-cows-factibilidad.md
The classic, fixed so that nobody sits and watches: every player writes the word for the next one and everyone guesses their own, one letter per turn, all boards advancing together. Your score is the lives you had left. Five themes and a mix, each with its own words per language (not translations, since a translated word changes length and difficulty); 5, 6 or 8 lives; buy a letter 💡 for a life.
| 🤝 Chain | 🎴 Phone's deck | |
|---|---|---|
| Who sets the word | Each player, for the next one, with a mandatory clue | The phone, from the chosen theme |
| What the theme is for | It suggests six words to whoever writes | It is where the word comes from |
| The secret | Committed with a hash and verified at the end | There is none: it comes from the deck seed |
Spec and design: docs/games/hangman.md
Everyone rolls five dice and only looks at their own. You bet how many dice of one face are on the whole table ("four fives"); the next player raises or calls dudo, and whoever was wrong loses a die. Aces are wild; the last one with dice wins. The phone rolls, refuses illegal bids and counts instantly, which is what people argue about. Calzar (claiming the exact count) is offered only with three players or more (D-71). In Spanish the faces keep their Chilean names (ases, tontos, trenes, cuadras, quinas, sextas), switchable to numbers (D-71, D-491).
To roll, you shake the phone, like the cup at a real table: your hand becomes a green cloth with the dice face down, they tumble in 3D while you shake and the phone rattles with them, and they stay as they fell when you stop (a 🎲 button where there is no motion sensor). It is on by default and can be turned off on the names screen, which also offers ⏱️ 30 seconds per turn (off by default): whoever runs out of time loses a die (D-447).
Spec and design: docs/games/liars-dice.md
The Latin American after-dinner dice game: roll five dice up to three times, keep the ones you want, and score in one of eleven boxes; highest total wins. A generala on the first roll wins on the spot (can be turned off). The phone adds up, shows what every free box is worth now, and blocks illegal moves.
generala_solo leaderboard).Opened in v0.189 (D-248, D-405); in One a Day from October 23, 2026, with the day's dice (D-247). Its card says it is like Kniffel or Yatzy, and searching either name finds it.
Spec and design: docs/games/generala.md
Hide 5 ships on a 10×10 board and fire in turns; a hit lets you fire again. Place ships by tapping or dragging, with rotate and "random". The fleet is pixel art seen from above, generated by python3 tools/generators/fleet.py into public/battleship/flota.js (D-91); sinking a ship is a second-and-a-half animation (D-93), and whose turn it is is shown four ways, never only in words (D-92).
Spec and design: docs/games/battleship.md
In the lab's Storeroom since D-434: off the home page and the search (it had been paused there as "Coming soon" since D-88). It still plays at
/labs/julep/for lab key holders, rooms included.
A Tute-family trick-taking game played for sips. Going in commits you to win two of five tricks; fall short and you drink the whole pot, a julep. The phone deals, keeps the pot and dims illegal cards with the rule that blocks them. If only one player goes in, the dealer is dragged in (D-83). On several phones each hand is sealed with its owner's public key and verified at the end (D-81, C-10); versus the phone, one to five AI rivals. Named Julep in English (Loo reads as the toilet) and Paga o Bolo in Portuguese (D-84).
Spec and design: docs/games/julep.md
In the lab's Storeroom since D-420: off the home page, Random game and the search. It still plays at
/labs/fourth-king/for lab key holders.
The classic drinking card game. The phone is the deck: each player draws a card and the phone says who drinks, runs the minigames, suggests dares and counts the kings. Whoever draws the fourth king drinks what is left, and the last screen shows the sip ranking and every card that came up.
Spec: docs/games/fourth-king.md
/today/ keeps your streak (a 🧊 freeze per 7 days, up to 2), a calendar and a monthly points season: the day's score plus a streak bonus (D-412, D-414). Signed in: leaderboards, invites that earn a freeze, and optional reminders (docs/UNO-AL-DIA.md). A recap window on the home page shows last month's season (D-424). The first attempt counts from its start: left unfinished, it scores 0, and the way back in skips the die (D-433)./records/ adds the All-Rounder and The Cup's medals (D-219); group games keep wins (D-215).{emoji} *{title}* · {context} header, one thing per line and the link last; results go out as an image plus text, and the text never repeats the image. The menu's share sheet shows the promo video and an Invite to play message listing the main features (D-253, D-271, D-410).Plain HTML, CSS and JavaScript (ES modules). No build step, no npm dependencies. The fonts (Bangers, Nunito) are served from public/assets/fonts/, not from Google Fonts. The site is the public/ folder, published on GitHub Pages by a workflow on every merge to main once the tests pass (D-192); the rest of the repo is the workshop. Rooms use Firebase Realtime Database (free plan). See firebase/README.md.
python3 -m http.server 8765 -d public
Then open http://localhost:8765 (ES modules have to be served over HTTP). The tests:
node public/battleship/engine.test.mjs
node public/bulls-and-cows/engine.test.mjs
node public/cup/engine.test.mjs
node public/cup/games/agents/engine.test.mjs
node public/cup/games/paint-mines/engine.test.mjs
node public/cup/games/plots/engine.test.mjs
node public/cup/games/routes/engine.test.mjs
node public/generala/engine.test.mjs
node public/hangman/engine.test.mjs
node public/labs/chameleon/engine.test.mjs
node public/labs/code/engine.test.mjs
node public/labs/dominorama/engine.test.mjs
node public/labs/exploding-numbers/engine.test.mjs
node public/labs/fourth-king/engine.test.mjs
node public/labs/julep/engine.test.mjs
node public/labs/stack/engine.test.mjs
node public/labs/stick/engine.test.mjs
node public/liars-dice/engine.test.mjs
node public/timeline/engine.test.mjs
node firebase/controls.test.mjs
node firebase/flags.test.mjs
node firebase/labs-publish.test.mjs
node firebase/owner-push.test.mjs
node firebase/pin-attempts.test.mjs
node firebase/room-limits.test.mjs
node marketing/served.test.mjs
node marketing/splash/campaigns.test.mjs
node marketing/splash/teaser.test.mjs
node public/assets/css/fonts-preload.test.mjs
node public/assets/js/arrastre.test.mjs
node public/assets/js/azar.test.mjs
node public/assets/js/back-guard.test.mjs
node public/assets/js/buzon.test.mjs
node public/assets/js/compartir.test.mjs
node public/assets/js/controls.test.mjs
node public/assets/js/cup-today.test.mjs
node public/assets/js/daily-attempt.test.mjs
node public/assets/js/daily-points.test.mjs
node public/assets/js/daily-recap.test.mjs
node public/assets/js/favoritos.test.mjs
node public/assets/js/fin.test.mjs
node public/assets/js/flags.test.mjs
node public/assets/js/games.test.mjs
node public/assets/js/home-windows.test.mjs
node public/assets/js/how-to-play-facts.test.mjs
node public/assets/js/i18n.test.mjs
node public/assets/js/instalable.test.mjs
node public/assets/js/instalar.test.mjs
node public/assets/js/keyboard.test.mjs
node public/assets/js/lab-access.test.mjs
node public/assets/js/labs-puerta.test.mjs
node public/assets/js/llegada.test.mjs
node public/assets/js/manifest.test.mjs
node public/assets/js/name-guard.test.mjs
node public/assets/js/on-screen.test.mjs
node public/assets/js/parametros.test.mjs
node public/assets/js/pending-scores.test.mjs
node public/assets/js/push.test.mjs
node public/assets/js/rankings-rest.test.mjs
node public/assets/js/records.test.mjs
node public/assets/js/region-patterns.test.mjs
node public/assets/js/search.test.mjs
node public/assets/js/season.test.mjs
node public/assets/js/share-grid.test.mjs
node public/assets/js/splash.test.mjs
node public/assets/js/support.test.mjs
node public/assets/js/transport/best-effort.test.mjs
node public/assets/js/transport/cleanup.test.mjs
node public/assets/js/transport/dispose.test.mjs
node public/assets/js/transport/errors.test.mjs
node public/assets/js/transport/ratelimit.test.mjs
node public/assets/js/transport/seat.test.mjs
node public/assets/js/transport/stats.test.mjs
node public/assets/js/uno-al-dia-avisos.test.mjs
node public/assets/js/uno-al-dia-jugador.test.mjs
node public/assets/js/uno-al-dia.test.mjs
node public/assets/js/vigia.test.mjs
node public/cup/games/agents/palette.test.mjs
node public/cup/games/bridges/contrast.test.mjs
node public/cup/games/bridges/physics.test.mjs
node public/cup/games/deshacer.test.mjs
node public/cup/games/juegos.test.mjs
node public/cup/games/lazy.test.mjs
node public/cup/planilla.test.mjs
node public/cup/recap.test.mjs
node public/cup/reportes.test.mjs
node public/cup/store.test.mjs
node public/home-preload.test.mjs
node public/labs/bodega.test.mjs
node public/labs/code/engine-palabra.test.mjs
node public/labs/listed.test.mjs
node public/panel/adapta.test.mjs
node public/panel/aggregate.test.mjs
node public/panel/campaigns.test.mjs
node public/panel/copas.test.mjs
node public/panel/dominios.test.mjs
node public/panel/rooms-watch.test.mjs
node public/panel/rutas.test.mjs
node public/panel/timeline.test.mjs
node public/privacy/texts.test.mjs
node tools/agents/approve.test.mjs
node tools/agents/clean-worktrees.test.mjs
node tools/agents/covers.test.mjs
node tools/agents/decision.test.mjs
node tools/agents/document.test.mjs
node tools/agents/english.test.mjs
node tools/agents/feedback-templates.test.mjs
node tools/agents/feedback.test.mjs
node tools/agents/ideas.test.mjs
node tools/agents/inbox.test.mjs
node tools/agents/lab-publish.test.mjs
node tools/agents/labs-key.test.mjs
node tools/agents/marketing.test.mjs
node tools/agents/pending.test.mjs
node tools/agents/popularity.test.mjs
node tools/agents/processes.test.mjs
node tools/agents/repo-weight.test.mjs
node tools/agents/round-watch.test.mjs
node tools/agents/wait-pr.test.mjs
node tools/cloudflare/inbox-worker.test.mjs
node tools/e2e/affected.test.mjs
node tools/e2e/already-tested.test.mjs
node tools/e2e/changes.test.mjs
node tools/e2e/groups.test.mjs
node tools/e2e/output.test.mjs
node tools/e2e/scope-guard.test.mjs
node tools/e2e/scope.test.mjs
node tools/e2e/since-passed.test.mjs
node tools/firebase/archive.test.mjs
node tools/firebase/rankings-history.test.mjs
node tools/firebase/rename-player.test.mjs
node tools/firebase/room-sweep.test.mjs
node tools/firebase/stats-retention.test.mjs
node tools/firebase/uad-index.test.mjs
node tools/firebase/uad-points-backfill.test.mjs
node tools/firebase/unnoted-rooms.test.mjs
node tools/jobs/claude-task.test.mjs
node tools/jobs/inbox-watch.test.mjs
node tools/jobs/jobs.test.mjs
node tools/jobs/machine.test.mjs
node tools/push/daily.test.mjs
node tools/push/notify.test.mjs
node tools/push/release.test.mjs
node tools/push/schedule.test.mjs
node tools/push/webpush.test.mjs
node tools/release/changelog.test.mjs
node tools/release/json-ld.test.mjs
node tools/release/merge-report.test.mjs
node tools/release/pages-5xx.test.mjs
node tools/release/syntax.test.mjs
node tools/release/version.test.mjs
node tools/reports/weekly-data.test.mjs
node tools/e2e/look.mjs ahorcado game --width 320
node tools/e2e/look.mjs ahorcado result --lang pt
node tools/e2e/look.mjs panel data --width 900
It takes the screenshot and reports horizontal scroll, buttons under 44 px and anything below the bottom edge. Each screen's path lives in tools/e2e/paths.mjs; adding one also tests it in every language. To see all of a section's screenshots side by side before publishing (D-76):
node tools/e2e/contact-sheet.mjs cuarto-rey --out /tmp/contact-sheet
To try it on a real phone over HTTPS without publishing (D-67):
tailscale serve --bg 8765
tailscale serve --https=443 off
Each pull request leaves its changelog entry, without a number, in changelog/<branch>.md; the version is assigned on merge, in the order PRs reach main (D-300). Pages in git carry no version: the publish workflow stamps ?v=<version>-<commit> into the copy it uploads, and comments on the merged PR with the version that went live (D-323). To try the stamp locally:
python3 tools/release/set-version.py --site /tmp/site
python3 tools/release/readme.py check # did anything fall behind the code?
python3 tools/release/readme.py update # rewrites the generated blocks
python3 tools/release/readme.py screenshots <section> [--offline] # retakes the screenshots
python3 tools/release/readme.py seal # "I have read it again against these facts"
<!-- generated: ... --> and <!-- /generated --> is written by update from tools/release/facts.mjs; never edit it by hand.check compares today's facts with the last seal (docs/facts.json) and names what to reread.tools/e2e/ scripts named in docs/capturas.json. To add one: take the shot in the script, add the entry, then run screenshots and update.tests check on every PR runs check and stays red if the README fell behind (C-11).The whole app is translated, Portuguese as spoken in Brazil (German left in D-514). The names:
| Español | English | Português |
|---|---|---|
| Juegos de Salón | Party Games | Jogos de Salão |
| La Copa | The Cup | A Copa |
| Línea de Tiempo | Timeline | Linha do Tempo |
| Toque y Fama | Bulls and Cows | Toque e Fama |
| El Ahorcado | Hangman | Forca |
| Dudo | Liar's Dice | Dado Mentiroso |
| Generala | Generala | General |
| Batalla Naval | Battleship | Batalha Naval |
| Julepe | Julep | Paga o Bolo |
| Cuarto Rey | Fourth King | Quarto Rei |
| Conexiones | Connections | Conexões |
| Toque y Fama: Palabra | Bulls and Cows: Word | Toque e Fama: Palavra |
| ¿En qué año? | What Year? | Em que ano? |
| Reinas | Queens | Rainhas |
| Tango | Tango | Tango |
| Zip | Zip | Zip |
| Desenredo | Untangle | Desenrola |
| ¿Dónde queda? | Where Is It? | Onde fica? |
| El caso | The Case | O Caso |
| Rutas rotas | Broken Routes | Rotas Quebradas |
| Loteo | Plots | Loteamento |
| Pintaminas | Paint Mines | Pinta-Minas |
| Agentes | Agents | Agentes |
| Tren en Vilo | Train on the Edge | Trem no Vão |
How it is put together (canon C-3):
public/assets/js/i18n.js keeps the language in localStorage (juegos-de-salon:lang), draws the toggle and holds the shared text (COMMON). Each game keeps its text in LOCALES = { es, en, pt, de } in its rules.js, with no literal string in game.js; fixed HTML is marked data-i18n.node public/assets/js/i18n.test.mjs checks keys, list lengths, {braces} and empty texts. Every screen is tested in every language by tools/e2e/<folder>/languages.mjs (D-199).?lang=pt on any page, or the /en/ and /pt/ doors (/de/ and ?lang=de now open English, D-514); room invitations carry it.EN_LABS), offered only through /labs/<lang>/; German went through it (D-197) and later left the app (D-514)./panel/ is a private page, readable only by the owner's Google account, showing how much the app is played: six sections (Now, La Copa, Games, Traffic, Audience, Health), each against the period before, plus 📣 Campaigns, where the owner turns the home page's splash campaigns on and off, dates and orders them (D-454), with a page per cup, game and room and every view in the URL (D-207, D-208, D-233, D-251, D-348). These are usage signals, not tracking: no IP or secret leaves the phone, a random browser id is never joined with names (D-349), and chat is counted, never read (D-138). It keeps no lists of its own: games are read from public/assets/js/games.js. See docs/PANEL.md.
The repo root is not the web root (D-192). public/ is the site, exactly as served: folder = URL, in English, as are query parameters (?room=, ?seed=, ?test; parametros.js still reads the old Spanish ones, C-18, D-266). Everything next to it is the workshop.
public/ The site (juegosdesalon.cl/): the only folder that gets published
index.html Main menu (generated from assets/js/games.js)
en/ · pt/ · de/ Language doors
cup/ The Cup: engine, stores, score breakdown, CSV export, reports, demos, table image, recap (D-423, D-427)
games/ The Cup's games, one folder each (engine.js + ui.js + word content per language)
timeline/ · bulls-and-cows/ · hangman/ · liars-dice/ · generala/ · battleship/
The group games (engine.js + tests, game.js, rules.js, decks/ where needed)
agents/ · queens/ … The Cup's games played on their own (generated from cup/suelto/)
labs/ The lab, behind a per-person key (D-281, D-284): Active projects and the Storeroom (D-280, D-422)
records/ Leaderboards (D-212)
today/ One a Day (D-230, D-414)
privacy/ The privacy page, its texts in texts.js in the three languages (D-463)
panel/ Private owner dashboard (docs/PANEL.md); release-push.js, its 🔔 for the owner's release notifications (D-504)
assets/css/ · assets/js/ Shared styles and modules: games.js (registry), i18n.js, compartir.js (sharing), parametros.js, records.js, uno-al-dia*.js, share-grid.js (Uno al día's spoiler-free share grid, D-482), splash.js, home-windows.js (one window per visit on the home page, D-431), back-guard.js (a back swipe or «‹ Menú» mid-game asks, D-432), search.js, vigia.js (error reporting, D-251), support.js (☕ Buy me a coffee, D-448, D-449), site-footer.js (the home page's footer on the screens outside a game, the one-player games' covers included; not while playing), season.js (seasonal touches on the home page and Rankings, D-457), controls.js (the panel's skins and site-feature switches, D-477), flags.js (runtime lab flags in Firebase, lab|all|off switched on their /labs/ card, D-498, D-509), region-patterns.js (a texture per Queens region for colorblind players, D-481),how-to-play-facts.js (in the lab, who plays, how and what it costs as the first line of «Cómo se juega» on six covers, D-488), qr.js (the room QR, drawn with vendor/qrcode.js, a copy of qrcode-generator served by the site) …
assets/season/ The seasonal templates, one row per date, and each date's stylesheet (docs/SEASONS.md)
assets/js/transport/ Local, Firebase room and usage-signal transports, with their helpers
assets/og/ Social card images
manifest.webmanifest · sw.js PWA manifest (one per language) and service worker (D-221, D-222)
ahorcado/ copa/ … Bridge pages for the old Spanish URLs (generated, D-192)
docs/ Requirements, decisions, canons, one spec per game (docs/games/) and the README screenshots
firebase/ Realtime Database security rules and notes
changelog/ Each open PR's changelog entry, without a number (D-300)
tools/
push/ Phone notifications for The Cup and One a Day (D-223 to D-230)
release/ Publishing: version stamp, this README, social cards, icons, changelog, merge reports
firebase/ Rules, Cup reports, live-game check, rankings history, room cleanup, One a Day points
generators/ Generated content: the map, the Battleship fleet, Tren en Vilo's crossings
agents/ The owner's agents' tools: decisions, worktrees, processes, feedback, inbox, lab keys, splash, ideas
cloudflare/ The Email Worker behind [email protected] (D-318)
e2e/ Full games in headless Chrome, test scope for CI (D-307, D-329, D-308)
jobs/ Every scheduled job, listed and checked (D-365)
reports/ The weekly report (D-352)
marketing/ The promo video, splash campaigns and other promotional assets
.claude/ The project's agents and skills
Fork the repo, work on a topic branch and open a pull request to main; the tests run on every PR. Your PR brings its changelog entry without a number in changelog/<your-branch>.md (D-300), and the owner handles the Firebase rules. The guide is CONTRIBUTING.md (D-189).
MIT.
These documents are being moved to English (D-316); the ones with a Spanish title are still in Spanish.
| 4 to 6 |
| One phone |
| 🧪 lab |
| 🔗 Connections / Conexiones / Conexões | 1 | Play alone | 📦 La Bodega |
| 🔤 Bulls and Cows: Word / Toque y Fama: Palabra / Toque e Fama: Palavra | 1 | Play alone | Also in The Cup |
| 📅 What Year? / ¿En qué año? / Em que ano? | 1 | Play alone | Also in The Cup |
| 👑 Queens / Reinas / Rainhas | 1 | Play alone | Also in The Cup |
| ☀️ Tango | 1 | Play alone | Also in The Cup |
| 〰️ Zip | 1 | Play alone | Also in The Cup |
| 🧶 Untangle / Desenredo / Desenrola | 1 | Play alone | Also in The Cup |
| 📍 Where Is It? / ¿Dónde queda? / Onde fica? | 1 | Play alone | Also in The Cup |
| 🔍 The Case / El caso / O Caso | 1 | Play alone | 🧪 lab |
| 🚇 Broken Routes / Rutas rotas / Rotas Quebradas | 1 | Play alone | Also in The Cup |
| 📐 Plots / Loteo / Loteamento | 1 | Play alone | Also in The Cup |
| 🖌️ Paint Mines / Pintaminas / Pinta-Minas | 1 | Play alone | Also in The Cup |
| 🕵️ Agents / Agentes | 1 | Play alone | Also in The Cup |
| 🚅 Train on the Edge / Tren en Vilo / Trem no Vão | 1 | Play alone | Also in The Cup |
feedback/&weekend=on.?three makes a 3-day cup (D-100); ?test plays with no Firebase, as the demos, the screenshots and the end-to-end scripts do./privacy/, in the three languages and linked from the menu's footer and every feedback form, says what is kept on the phone and in Firebase, why, for how long and how to have it deleted; an email left for a reply is deleted once we answer or after 90 days.