About

Hi, I'm Sanchez, the person building Rabbit Hole. I design and build 3D games that run right in the browser, on my own. Whatever I run into along the way, I write up on the blog.

Rabbit Hole is a side project I make on my own. No external 3D models — the rabbit and the sound effects are all shaped from code; only the background music is made with AI (Suno).

You play as an adventurer rabbit running down an ever-deepening burrow. Collect carrots, dodge obstacles, and see how deep you can go before your three hearts run out — a casual endless runner you can pick up in seconds with mouse, touch, or keyboard.

The stack is Next.js, React Three Fiber, TypeScript. I write down what I built and how — including all the fumbling along the way — on the blog.

Most web games today buy and drop in finished 3D assets. Rabbit Hole goes the other way: the rabbit's body, its running and jumping, and even the sound effects are all generated procedurally in code. That keeps it lightweight and lets me tweak color, shape, and motion in real time — and I write each piece up as a tutorial on the blog.

You can play it right now in your browser — no install, no sign-up.

How much of this is code

The project had one rule: buy no 3D assets. Mocha's body is spheres and capsules fitted together until the proportions looked right, and the ear sway and folding hind legs aren't animation files — they're values recomputed every frame. Hats, ribbons, and scarves exist the same way, as coordinates in the source.

Sound effects are synthesized on the spot through the Web Audio API rather than loaded. The carrot pickup, the jump, the hit — all oscillators and envelopes. Background music is the one exception: twelve tracks made with AI (Suno).

The payoff is a light download and the ability to change color or proportion live. Picking a fur color in the shop applies instantly because nothing swaps a texture; one value changes. The cost is that every 'proportion that reads as cute' has to be found by hand, which made building one rabbit take far longer than expected.

How it gets made

Design, 3D, physics, sound, server, deployment, and this page — all solo. No team means no meetings, and also nobody to catch a bad call. So decisions try to leave evidence you can check inside the game: giving each burrow different gravity fits the setting, but it stayed because the feel actually changed when tested.

The code moves forward by fixing whatever keeps getting in the way. When frames drop, the cause gets written down; when a bug returns, why it returned gets written down too. Those notes make up about half the development posts on the blog.

What keeps this site running

The game is entirely free with no in-app purchases. Skipping paid items was deliberate — the moment payment exists, difficulty and reward design start bending toward it, and 'because it sells better' is a bad reason to make a burrow harder.

Costs stay small in return. The site is mostly static pages hosted near the free tier, with Redis behind the leaderboard. Ads and reader support cover what it costs to run, and ads stay on the blog and info pages — never over the play screen.

If something comes to mind while you play, or you spot a bug, send it over anytime through Contact. It really helps.