Fun Audit - Orbit Snatch (`orbit-snatch`)

Date: 2026-05-28
Auditor: Cursor agent using fun-audit
Evidence: Browser playtest, code/design read, route pre-flight, unit test smoke


Scorecard

🎮 Orbit Snatch — Fun Scorecard
Intent: Hard Fun + Sensory Fun | Session: 30-90s | Mode: Solo + MP
 
FUN STACK     3.0/5  (L1-L8: 4,5,3,2,2,3,2,3)
CORE LOOP     3 PASS / 2 WEAK / 1 BROKEN
FUN TYPES     Hard: 2/5 ⚠️ | Sensory: 3/5 ⚠️ | Social: ?/5
TOP KILLERS   1. Failure does not teach  2. Combo/payoff is underexposed  3. Agency is opaque
PEAK MOMENT   No-input novice run reached Score 17 and set Best 17
DEAD MOMENT   Active flip runs died at Score 1 with only "Orbit Broken"
NEXT          → fun-plan: fair-failure telegraph + death recap + combo/payoff clarity

Phase 0 — Fun Intent

FieldValue
Primary fun typeHard Fun
Secondary fun typeSensory Fun
Tertiary / MP targetSocial Fun, unscored due no full multiplayer run in this audit
Emotional promise”One-button mastery panic: flip at the perfect moment, snatch gems, dodge spikes, and chase one more best.”
Session shape30-90s arcade burst
ModeSolo practice observed; multiplayer shell/lobby visible but no second-player match observed
Anti-goalsNo grind, no unfair deaths, no confusion, no griefing/toxic MP incentives

Phase 1 — Evidence Summary

Run / sourcePersonaNotes
Pre-flightPlatformfunday-frontend.service active; /play/orbit-snatch returned HTTP 200. Hydration produced menu, canvas, HUD, dock, drawer.
Browser loadNovice first 10sInitial screenshot showed the Funday shell before hydration; after ~4.5s body text included menu, “Solo Practice”, “Tap · Space · Click to flip”, canvas 722x722.
Run 1Novice / no strategyClicked Solo Practice, no active input for ~10s. Run ended with Orbit Broken, Score 17, Best 17. Shows game can generate score and replay state without player mastery.
Run 2Greedy / rapid flipsFresh tab, clicked Solo Practice, rapid canvas clicks every ~250ms. Run ended quickly with Orbit Broken, Score 1, Best 17.
Run 3Competent rhythm attemptFresh tab, clicked Solo Practice, spaced flips around 1.4-2.8s cadence. Run ended quickly with Orbit Broken, Score 1, Best 17.
ScreenshotFailure stateCaptured orbit-snatch-fun-audit-end.png: overlay says Orbit Broken, Score 1 · Best 17, Again; drawer shows No open matches.
Code/designIntentManifest defines one-button controls, objectives, maxPlayers 8, leaderboards; design doc promises combo streaks and 30-90s mastery.
TestsEngine smokegames/orbit-snatch/index: 11/11 unit tests passed.

Phase 2 — Fun Stack

LevelScoreEvidence
1 Usability4Route returns 200, frontend service active, menu/canvas/HUD appear, Solo Practice starts. Minor friction: first navigation screenshot showed a blank play shell before hydration completed.
2 Clarity5Menu clearly states “Flip direction. Snatch gems. Chain combos. Dodge spikes.” Controls are visible: “Tap · Space · Click to flip” and “TAP TO FLIP”.
3 Responsiveness3Canvas clicks trigger game outcomes, score updates, and death state. However flip feedback itself is subtle in text/DOM evidence; no visible “direction changed” cue or death cause is shown.
4 Competence2Observed active play attempts both died at Score 1, while no-input play reached Score 17. Failure screen does not teach why death happened or what to adjust.
5 Agency2The only clear solo choice is when to flip, but observed evidence makes the strategic value opaque: doing nothing outperformed active flipping.
6 Emotion3Orbit Broken, score, best score, and Again create a light tension/retry loop. No strong peak payoff was visible in observed active runs.
7 Meaning2Best score gives minimal persistence/status, but no memorable identity, story, or social result was observed.
8 Memory3Again + Best 17 supports “one more try”; replay intent is weakened because failure gives little learning and active strategy felt punished.

Average: 3.0/5

Pass bar result: FAIL for shipping feel work. Average is below 3.5, and intent-critical Competence/Agency are at 2.


Phase 3 — Core Loop

LinkStatusEvidence
GoalPASSMenu and manifest communicate collect gems, chain combos, dodge spikes.
ActionPASSOne action is clear: tap/space/click to flip direction.
FeedbackWEAKScore/death feedback exists, but flip direction, hazard threat, combo state, and cause of death are under-communicated in observed runs.
LearningBROKENFailure screen says Orbit Broken but not what hit the player, where the hazard was, or why a different flip timing would help.
RewardWEAKScore/Best works; combo payoff was not visible in the failed active runs and no-input score gain weakens the sense of earned mastery.
New ChoicePASSAgain and Best create a retry loop.

