A complete, production-ready HTML5 logic-puzzle game built for commercial distribution. Zero external JavaScript dependencies. Runs on any modern browser straight from a static file host with no build step required.
Disclaimer: This item includes an optional sponsor/ad slot framework that can be connected to third-party ad networks or sponsor services (such as Google AdSense, AdMob, ironSource, or similar). These are external, third-party services outside of this product and outside of the seller’s control, and may involve their own separate costs, terms, or account requirements. Buyers are responsible for reviewing and agreeing to the terms of any ad network or sponsor service they choose to integrate.
Grid & Cage bundles three Sudoku variants on one shared 9×9 engine: Killer Sudoku (cages that sum to a target, with no repeated digit inside a cage), Jigsaw Sudoku (nine irregular regions replace the classic 3×3 box), and Diagonal Sudoku (classic box rules plus both corner-to-corner diagonals). Every puzzle is generated procedurally at play time — there is no bundled puzzle list. The game features Easy/Medium/Hard difficulty tiers plus a seeded Daily Challenge, five selectable board themes (each with its own fixed background image), a shared XP progression system with seven rank tiers, a local best-times leaderboard, an eight-achievement system, a configurable hint system, and a full sponsor/ad integration framework — all in a single self-contained HTML5 package.
index.html — no build step, no CLI tools, no package manager requiredscripts/js/game.jsscripts/css/style.css; sponsor/ad placeholder in scripts/sponsor/sponsor-placeholder.htmlscripts/config/ads.jsscripts/images/bg-amber.webp, bg-jungle.webp, bg-obsidian.webp, bg-midnight.webp, bg-crimson.webp) and one favicon (favicon.jpg)localStorage with graceful degradation when storage is unavailableThe mode is chosen right after the lobby, on its own dedicated “Choose a Mode” screen, before difficulty. All three modes share the same 9×9 grid, row, and column rules — only the extra region rule changes.
The difficulty screen’s heading, subheading, and difficulty descriptions all update dynamically to match the selected mode.
dailyDifficulty). No server or puzzle database — a fresh puzzle is generated every calendar day and never repeats. Killer, Jigsaw, and Diagonal each track their own Daily independently; completing one mode’s Daily marks only that mode’s card done until the next calendar day.The grid is always 9×9 for every mode and difficulty — difficulty controls cage sizes (Killer) or how many digits are pre-filled as givens (Jigsaw, Diagonal), not the grid size itself.
On the difficulty screen, in Killer Sudoku mode only, players can paste a complete, already-solved 81-digit grid (digits 1–9, no zeros) into the Import Puzzle panel. The game validates that every row, column, and box is legal, then builds a Killer Sudoku cage layout around it and loads it as a “Custom” puzzle. This panel is hidden on the Jigsaw and Diagonal difficulty screens — importing always produces a Killer-style cage board, regardless of which mode was open when the import row was last visible. Custom puzzles are not recorded on the leaderboard.
Five board themes are selectable from the “Board · Style” screen, shared across all puzzle modes. Each theme owns one fixed background image — there is no separate background picker. The active theme is saved to localStorage and restored on every visit. The default theme is Obsidian Night.
Every mode uses a numpad (tap a cell, then tap 1–9) plus a left-side action sidebar:
All three modes award XP toward one shared rank system using the same formula: a base amount per difficulty, plus a bonus for finishing with zero mistakes, plus a bonus for finishing under the par time for that difficulty. Both bonus amounts and all base/par values are configurable.
The seven rank tiers:
The current rank and progress toward the next tier are shown as an XP bar in the lobby.
Eight achievements are tracked and displayed as gold badges in the lobby once unlocked (the lobby shows up to 4 at a time, with a “See More” button opening a full Achievements page for the rest):
All three modes count equally toward these achievements and toward the games-played, best-time, and streak stats shown on the lobby.
A local best-times leaderboard is accessible from the lobby, with Easy / Medium / Hard tabs, ranked by fastest time (up to 10 entries per tab by default, configurable). Each entry records time, mistake count, and date. Wins from all three modes share the same Easy/Medium/Hard tabs — there is no separate leaderboard per mode. Daily Challenge wins are recorded under the Medium tab. Custom-imported boards are excluded. The leaderboard can be cleared from its own screen.
All settings are accessible from the lobby settings button. The board Theme is the only choice saved to localStorage and restored on every visit. The four toggles below are session-only — they reset to defaults on page reload and are not written to localStorage.
The game ships with a fully integrated, configurable sponsor/ad system ready to connect to any ad network.
ads.preGame.countdown). The Skip button is disabled until the countdown reaches zeroscripts/sponsor/sponsor-placeholder.html. The file contains clearly marked AD REPLACEMENT START and AD REPLACEMENT END comment blocks showing exactly where to paste ad codeads.enabled or ads.preGame.enabled to false in scripts/config/ads.js. As shipped, scripts/config/ads.js sets ads.enabled: true, so the sponsor popup is on by default — set it to false to turn it offImportant: Ad network integrations such as Google AdSense, AdMob, and ironSource are third-party external services not affiliated with or included in this product. Each network operates independently and has its own account registration process, eligibility requirements, approval policies, and potentially associated costs. Grid & Cage provides the ad slot infrastructure only — buyers are solely responsible for obtaining their own accounts, meeting each network’s requirements, and complying with their respective terms of service.
Game behavior is controlled by a window.EQUATION_CONFIG object, which scripts/config/ads.js creates and adds its ad settings to. Add further keys to that same object (or your own script loaded before game.js) to customize other behavior. All values have built-in defaults so the game runs without any config. Configurable options include:
defaultTheme)showTimer)mistakeLimit, default 3; 0 = never shown)dailyDifficulty, default “medium”)timeAttackSeconds, 0 = disabled by default)maxHintsPerGame, 0 = unlimited, default)xp.easy, xp.medium, xp.hard, xp.noMistakeBonus, xp.speedBonus)parTime.easy, parTime.medium, parTime.hard)difficulty.easy.label, and matching keys for medium/hard/daily)leaderboardMaxEntries, default 10)ads.enabled, ads.preGame.enabled, ads.preGame.countdown)confetti.enabled, confetti.count, particles.enabled, particles.count, particles.speed)index.htmlThis project relies on an external CDN for one resource. This dependency is third-party, hosted and operated outside of this project and outside of the seller’s control — its uptime, availability, and any future changes to its terms are the responsibility of the provider, not the seller.
fonts.googleapis.com via an @import in scripts/css/style.css, providing the Crimson Pro (400, 600) and DM Sans (300, 400, 500) font families.An active internet connection is required for the browser to reach this CDN and load these fonts. Without one, the game still runs normally — text simply falls back to the browser’s default system font. Buyers who need a fully offline build can download the font files, host them locally, and replace the @import line in style.css with local @font-face rules.
No other third-party or CDN-hosted libraries (such as Chart.js, jsPDF, three.js, or html2canvas) are used anywhere in this codebase.
localStorage, AudioContext, document.querySelector, Promise, Set, and Array.from)Promise, and Set)localStorage access is wrapped in try/catch for safe degradation in private browsing mode