DEV Community

Cover image for How I Built a Geo-Gaming Platform and Dropped Free Coffee for Strangers
Tariku
Tariku

Posted on • Edited on

How I Built a Geo-Gaming Platform and Dropped Free Coffee for Strangers

Dropping Coffee Wasn’t Just Generosity—It Was a Test

When I left free coffee on a random street corner, I wasn’t just being generous—I was testing an idea.

Tagzora turns local discovery into a playful treasure hunt. It’s about that spark of serendipity:

finding something left behind by someone you don’t know, at just the right moment.

This isn’t a story about smooth sailing.

It’s about messy, caffeine-fueled nights and weird shortcuts—

the kind of progress that comes from subtracting what’s broken until what remains is mostly true.


🧩 1. Anticipating DOM Refreshes in a Nested *ngFor

What I did

Built a component with deeply nested lists using Angular’s *ngFor, assuming the browser would keep up.

What happened

Every scroll or map pan triggered thousands of re-renders.

The UI froze, and the page locked up until I forced a refresh.

What I learned

  • Use trackBy or switch to OnPush change detection to reduce unnecessary updates.
  • Break nested loops into small, standalone components so each one only updates what it needs.

✅ Those tweaks turned a choppy interface into something that actually feels smooth.


📱 2. Heavy Lifting on the Front End

What I did

Used setTimeout to batch geolocation crunches and setInterval to check status.

What happened

Mobile browsers throttled timers. Updates lagged, and battery life suffered.

What I learned

  • Offload heavy tasks to a server-side message queue or a Web Worker.
  • Stream results back via WebSockets to keep the main thread free for rendering.

⚡ This keeps the map snappy and devices cool.


🛠️ 3. Backend C# — Declaring Every List as Dynamic by Default

What I did

Defaulted to using dynamic lists (new List<Something>()) even when the data was fixed.

What happened

The codebase became harder to reason about.

Performance dipped, and debugging got messy—especially with unintended mutations.

What I learned

  • Start with plain arrays (Something[]) when data is static or predictable.
  • Add dynamic behavior only when needed.
  • Explicit structures reduce memory overhead and simplify debugging under pressure.

🧘 Reactivity is powerful—but overusing it introduces silent complexity.


🚫 4. Skipping a Proper CI/CD Pipeline

What I did

Ran a one-click deploy script from my laptop for a hundred commits straight.

What happened

Missing env vars, stale builds, and plenty of “it works on my machine.”

What I learned

  • Set up automation early.
  • Even a basic pipeline with smoke tests catches more bugs than manual pushes ever will.

🔁 CI/CD isn’t overhead—it’s insurance.


🔀 5. Experimenting with goto-Style Labels in C

What I did

Used goto-style labels for quick exits in C# methods.

What happened

The code worked, but updating it felt like untangling a maze of jump labels.

What I learned

  • Readability beats clever hacks.
  • Use guard clauses and early returns—they’re easier on your future self.

🧼 Clean code is kind code.


🧭 Three Takeaways for Your Next Build

  • 🎯 Gamify with purpose: Focus on the story you’re telling, not just the mechanics.
  • 🚀 Tackle performance early: Small fixes now save hours of firefighting later.
  • 🔧 Embrace the mess: Every bug and hack is a lesson worth learning. Iterate fast, learn quick.

💌 Tagzora is more than an app.

It’s a love letter to curiosity, late-night problem solving, and the thrill of real-world discovery.

Ready to leave or find your own treasure?

👉 Drop your first geo-tagged surprise at tagzora.com


Top comments (0)