Kembali ke Karya

A Story of Us

Geospatial anonymous messaging app where users pin messages to real-world coordinates.

Kategori:androidweb
Tech:FlutterSupabase
Cover for A Story of Us

Premise

We’ve all had those moments—standing at a specific spot and thinking of something we wish we could say to someone, but for whatever reason, we can't. A Story of Us is the attempt at turning those "unspoken words" into something visible. It’s a location-based platform where you can anonymously drop a message at any point on the map, tied to the exact place that inspired it.

The "Why"

The project started with a simple idea: the world is full of invisible memories. I wanted to build a digital "void" where people could release their feelings—gratitude, regret, or just a random thought—without the pressure of a real conversation. It’s about creating a global map of human sentiment, where you can walk through a city and see the emotional fragments people have left behind.

What it does

  • The Map of Feelings: The heart of the app is an interactive map. Every story is represented by an emoji that reflects the author's mood. I used custom clustering so that when you zoom out, you see "emotional hotspots" rather than just a mess of icons.

  • Leaving a Fragment: When you submit a story, you're not just typing text. You're picking a recipient, a specific feeling (which changes the app's entire theme), and pinning it to a landmark or a street corner.

  • The Story Feed: If you're not in the mood to browse the map, there’s a searchable masonry feed. You can look up specific names or moods to see what people are saying "into the void."

  • Built for Everyone: I focused heavily on making the map feel fluid. It has smart tile caching so it works even when your connection is spotty, and I added a "human-check" step to keep the content genuine and free from bots.

The Tech Behind The App

  • Flutter & Riverpod: I chose Flutter for its ability to deliver a highly customized UI. Riverpod was used for state management to handle the complex, reactive logic of filtering map markers and paginated story feeds.

  • Supabase: The backend is powered by Supabase, leveraging PostgreSQL for its robust spatial data capabilities. This allowed for efficient storage and retrieval of geographic coordinates (lat/lng) while keeping the infrastructure lean.

  • Flutter Map & Hive: For the mapping engine, I used Flutter Map (OpenStreetMap) combined with Hive for local persistence. This setup ensures that map tiles and stories are cached, providing a fast and offline-ready experience.

  • Cloudflare Turnstile: To maintain the integrity of the platform, I integrated Turnstile for frictionless bot protection, ensuring every story shared is from a genuine human without relying on intrusive CAPTCHAs.

What's Next?

The goal next is to make it live in web and Google Play Store and do some marketing to make the app known to the world!

My Role In The Team

I'm Superman.