
Blog
Game tips, tales of the rabbit and the burrow, and notes from development.

Building an endless curved tunnel in React Three Fiber
The burrow in Rabbit Hole bends forever, but it's really just six recycled wall segments and a TubeGeometry. How the path works, why the game logic ignores the curve, and the bug that only ever broke the first run.

Fixing frame drops in React Three Fiber
Why a smooth React Three Fiber scene starts to stutter as it grows (allocations in useFrame, setState per frame, mount/unmount churn), and the scratch-ref, pooling, and ref-mutation patterns that protect the frame budget.

A serverless game leaderboard on Upstash Redis
Building a global leaderboard for a browser game with nothing but Upstash Redis — sorted sets for best-per-player, a companion hash for display data, rolling TTLs, cost-bounded trimming, and a rate limit that has to be shared across serverless instances.

Animals That Live Underground — And Why Only the Mole Made It Into the Game
The underground lives of moles, prairie dogs, and badgers, and the design reason only one of them became an obstacle.

Do Rabbits Really Love Carrots? — And What Carrots Actually Do in the Game
Where the rabbit-and-carrot image came from, and why in the game a carrot isn't food at all — it's a signpost.

Rabbits in Culture, and the Origin of "Rabbit Hole" — Where Three Burrows Came From
From the moon rabbit to the Easter Bunny, and how those images turned into the game's three burrows.

Why Do Rabbits Dig Burrows? — And How That Burrow Became a Game
The structure of a real rabbit warren, and what I kept and threw away translating it into an endless runner's tunnel.

Collecting Carrot Coins and Dressing Up Mocha
Every source of coins and everything worth spending them on, plus what to buy first.

Combos Make the Score — A Combo-Keeping Guide
Chain carrots within 2 seconds and your score doubles. The multiplier tiers, magnet and trampoline synergies, and when you should deliberately let a combo go.

Today's Burrow — How to Master the Same Map Every Day
The daily challenge serves everyone the exact same burrow. Which means you can memorize it, and which is why the ranking is fair.

The Deeper You Go, the Faster It Gets — Survival Strategy by Section
From a 12 m/s start to a 30 m/s peak — how survival changes as your speed climbs, and how to handle each obstacle.

Pushing a Single Run's Score Higher — The Mechanics of High Scores
Every source of points laid out in one table, and how to thread depth, combos, and burrow choice onto a single line.

Trampolines and the Pocket Watch, Done Right
The pink mushroom and the stopped pocket watch turn danger into opportunity. Exact heights and durations, and the timing worth saving them for.

Welcome to Rabbit Hole
An introduction to the endless rabbit-hole game and its controls, plus a map of everything on this blog.

Before / After — What Changed
From a rail stroll to an arcade runner. Comparing the rebuild side by side, and what taking external assets from 27MB to zero actually cost and bought.
Zero Sound Files — Synthesizing SFX with Web Audio
How I built collect, jump, and combo sounds using nothing but oscillators and gain envelopes.

The Root That Slipped Between Frames — Collisions and Tunneling
Sphere-approximated collisions, arc-obstacle checks, the bug where the rabbit passed clean through a root at high speed, and why the hit radius and the drawn radius deliberately disagree.

The Anatomy of Weight — Arcade Movement and Jumping
Building game feel with angular acceleration, damping, and artificial gravity on polar coordinates of the tunnel cross-section — the actual constants, the speed ramp, and why I skipped the physics engine.
Build passes, blank screen: fixing the React 19 'ReactCurrentOwner' crash in Next.js + React Three Fiber
Using @react-three/fiber v8 with React 19 (Next.js App Router) throws 'Cannot read properties of undefined (reading ReactCurrentOwner)' and a white screen. Here's the real cause and the version fix.

Peeling Off the Gray Plastic with Toon Shading
How I ditched the MeshStandardMaterial defaults and painted the burrow with a 3-step toon ramp — sharing one ramp texture, per-burrow lighting, and the angle where the walls seemed to vanish.

Cuteness Comes From Motion, Not the Model
The procedural animation I gave the rabbit — hopping, squash & stretch, and the glance-back — plus why deriving motion from state beats keyframe clips.

Sculpting a Rabbit Out of 14 Spheres and Capsules
Assembling a chibi rabbit from primitives alone, with no external model — the actual measurements and proportions, outline hulls, and the recurring bug where parts sank inside the body.

Redesign Direction — Cuteness and Feel as the Yardstick
Pinning the mood down in writing first, collecting every color in one place, and why I dropped the physics engine.

Diagnosing the Old Version Before Tearing the Rabbit Hole Apart
The old Rabbit Hole had no physics and no failure state. Why it wasn't really a game, and how I decided to rebuild instead of repair.