The setup
My girlfriend's birthday was coming up, and I had her gifts ready weeks early. That was the problem. Handing someone a stack of gifts takes about ninety seconds, and then the birthday is just dinner. I wanted the gifts to take the whole day. I wanted her to find them.
I set one rule for myself: I would not run the hunt. Every homemade scavenger hunt has the same flaw, the person who built it standing three feet away, feeding hints and trying not to smile. They are the game master, and the game master is never really at the party. I wanted to walk next to her and watch her figure it out, with no job to do. Which meant the hunt had to run itself.
How might I turn a stack of gifts into a quest that runs itself, so I could walk beside her instead of running the show?
And here is the part I still find a little absurd: I built all of it in one night.
The diary
It started with a diary. Inside the cover I hid an NFC sticker, so the first thing the hunt asked of her was nothing at all: she tapped her phone to a book, and a webapp opened.
The webapp was a fake macOS desktop I built in v0, with a clue sitting on it. I could have put the clue on a plain page, but a desktop that looks real while existing nowhere sets the tone: from here on, things are not quite what they seem.

That clue led to the first gift: a photo of us, printed as separate segments she had to arrange. Getting the picture right revealed the next clue on the back, which pointed at the diary's spine. Rolled up inside was a slip of paper with a phone number on it. No name, no explanation, just the number.
The voice on the phone
The number connected to Aldrin, a VAPI voice agent tuned in the same late-night sitting as everything else: a custom voice, a personality prompted toward gentle drama, adventure music underneath. His opening line set the register for everything after it: "Ah, greetings, traveler." When she called, it answered in character, and it stayed in character, because there was no one behind it to slip. I was standing right next to her, hands in my pockets, provably not the person on the line. That detail did more for the experience than any prompt I wrote.
The agent would not start the quest until she said a passphrase. Mechanically that was a guardrail. In practice it became my favorite design choice: every step of the hunt now had a small ceremony to it, words you had to say out loud to make the next thing happen.

Out in the world
From there the hunt left the apartment. The agent sent her to a friend's car parked nearby, where a gift was waiting in the frunk. Inside the gift were keywords, and the ritual repeated: speak them back to the agent, earn the next step. The keywords unlocked a riddle, the riddle pointed to a cafe, and at the cafe one last passphrase got her the final gift.
The cafe is also where the system met its limit. Crowd noise turned out to be the one thing no amount of prompt tuning had prepared the agent for, and she had to repeat herself twice to get through the final exchange. She got through. I noted the lesson.
What I took away
The first lesson is about VAPI itself. Configured with a voice, a temperament, and background music, the agent read as a character in the story rather than software answering a phone. Voice AI gets discussed as an interface. Given a little stagecraft, it holds up as an experience layer.
The second lesson is the one I keep coming back to. Nothing in this hunt was exotic: an NFC sticker, a v0 prototype, a voice agent, a slip of paper. None of these tools were designed to meet each other. Chained together, they produced an afternoon that felt, to the one person it was built for, like magic. The interesting work was never in any single tool. It was in the seams.
Which is also why one night was enough. Almost none of that night went into engineering. It went into deciding what the experience should feel like: where the surprise lands, what she would be doing with her hands, what deserves a ceremony. The tools were all sitting there ready, waiting to be pointed at something. Embrace what they make possible and the building is the easy part.