Phase 4 — Fun Type Coverage

TypeTargetActualGapHypothesis
Hard FunFair challenge + learnable failure2/5Death is fast and under-explained; active attempts did not create visible improvement.Add hazard telegraph/death recap and first-run teaching so each death explains the next better move.
Sensory Fun”That feels amazing” input/collect/combo payoff3/5Canvas, sound toggle, score, and overlay exist, but active runs did not expose a strong peak or combo celebration.Make combo tiers and near-misses more legible with escalating pulse/pitch/text feedback.
Social FunRivalry/shared ring in MP?/5Lobby/drawer visible and manifest supports MP, but no multiplayer match was observed.Run a separate MP playtest with 2+ sessions before scoring.
System FunRisk/reward route optimization2/5Gem/hazard systems exist in code, but player-facing strategy is opaque in observed play.Expose route choice: show upcoming gem/hazard windows and reward intentional flips.

Phase 5 — Fun Killers

KillerObserved?SeverityEvidenceFix direction
Player feels stupidYes🔴 fun-blockerActive rhythm and rapid flip attempts both ended at Score 1 with no explanation.Death recap: “spike hit at top-left”, replay ghost, or hazard highlight after death.
Player quits after failingRiskđź”´ fun-blockerFailure feels under-taught; Again exists but does not explain next action.Clearer telegraphs + faster/educational retry.
Player uses one dominant strategyYes, invertedđź”´ fun-blockerNo-input novice run reached Score 17; active strategies reached Score 1.Make skillful flips reliably outperform passivity, or teach why/when passivity is correct.
Player wins but feels nothingPartial🟡 frictionScore/Best state exists, but combo/peak moments were not visible in active runs.Escalating combo celebration and summary of best action.
Player feels lostNo🟢 polishMenu objective and controls are clear.Keep current concise onboarding.
Multiplayer gets toxicUnknown?No full MP run observed.Separate MP audit needed.

Phase 6 — Moment Map

MomentExpectedActualSeverityEvidence
First 10 secondsClear goal, obvious action, instant startMenu copy and controls are clear after hydration; first screenshot before hydration was blank shell.🟡 frictionBody text after ~4.5s: title, objective, Solo Practice, control hint.
First actionFlip feels meaningfulGame responds, but flip feedback is subtle; no explicit direction-change cue in evidence.🟡 frictionActive runs changed outcomes but did not visibly teach timing.
First meaningful failureFair failure teaches next attemptOrbit Broken with score only; no cause, hazard highlight, or timing lesson.đź”´ blockerGreedy and rhythm runs ended Score 1.
First peakCombo/snatch dopamine spikeNovice no-input run reached Score 17, but no observed combo peak or celebratory summary.🟡 frictionEnd overlay only reported Score/Best.
First dropAttention drops when action feels punishedActive input attempts performed worse than no-input run.đź”´ blockerScore 1 active vs Score 17 no-input.
End/replay”One more, I know what to do”Again and Best invite retry, but lesson is unclear.🟡 frictionFailure overlay: Again, Score 1 · Best 17.

Phase 7 — Prioritized Findings

#FindingTagICEPriorityRoute to plan
1Failure does not teach; death screen lacks cause and next-action lessonđź”´55212.5fun-plan: death recap + hazard highlight + first-failure coaching
2Skill/agency is opaque; observed no-input run beat active flippingđź”´5436.7fun-plan: tune/teach flip timing and make intentional flips outperform passivity
3Combo/peak payoff is underexposed in observed play🟡4428.0fun-plan: visible combo tier feedback, end-run “best chain”, stronger collect celebration

Sorted by practical execution: fix #1 first, #3 second (cheap payoff clarity), #2 third (may require balance/engine tuning).


Cross-Skill Notes

SkillFinding
funday-play-shellRoute/service healthy (active, HTTP 200). Initial blank shell before hydration was observed but resolved within ~4.5s. Not a current blocker.
auditUI/accessibility audit not performed here. Canvas has an aria label and controls are visible, but full a11y/perf pass is separate.
critiqueVisual hierarchy is workable: score top, overlay centered, controls concise. Death explanation and reward hierarchy need UX critique in plan.
svelte-code-writerSvelte code read for audit context only; no edits made.

Backlog (defer)

  • Full multiplayer Social Fun audit with 2+ clients/sessions.
  • Telemetry hooks for death reason, time-to-first-score, flip count, combo distribution, retry count.
  • Hydration/perceived loading polish if first-screen blank persists for real users.
  • Final audit pass for a11y/performance/responsiveness after feel blockers are addressed.

Sign-off

Audit complete. Review this doc, then invoke fun-plan for the top 3 fixes.

Ask Docs

AI assistant to help answer questions about the documentation. Answers are read-only and cite docs/source.

Hi! How can I help you with the documentation today? Answers are read-only and cite docs/source.

Ctrl+Enter to send