Slide 1 · Title & Hook
Die. Plant your revenge. Come back to count the bodies at dawn.
- A daily marble gauntlet living in one Reddit post — built by the crowd, one grudge at a time.
Best App with a Hook
Best Use of User Contributions
Best Use of Retention Mechanics
Speaker notes: Open cold on the board, not on a logo. "This is one Reddit post. Everything red on it was placed and named by another redditor — and every one is counting bodies." Ten seconds, then drop a marble. Don't explain the rules yet; let the death do it.
Slide 2 · The Problem
Reddit games die after one play.
Daily games run out of hand-authored content.
- The hook a game needs on Reddit isn't graphics — it's a reason to come back tomorrow and a reason the post is alive when a stranger opens it at 3am.
- Hand-authored daily content doesn't scale for a solo dev. Random generation feels hollow. Pure PvP needs a crowd you don't have yet.
Speaker notes: Frame the real pain for this hackathon: judging is a lone stranger, often on mobile, often alone, opening a live post. Most entries show that stranger an empty room or a one-and-done toy. That is the problem Grudgeball is engineered against.
Slide 3 · The Solution
The players are the content engine.
Yesterday's crowd builds today's board.
DROP
3 marbles/day through a machine of bumpers, fans, magnets, spikes — every object named + attributed to its builder.
PLACE
One object into tomorrow's board: a cruel one earns Menace credit per kill, a kind one earns Angel credit per save.
RETURN
At dawn to a personal Grudge Report: "Your spike 'Greg's Regret' claimed 87 marbles. You are today's #3 Menace."
Speaker notes: Three verbs, one screen, one thumb. The genius isn't the marble physics — it's that spending your marbles earns you the right to leave a mark, and that mark hunts strangers overnight and reports back. That's the loop no amount of content authoring can fake.
Slide 4 · Live Demo Flow (the magic moment)
Watch a stranger's trap claim you.
And watch their score move.
| t | Beat |
| 0:00 | Board opens: DAY N · 32 TRAPS · CRUELTY ×2.7, ghost-trails of the dead |
| 0:09 | Marble dies on "Greg's Regret" → 312 ticks to 313 bodies claimed → u/gb_founder_greg banks +1 Menace → "You were victim #313" |
| 0:20 | Marbles spent → dim board, glowing legal cells → PLANT your grudge |
| 0:30 | Morning Grudge Report: "First Grudge claimed 87 marbles overnight — #3 Menace" |
Verified deterministic on the seed: center drop → row 13 → Greg's Regret → score 3510 (13 × 100 × 2.7).
Speaker notes: This is the whole pitch in eight seconds. Land the tick at 0:09 — the number counting up is the "oh." It says: you just became a line in a stranger's kill count, and you watched them profit. Then show that you get to do the same to someone else.
Slide 5 · Architecture & Devvit Tech
100% native Devvit.
Zero external fetch. Zero runtime AI.
src/shared/ pure domain core (types, grid, A* solvability, cruelty, score, day)
src/server/ Hono over Redis + Reddit + scheduler
src/client/ Canvas-2D renderer + deterministic drop sim (React-free)
- The crown jewel: every placement is one watch/multi/exec transaction that enforces — in-transaction — one-placement-per-day, cell vacancy, per-band density caps, and an A* solvability check.
- Game clock = Devvit scheduler: compile-board cron at 0 0 * * *, hourly-accrete at 0 * * * * → the Cruelty Multiplier (1.0 → 4.0) climbs all day.
- Surface exercised: Redis hashes + sorted-sets, onPostCreate trigger, 3 mod menu actions, board_live realtime channel, Reddit app comment + asUser: SUBMIT_COMMENT. devvit.json → http.enable: false.
Speaker notes: Emphasize the transaction — it's the answer to the classic UGC troll-level problem and the reason the moderation plan fits in one paragraph. The compiler re-validates everything as defense-in-depth and is byte-reproducible from seed = hash(day).
Slide 6 · Impact / Why Reddit
Six systems, or one Devvit app.
And you'd still have no crowd.
- The feed delivers thousands of identified strangers to one persistent post, all day — the irreplaceable ingredient.
- Placement transactions, a scheduler game-clock, onPostCreate binding, realtime, app + asUser comments, menu-action mod tools — all native, all in one app.
- Reddit-y without theming: the board is the community's accumulated personality (usernames on every object, blame in the comments) with zero karma/Snoo cosplay — exactly what the rubric's anti-preferences reward.
Speaker notes: Judges penalize on-the-nose Reddit theming. Grudgeball is Reddit-native at the mechanic level, not the skin level: the content is other redditors, attributed by username. That's the distinction that wins the "Reddit-y" criterion honestly.
Slide 7 · Retention & Viability
The strongest return trigger we found:
A personalized overnight consequence — across a 205-idea corpus.
- Daily reasons to return, stacked: (1) a fresh board every midnight, (2) your Grudge Report waiting, (3) the Cruelty Multiplier wager — play early for a gentle board at low stakes, or brave 4× at night.
- Dual-economy guardrail: Angel objects pay leaderboard credit equal to Menace kills, and per-band density caps guarantee a passable line — the board can't degenerate into all-spikes, so it stays fun on day 30.
- Cost to run: no external APIs, no model inference, payload budget ≤36KB/board (far under Devvit's 4MB) — it scales on Reddit's infra essentially for free.
Speaker notes: "Viability" for a Reddit game = does it survive contact with a real subreddit for months. The dual economy and density caps are the long-term health mechanics; the report is the daily habit. Post-hackathon, PaymentsClient is already a verified surface for cosmetic banners.
Slide 8 · Competitive Advantage (vs. a ~1,469 field)
Novel loop, anti-slop by construction.
- The field's auto-lose archetypes — fishing, space-shooter, clone, trivia, AI-slop — are precisely what Grudgeball is not.
- Closest priors a judge has seen: Peggle/pachinko (mechanic only), r/place (canvas, no stakes), "The Button" (consequence, no play). None combine drop physics + attributed-UGC traps + a personal kill report + an intraday multiplier.
- SPEC: "Loop appears 0× in the 205-idea corpus." The mechanic is a known genre; the stack is the moat.
Speaker notes: Don't claim the marble drop is novel — a judge will call that bluff. Claim the combination is novel and defensible, and that it's engineered to dodge every anti-preference the organizers published. That's a sharper, more credible edge than "we're more fun."
Slide 9 · Traction & Validation
Built, green, and reproducible — today.
235
tests passing, 23 files
60
seeded objects, 12 founders
- 235 automated tests across 23 files (vitest run), covering the placement transaction (21), anti-cheat plausibility (19), board parsing (17), compile determinism (16), the Redis watch/multi/exec stub (13), A* solvability (10), and more — 100% coverage on the shared/core/routes gate.
- tsc --build clean; vite build ships both entrypoints. Deterministic seed: 60 objects, 12 labeled founders, 40 ghost trails — a judge gets the identical experience every run.
- Live-cadence plan: the test sub compiles a real board nightly via cron so the feed itself demonstrates the retention loop by judging day.
Speaker notes: Lead with 235 tests green — for a solo entry that signals real engineering maturity, backed by the CI pipeline. Then the seed determinism: it means the demo can't flake. Be explicit that the numbers are budgets enforced in code, not benchmarked latencies you're hand-waving.
Slide 10 · Roadmap (30 / 60 / 90)
Every item ships on Devvit.
| Window | Ship |
| 30 days | Live in r/grudgeball_dev with daily cadence; device feel pass (60fps mid-range Android); tune density caps + cruelty curve from real players |
| 60 days | Champion flair banners (verified setUserFlair); weekly "deadliest object" hall of fame; realtime kill-feed polish |
| 90 days | Cosmetic economy via PaymentsClient (verified package); seasonal board themes; multi-subreddit installs (schema already siloed per-sub) |
Speaker notes: Every roadmap item maps to a Devvit surface that's already verified in the docs-cache (flair, payments, per-sub Redis siloing) — so this is a credible path, not a wishlist. Nothing on it is load-bearing for the submission.
Slide 11 · The Team
One builder, the whole stack.
- Pure shared core, Hono server, Canvas client, Redis schema, scheduler, moderation tools, anti-cheat model, 235 tests, full asset suite, and an honest friction log — solo.
- Design discipline visible in the constraints: one screen, one verb, fixed palette, portrait-first, zero-horizontal-scroll as a release blocker.
Speaker notes: The solo angle is a strength here — it demonstrates that the scope was chosen to be finishable at launch grade, which is exactly the "Polish" criterion. Point at docs/friction-log.md as proof the hard toolchain problems were met and documented, not hidden.
Slide 12 · Ask / Close
Play the live post. Die once.
You'll be planning your revenge on the walk home.
- Try it: open the demo post → center DROP → watch Greg's Regret tick to 313 → plant your grudge.
- Best App with a Hook · Best Use of User Contributions · Best Use of Retention Mechanics.
- Repo is green (235 tests, 100% core coverage), CI-gated, MIT-licensed. Video ≤60s. DEMO.md walks the exact judge path.
Speaker notes: Close on the emotional line, not the tech: "if a spike named after you got your marble, it wasn't personal — it was Grudgeball." Then the CTA is a dare, not a request.