Stove Timer & Smart Recipe Cards — a hands-free cooking coach for Snap Spectacles

WHAT IT DOES Cooking goes wrong in the gaps: you are mid-step with oily hands, the sauce needs ten minutes, the pasta needs nine, and your phone is face-down across the counter. This Lens puts the whole recipe in your field of view instead. A floating step card sits to your left showing the current step, the ingredients that step needs, and a one-pinch "start timer" action. To your right, two burner cards — left pan and right pot — run fully independent countdowns, so the tomato sauce and the pasta can simmer and boil in parallel and each burner shows its own MM:SS. At 00:00 the burner card turns red and calls the finished timer out on screen, so you never have to look away from the stove to know where you are. The alarm is visual only — on glasses that is the fallback that always works, muted or not.

It ships with a complete demo recipe (Spaghetti with Tomato Sauce, 2 servings, 6 steps, 4 timers: garlic 2 min, sauce 10 min, pasta 9 min in parallel, toss 1 min), plus three shortcuts built for the kitchen: a 60x demo mode that compresses minutes into seconds so you can see the whole cook cycle in under a minute; a simulated voice shortcut that appends a spoken step ("add a step: boil pasta, 9 minutes") and derives the timer straight from the sentence; and a one-click importer that reads a bundled schema.org/Recipe JSON-LD payload — title, servings, ingredients, steps — and auto-detects the timer durations written in plain language inside the instructions. To be clear about the last two: the voice button plays back a fixed sentence rather than running speech recognition, and the importer parses a sample payload compiled into the Lens rather than fetching a live URL. What is real in both cases is the part we wanted to show — turning free text into timed, navigable recipe steps.

Every control is its own Spectacles Interaction Kit target with its own collider, so a pinch hits exactly one button. All interactions work with the mouse in Lens Studio's Interactive Preview. The interface is in Chinese, with the recipe title bilingual; a subsetted Noto Sans SC is bundled with the project so the CJK text renders identically in the preview and on device.

WHO IT IS FOR Home cooks following an unfamiliar recipe, where the hard part is not the technique but keeping several things on the heat at once. More broadly, anyone doing a multi-step, multi-timer task with occupied hands: coffee brewing, bread proofing, home chemistry, lab prep. Glasses are the right place for it because the constraint is physical — wet or greasy hands and a hot stove — not informational.

WHAT WE LEARNED

  • The timer model, not the UI, is the real design problem. A burner is not a timer; it is a slot that different timers occupy over the course of a cook. Our first pass keyed timers only by step and let the HUD pick "the first timer on this burner", which pins a burner card to an already-finished timer and silently hides the next one. Modelling burner occupancy explicitly — one active timer per burner, with handoff when a new one starts — is what makes parallel cooking legible.
  • Parsing durations out of free-text instructions is cheap and high-leverage. A regex over "10 minutes / 10 分钟 / 30 sec" turns any imported recipe into a timed recipe without the user entering a single number.
  • Minutes are untestable. A 60x demo-mode multiplier on the delta time was the single most useful thing we built: every 00:00 state, alarm, and parallel-countdown case becomes reachable in seconds, which is the only way to iterate inside the Lens Studio preview.
  • On glasses, interaction has to be built on SIK hit targets from the start. Screen-tap style events have no notion of which control you aimed at — one tap fires every handler you have bound. Retrofitting per-object colliders and Interactables onto a UI that assumed a global tap was the largest single piece of rework in the project.
  • A Lens that compiles is not a Lens that runs. Ours type-checked clean and still failed at module load, because a plain JavaScript script cannot pull in Spectacles Interaction Kit's TypeScript classes — the base class they extend only exists inside the compiled-TS scope. Nothing short of actually pressing Preview and reading the log would have caught it. Run the thing, every time.
  • The additive display changes what "contrast" means: black renders as transparent, so dark panel fills simply are not there. Legibility has to come from bright text, not from backgrounds.
  • Writing the design brief before touching the scene paid for itself: the one-spatial-moment framing is what moved the timers off a flat panel and onto the burners they actually belong to.

Built With

Share this project:

Updates

Submission history