Fake Whiteout Survival

The 'snowfield butcher shop' minigame that exists only in Whiteout Survival's misleading ads — actually built: hunt cattle, sell meat, hire automation, then survive a 30-wave zombie tower-defense finale.

6.1/10
weighted total
Technical Depth
7
Game Design
7
Backend & Security
6
Code Quality
6.5
Testing
1.5
Completeness
8
Originality
4.5
Dimension by dimension

The seven dimensions

memoryTechnical Depth 7/10

Solid Babylon.js performance work driven by measurement, not templates: the BackStack module draws 200 stacked meat slabs on the player's back via one thin-instance mesh with a hand-written Float32Array matrix buffer (zero-allocation hot path), while tree-field.ts documents reverting thin instances back to InstancedMesh because per-tree frustum culling won. Zombie pool built lazily, static meshes frozen, Draco 24→11 MB self-hosted. No LOD, no spatial partitioning — collisions are brute-force O(n·m).

stadia_controllerGame Design 7/10

A complete loop with a real mid-game pivot: economy phase → automation phase (dog / hunter / cashier) → 30-wave tower-defense endgame with bosses every 3 waves and a pure-slow tower. Git history shows genuine design iteration — house-HP was cut for a more readable breach mechanic (10 zombies inside = loss). Weak spots: the upgrade tree has exactly one entry, no mid-run save, and the run is short.

securityBackend & Security 6/10

Above-average defenses: parameterized SQL, IP-based D1 rate limits (4–8 s per action), profanity filtering, wave clamped to 30 with 'claimed clear below wave 30 recorded as not cleared', ADMIN_KEY in Pages Secrets. Then the hole: the frontend hardcodes debug password '19840501' and its comment admits it equals the admin key — anyone reading the bundle can wipe the board and open the cheat panel. Rate limiter has a SELECT-then-UPSERT race; the rate table is never cleaned.

codeCode Quality 6.5/10

Strict TS with zero any in the whole codebase, vue-tsc forced before build, parameters centralized in a 349-line commented config.ts. The counterweight: game.ts is 3,837 lines — one createGame() closure containing nearly all logic, with the 'stand-in-zone payment' block copy-pasted six times and the attack block twice.

experimentTesting 1.5/10

Zero automated tests, no test dependencies, no CI. The only gate is type-checking inside the build — though DEVLOG records a real 'typecheck before every build' discipline.

verifiedCompleteness 8/10

Near-full spec for a hobby game: live with global leaderboard, nested-reply message board, 7-day online chart, server-wide stats, 11 achievements (with a commit that verified all are triggerable), 5-track synthesized BGM, four docs (README / BACKEND / DEVLOG pitfall collection / README_AI), and graceful degradation everywhere — model-load fallbacks, offline localStorage mode, fire-and-forget community calls.

emoji_objectsOriginality 4.5/10

The premise is knowingly derivative — recreating a game that only exists in scam ads — and that meta joke is genuinely clever. Mechanically, though, it is an assembly of two very mature genres (arcade idle + TD); the breach rule, slow-tower and social layer are its own, but no new mechanic is invented.

trending_upHighlights

  • BackStack thin-instance stack — 200 visual layers at zero FPS cost, with smooth growth animation and per-step sway (back-stack.ts)
  • Documented negative knowledge — DEVLOG lists five failed fixes for iOS double-tap zoom before the working one, plus thin-instance-on-merged-mesh and TDZ pitfalls (DEVLOG.md)
  • Textbook quota-incident response — reduce, slim, then a reversible _routes.json circuit breaker, all documented in commit messages
  • Zero-external-dependency resilience — self-hosted Draco, synthesized music, automatic localStorage fallback: fully playable offline
  • Server-side plausibility validation — wave clamped to 30 and false clears demoted, stricter than most small games' accept-everything (run.ts:14-24)

trending_downWeaknesses

  • Admin key effectively leaked — frontend hardcodes '19840501' with a comment admitting it equals the backend ADMIN_KEY (game-view.vue:270)
  • 3,837-line god function with six copy-pasted payment blocks and duplicated attack logic (game.ts)
  • Zero tests, zero CI — not even the rate limiter or leaderboard clamps have unit tests
  • Rate limiter race (non-atomic SELECT-then-UPSERT) and a rate table that is never cleaned (_lib.ts:46-62)
  • Leaderboard still scriptable — no client proof; one fake max-score entry per IP every 4 seconds

Incident report: the kill-switch day

2026-07-13: real traffic pushed the account's shared Cloudflare Functions free quota (100k/day) to the brink — old background tabs were still running a retired 60-second heartbeat poll that could not be remotely stopped.

Same-day, three moves: (1) 09:05 switch presence to check-in-once; (2) 14:17 slim the landing calls from 5 requests to 2; (3) 15:42 emergency stop — a _routes.json that routes /api/* to static, sacrificing community features while the game stays playable on localStorage. The commit message includes the rollback procedure.

Next morning, quota reset confirmed, the kill-switch was removed. A reversible circuit breaker with a documented timeline — operational maturity well beyond a month-old hobby project (even if the naive heartbeat was a self-planted landmine).

smart_toyAI-assisted development

Public and extreme: all 96 commits carry Claude Opus 4.8 co-authorship (92 tagged '1M context'); the author's brand is literally 'Book AI'; README_AI describes itself as written by the AI after reading the codebase. The cadence is the human-directs-AI loop at full speed — 63 commits in one day, including a 12-commit battle with iOS double-tap zoom where a human verified on-device while the AI iterated.

summarizeFacts

StackVue 3 · TypeScript · Babylon.js 9 · Tailwind 4 · Vite 6 · CF Pages Functions · D1
GenreArcade idle × tower defense
Period2026-06-18 → 2026-07-14
Active dev days4 days
Commits96
Lines of code~7,000
Authorcraig7351 (Book AI)

Verdict

The strongest 'ops story' in the series: measured rendering trade-offs, documented pitfalls, and a real quota-incident handled like a professional. The debt is the same as its siblings — a god file, zero tests — plus one self-inflicted key leak in the frontend bundle.