Inspiration

Every morning across South India, before the day begins, someone kneels at their doorstep and draws a kolam in rice flour.

Rice, not chalk, because the kolam is food. Ants, sparrows and little birds eat it through the day. Feeding small lives is the first duty of the morning.

The ideal kolam is one single closed line that never lifts and never breaks. Sikku brings that ritual into mixed reality: a seated, hands-first puzzle on your own table. Five broken loops, four touches, one unbroken line. I wanted that ritual to live on your real table, as a seated, hands-first puzzle you can finish in a few minutes.

What it does

Sikku places a dot grid on your real table in mixed reality. The pattern starts as several separate loops. Pinch the gaps between dots to flip a junction and the line re-routes live. Your goal is to merge everything into one unbroken loop within the move par.

  • Weave: pinch or poke junctions; loop count updates instantly.
  • Trace: [CONFIRM: delete if not shipped] follow the finished line with your fingertip and watch the kolam bloom.
  • Daily kolam: [CONFIRM: delete if not shipped] a new puzzle each day, the same for everyone, with a streak.
  • No table detected? The game places a virtual tray in front of you, so it works in any room.
  • Glasses-ready: every target also works with gaze + pinch for Meta VR Glasses.

How I built it

  • IWSDK 1.0 (Three.js + ECS) in TypeScript, hosted as a static WebXR site on GitHub Pages. No backend, no accounts, no API keys.
  • A pure TypeScript kolam engine based on Paulus Gerdes' mirror-curve model of Tamil threshold designs: loops are counted with union-find on every toggle, and a seeded generator repairs random patterns into one loop, then scrambles them into a puzzle with a known par. Unit tests check solvability across 1,000 seeds per difficulty.
  • Scene understanding (plane and mesh detection) to find the table, anchors to keep it stable, and a virtual tray as fallback.
  • Hands first: IWSDK pointers for pinch and poke, fingertip tracking for tracing, and IWSDK gaze + pinch for glasses.
  • [CONFIRM: delete if not shipped] Synthesized audio with the Web Audio API: chalk ticks, rising bell notes per merge, and a chord on completion.

Challenges

  • Puzzles that are always solvable and never boring: solved by generating the solution first, then scrambling it, and rejecting trivial puzzles.
  • Unknown rooms: surface selection has four steps, ending in the tray fallback.
  • Hand tracking without haptics: CONFIRM, pick the true one I tuned target sizes and tolerances on a Quest 3/3S in the final weeks, OR (b) I developed in IWSDK's emulator; hit rates and tolerances were verified [describe exactly what].

What I learned

Hand-tracking jitter decides your interaction design: forgiving targets and a snap-to-path trace tolerance matter more than visual fidelity.

What's next

Festival kolam packs, persistent anchors so yesterday's kolam is still on your table, and a freehand Studio mode. Target launch: [CONFIRM: your date] as a PWA / Meta store submission.

How to try it (for judges)

Open the live link in the Meta Quest Browser on Quest 3/3S and press Enter XR. For table detection, complete Space Setup (room scan) first; otherwise the virtual tray appears. Hands only; no controller needed. A pinch skips the intro. [CONFIRM: glasses gaze + pinch was tested in IWSDK's emulator and a head-directed preview, not on real glasses.]

Built With

  • anchors
  • gaze-and-pinch
  • github
  • github-actions
  • hand-tracking
  • iwsdk
  • meta-quest
  • meta-vr-glasses
  • mixed-reality
  • passthrough
  • plane-detection
  • scene-understanding
  • three.js
  • typescript
  • uikitml
  • vite
  • vitest
  • web-audio-api
  • webxr
Share this project:

Updates

Submission history