About Apiary

Inspiration

Most people understand why honeybees matter. Hives, honey, managed colonies. It's visible. Wild bees are the opposite. They live alone in soil, in hollow stems, in empty snail shells. Nobody notices them unless they're specifically looking. A quarter of British species are in decline, most wildflower meadows have vanished, and we wanted to do something about it. A game felt like the right way to bridge that gap. What if we could turn planting for bees into a real habit instead of something you keep meaning to do?

What it does

Apiary is a garden game where you plant real flowers and photograph real bees that show up. Each action gets verified through a photo and moves your plot forward through stages: Seedling, Garden, Habitat, Sanctuary. Every bee you photograph goes into your Pokémon inspired Bee-dex collection. Every confirmed sighting becomes real data, the same kind bee recording schemes like BWARS use to track what's actually happening out there.

How we built it

  • Frontend is React with Vite and plain CSS with Leaflet for the maps.
  • Backend runs on FastAPI with PostgreSQL. When you submit a photo, it goes to Gemini for species identification. The system does two passes: first checks whether the photo matches what you claimed to do, then suggests likely species names for you to confirm. Only the structured results get stored.
  • User identity is a UUID generated on first load and stored in localStorage, no signup needed.
  • Quests come from static lookup tables keyed by region, sun shade, plot type, and milestone. No complex geospatial scoring, just conditional logic pulling from CSV data.

Challenges

The biggest challenge was getting game mechanics to work cleanly through SQL. Everything has to update correctly in the database without losing data or creating duplicates. When a player completes a quest, a photo gets verified, points get added, the plot total increases, maybe a milestone threshold gets crossed and the plot levels up. All of that needs to happen consistently and correctly. We tried a few different schema approaches before consolidating: each sighting and quest now carries its own point value in the database, and we just sum them up when needed.

What's next

The point values and milestone thresholds we built are educated guesses. Playtesting with actual players would let us dial those in properly. We also want to add a real community layer: shared neighbourhood challenges, maybe confidence scores that build up over time as multiple players spot and confirm the same species on the same plot. The core game works fine without any of that, which feels right, but the social side could definitely push engagement further.

Share this project:

Updates

Submission history