Inspiration

Hotaru is Japanese for firefly. On summer nights in Japan, fireflies turn an ordinary riverbank into a place you remember. I wanted the same thing for the streets we walk every day: small lights that only exist in one spot, left there by someone, waiting for the next person who passes by.

Most messaging apps send words to a person. HOTARU sends words to a place. An anniversary note where two people first met, a tip at a favorite café, the last clue of a treasure hunt: the place itself becomes part of the message.

What it does

  • Place it. Write a message and place a glowing box where you stand. Fine-tune the spot on an illustrated map, and choose who can open it: set a password, make it open only once, or hide it from the map so only people who know where to look will find it.
  • Find it. The Map tab shows every light within 500 m and how many meters are left before you can open it.
  • Open it in AR. Hold up your camera and the lights appear in the street, floating above the ground. Tap to open. Everything you find is kept in My Boxes.
  • Play with it. Lay a trail of bread markers and put a treasure chest at the finish to build your own hunt. Line a street with paper lanterns and turn it into a festival night. Collect rare coins other people have left around town.
  • Private worlds. Tap the app icon on the Home screen five times and enter a number. Anything placed there is visible only to people who enter the same number, so a family or a class can run its own hunt.

HOTARU is free: finding, opening and collecting are always free, and the free plan can place 5 boxes and 5 bread markers every day. HOTARU Premium removes the limits and unlocks treasure chests, lanterns and coins.

How I built it

  • iOS app: Swift, SwiftUI, ARKit and RealityKit. Every marker is generated in code (glow, float, spin, and the opening animation) and its label is baked into a texture once and cached, so dozens of lights stay smooth.
  • Placing things in the real world: GPS is only accurate to a few meters, so the app treats GPS as "are you close enough" and places each light by its real distance and bearing from the AR session's origin. Once a light has been seen by the camera, its horizontal position never moves again, even when GPS jumps.
  • Backend: Supabase (Postgres with PostGIS) with anonymous sign-in. Nearby lights come from a single spatial query; passwords are stored as hashes, separate from the message.
  • Monetization: RevenueCat with StoreKit 2 for the Premium subscription, plus a RevenueCat webhook into a Supabase Edge Function so the server knows who is Premium and enforces the placement limits, not just the UI.
  • Languages: Japanese, English and Traditional Chinese, switchable inside the app.

Challenges

  • Keeping AR honest with GPS. Early builds let markers drift and jump whenever the GPS reading changed. I rebuilt the placement around one fixed session origin and a rule that nothing moves once it has been seen, and recorded field traces on real streets to replay and check the math.
  • App Review. The first version was rejected several times: text contrast, missing subscription details on the paywall, and a front-camera feature a reviewer's iPad could not find. Each rejection made the app clearer. I removed what was confusing instead of explaining it.
  • Client-only limits are not limits. A purchase first unlocked the UI while the server still refused treasure chests. Wiring RevenueCat's webhook into the database fixed it and made Premium work across devices.

What I learned

Location-based AR is mostly about trust: the light has to be where you expect it, every time. Small details (a glow that breathes, a sound when a lantern is lit, a map that looks like the objects you place) matter more than feature count.

What's next

Events and local guides: shops, schools and towns placing lights for visitors, and shared hunts that more people can join at once.

Built With

Share this project:

Updates

Submission history