Frontend & Web

Vietnam App's Cheap Eats Map: Stack & What Broke

Forget shiny new frameworks. The real battle for indie app developers often lies in the mundane, the infrastructural. Here's how a Vietnam-centric app navigated the pitfalls of scaling and what it means for finding your next cheap phở.

Screenshot of the cheapmap.app interface showing a map with pins for cheap locations in Vietnam.

Key Takeaways

  • Indie app development success hinges more on pragmatic infrastructure choices than on framework selection.
  • Free-tier limitations, particularly for services like Vercel's ISR, require proactive monitoring and strategic adjustments to avoid unexpected costs or service interruptions.
  • Complex affiliate tracking mechanisms and shared IP addresses for rate limiting can create unforeseen technical hurdles that directly impact user experience and app functionality.

This isn’t just another story about a dev who built something cool. This is about what happens when the rubber meets the road for real people trying to find a good deal on a $1 phở or a $0.50 coffee in Vietnam, and the often-invisible plumbing that makes it possible — or breaks spectacularly.

We’re talking about cheapmap.app, a project that shipped six months ago and is now seeing its user base climb. The core idea? To cut through the noise of Google Maps’ rating-obsessed algorithms and SEO-spam deal sites to deliver a community-driven guide to the best-value spots across Vietnam. It’s a map-first experience, augmented by live affiliate offers from major players like Shopee and Traveloka. Bilingual, cheap to run, and, critically, useful.

Why does this matter to you? Because the decisions made here—the architectural choices, the tech stack, the careful calibration of free-tier services—are the bedrock of every successful indie product. And when things go wrong, as they inevitably do, it’s the users who feel the friction.

The Unsung Hero: The Infrastructure Choices

At its heart, cheapmap.app is a proof to pragmatic engineering. The developer opted for a lean stack, consciously prioritizing cost-effectiveness and ease of maintenance for an estimated $30/month operation at 1,000 users daily. This meant sidestepping the allure of bleeding-edge frameworks for more established, predictable tools. Next.js 14 with its App Router handles the frontend, leveraging Incremental Static Regeneration (ISR) for SEO-heavy pages, a smart move for a content-driven application. Tailwind CSS and shadcn/ui provide a rapid styling solution, bypassing the need for a full-blown design system. For mapping, Mapbox GL JS was chosen over the ubiquitous Google Maps for its flexibility and a more generous free tier. State management is split between Zustand for UI and TanStack Query for server-side data fetching.

On the backend, a monolith approach reigns supreme with Spring Boot 3.2 on Java 21, utilizing virtual threads for concurrent operations. This choice, alongside a Supabase Postgres instance with PostGIS capabilities, keeps the operational overhead low. Redis from Upstash handles caching, and Cloudflare R2 manages image storage, crucially avoiding egress fees. Deployment? Vercel’s Hobby tier for the frontend and Railway for the backend, with Cloudflare for DNS and CDN. The total cost at 22 days in was a mere $15. This isn’t just cheap; it’s aggressively lean.

The big architectural call: monolith, not microservices. One Spring app, feature-based packages (auth/, location/, deal/, ranking/), one database. I’ll extract a service the day traffic justifies it, not before.

This philosophy extends to the API layer, favoring REST over GraphQL for its simpler caching and client implementations. For an indie developer, these aren’t just technical choices; they’re survival decisions.

When Free Tiers Start to Sting

The first major shockwave came from Vercel’s ISR Writes. Within two weeks, the app was already hitting 50% of the monthly free-tier cap. With over 43,000 location pages, each potentially regenerating multiple times a day, the numbers quickly escalated. The culprit? Bot traffic, hitting the pages faster than anticipated. The solution was a strategic adjustment of the revalidate parameter across different route types. Critical pages like the daily deals hub kept a shorter revalidation period (6 hours), while less frequently updated location pages were extended to a full week. This wasn’t a bug fix; it was a nuanced tuning exercise, illustrating how platform-specific limits can dictate content update strategies. The estimated reduction in writes was staggering—around 85%.

The second breakthrough was more insidious, affecting the affiliate deals aggregator. Samsung’s product feed, funneled through AccessTrade Vietnam, was unexpectedly wrapped in Commission Junction (CJ) tracking URLs. This meant the deeplinkers, expecting a direct product URL, were instead receiving a redirect to a CJ hostname, triggering HTTP 500 errors. The issue wasn’t with the app’s logic but with the nested, opaque tracking mechanisms of affiliate networks. Unraveling this required deep-diving into the raw data feeds and understanding how different affiliate platforms interoperate—or, in this case, clash.

The Human Cost of Technical Glitches

And then there was the subtle UX erosion caused by an overly aggressive rate limiter. Implemented for security and cost control, it flagged legitimate users as bots based on shared IP addresses—a common issue in regions with widespread mobile carrier NAT. Imagine trying to find a cheap meal, only to be repeatedly blocked because you’re sharing an IP with a dozen other users. This isn’t just a technical bug; it’s a direct barrier to the very people the app is designed to serve. The fix involved a more granular approach, potentially whitelisting certain known entities or implementing user-specific rate limiting where possible, a complex balancing act between security and accessibility.

This project offers a potent reminder that shipping an app isn’t just about writing code; it’s about understanding the ecosystem. It’s about anticipating how external services will behave, how platform limits will impact growth, and how even well-intentioned security measures can inadvertently alienate your user base. For developers, this is the ongoing, often unglamorous, work of building resilient, user-friendly products in a world of interconnected, sometimes unpredictable, digital services.

What’s Next for Cheap Eats in Vietnam?

The trajectory is promising. With a solid, cost-effective foundation and a keen understanding of its operational challenges, cheapmap.app is poised to grow. The lessons learned here—about the criticality of infrastructure monitoring, the intricacies of affiliate marketing, and the delicate art of rate limiting—are invaluable for any developer venturing into the solo product space. The real story isn’t just the tech stack; it’s the relentless iteration required to keep the digital doors open for people seeking value.


🧬 Related Insights

Frequently Asked Questions

What does cheapmap.app actually do?

Cheapmap.app is a crowdsourced mobile application that helps users find cheap restaurants, shops, and gas stations across Vietnam. It also aggregates affiliate deals from various online merchants.

How is this app different from Google Maps?

Unlike Google Maps, which prioritizes ratings, cheapmap.app focuses on price and value. It also integrates location-specific deals, which are often missing or poorly implemented on larger platforms.

Will this approach work for other regions?

The core concept of a community-driven, price-focused map and deals app could be adapted to other regions with similar needs. However, the success would depend on local market dynamics, user adoption for crowdsourcing, and the availability of relevant affiliate programs.

Written by
DevTools Feed Editorial Team

Curated insights, explainers, and analysis from the editorial team.

Frequently asked questions

What does cheapmap.app actually do?
Cheapmap.app is a crowdsourced mobile application that helps users find cheap restaurants, shops, and gas stations across Vietnam. It also aggregates affiliate deals from various online merchants.
How is this app different from Google Maps?
Unlike Google Maps, which prioritizes ratings, cheapmap.app focuses on price and value. It also integrates location-specific deals, which are often missing or poorly implemented on larger platforms.
Will this approach work for other regions?
The core concept of a community-driven, price-focused map and deals app could be adapted to other regions with similar needs. However, the success would depend on local market dynamics, user adoption for crowdsourcing, and the availability of relevant affiliate programs.

Worth sharing?

Get the best Developer Tools stories of the week in your inbox — no noise, no spam.

Originally reported by dev.to

Stay in the loop

The week's most important stories from DevTools Feed, delivered once a week.