Developer Tools

Vietnam Map App: Indie Dev's 6-Month Build & Stack

Think building a useful app requires a massive team and budget? Think again. One developer proved otherwise, launching a successful crowdsourced map and deals app for Vietnam in under six months.

Screenshot of the cheap-map.app interface showing map markers and deal listings.

Key Takeaways

  • A solo developer built a crowdsourced map and deals app for Vietnam in 6 months.
  • The total infrastructure cost is under $30/month, currently around $15/month.
  • Key challenges included managing Vercel's ISR writes and fixing broken affiliate links due to third-party data issues.

Cheap Deals, Cheap Builds.

That’s the headline, isn’t it? One person, six months, and a functioning app that’s already pulling in users. cheap-map.app isn’t some splashy Silicon Valley unicorn; it’s a pragmatic solution to a real problem. Finding good, cheap eats and shops in Vietnam used to be a crapshoot. Google Maps steers you towards tourist traps. Deal sites are just SEO spam. Word of mouth is unreliable for outsiders.

So, what do you do? You build it yourself. And this developer did, with a focus on low cost and lean operation. The goal: under $30 a month for 1,000 users a day. So far, they’re crushing it, sitting at about $15/month. impressive.

The Stack: Pragmatism Over Hype

Forget the latest shiny JavaScript framework. This build prioritizes speed and cost. Next.js 14 with the App Router handles the front-end, and TailwindCSS with shadcn/ui keeps styling manageable. Mapbox GL JS gets the nod for mapping flexibility, and Zustand/TanStack Query manage state without a fuss. Boring is good here. Boring is cheap.

The backend? Spring Boot 3.2 with Java 21’s virtual threads. It’s fast, it’s stable, and it plays nice with PostGIS. Speaking of which, Supabase provides a hosted Postgres with PostGIS, meaning no ops headache. Redis from Upstash handles caching and rate-limiting, all on free tiers. Images go to Cloudflare R2, also free. Hosting? Vercel for the front-end (free tier, for now) and Railway for the backend ($5-10/mo). Cloudflare ties it all together for DNS and CDN at a measly $1/mo.

The big architectural decision? A monolith. Not microservices. Why add that complexity when you’re solo? Extract services when traffic demands it, not a moment sooner. REST over GraphQL, too. Simpler for caching, simpler for clients, simpler for a future mobile app. This is the kind of sensible decision-making that separates indie success from endless development cycles.

Why Did This App Even Exist?

Vietnam is brimming with affordable treasures. $1 bowls of phở, fifty-cent iced coffees, motorbikes fixed for pocket change. Yet, finding these gems was a challenge. Google Maps, bless its heart, prioritizes star ratings, which often translates to inflated tourist prices. Existing deal aggregators? A cesspool of copied content and SEO bait, offering no real location context. Locals have their secrets, sure, but newcomers and expats are left adrift in a sea of overpriced options.

This app aims to fix that. It’s map-centric, with users contributing price information. Add to that a deals section pulling live affiliate offers. Bilingual support makes it accessible. The whole operation is designed to be lean and cost-effective, a breath of fresh air in a world obsessed with scaling at any cost.

The Shiny Toys That Didn’t Break (Yet)

While the user managed to avoid major backend meltdowns, the front-end infrastructure presented some unexpected hurdles. Specifically, Vercel’s Incremental Static Regeneration (ISR) writes started to look alarming. Around day 14, usage hit 50% of the monthly free tier. With 43,000 location pages, plus deal hubs and city-category cells, each regenerating hourly, the numbers projected an overage within weeks. Bots, it turns out, are prolific page-hitters.

The solution was a simple configuration tweak. Increasing the revalidate time from one hour to seven days for most location pages, and six hours for deal pages, dramatically cut down on writes. Only a specific “deals today” page, engineered for SEO with a dynamic date, kept its hourly revalidation. This reduced an estimated 226,000 writes per month down to about 36,000. A stark reminder: keep an eye on your platform’s metered dashboards. Defaults are rarely a perfect fit for your content’s update cadence.

Affiliate Link Shenanigans

And then there were the affiliate links. Samsung’s feed, pulled via AccessTrade Vietnam, was a mess. Turns out, Samsung was running its affiliate program through two networks, Commission Junction (CJ) and AccessTrade. AccessTrade was pulling a CJ-wrapped feed, stuffing the actual Samsung URL into a r= query parameter. When AccessTrade’s deeplinker tried to process these, it saw the clk.omgt3.com hostname – not a Samsung domain – and threw a 500 error. The entire Samsung deal flow was broken.

The Samsung CSV URLs looked like this:

https://clk.omgt3.com/deep_link/?url=https%3A%2F%2Fwww.samsung.com%2Fvn%2Fsmartphones%2Fgalaxy-a%2Fgalaxy-a55-5g-sm-a556b%2F

That’s not a Samsung URL. That’s a Commission Junction tracker URL with the actual Samsung URL stuffed in the r= query param. CJ is a separate affiliate network — Samsung apparently runs through both, and AccessTrade is pulling Samsung’s CJ-wrapped feed.

The fix involved some parsing logic. Instead of blindly trusting the hostname, the code now extracts the r= parameter value, re-parses that URL to get the final destination, and then applies the AccessTrade wrapper. A bit of string manipulation to salvage broken affiliate links. It’s a classic case of third-party integrations causing unexpected headaches. Always validate what you’re passing around.

What Breaks Next? (And Why It Matters)

This project is a fantastic demonstration of what’s possible when you prioritize essentials. The low cost of infrastructure is remarkable. Vercel, Supabase, Railway – they all offer generous free tiers or affordable entry points for solo developers and small teams. This isn’t just about saving money; it’s about reducing the barrier to entry for innovation.

But what happens when the hockey stick really starts to bend? When 1,000 users a day become 10,000? The $15/month budget will evaporate. Vercel’s Hobby tier has limits. Railway’s pricing scales. Supabase will eventually demand a paid plan. The monolith, which is currently a strength, could become a bottleneck. These are the growing pains every successful indie app faces.

This isn’t a prediction of failure, far from it. It’s a sober look at the realities of scaling. The developer’s transparency about the stack and the failures is gold for anyone looking to build their own product. They’ve documented the boring infrastructure decisions that, as they rightly point out, often matter more than the framework du jour.

This app serves as a potent reminder: You don’t need a venture capital war chest to build something valuable. You need smart choices, a willingness to fix what breaks, and a clear understanding of your users’ needs. The future for cheap-map.app looks bright, but its true test will be how it handles success.


🧬 Related Insights

Frequently Asked Questions

Will this app replace Google Maps?

No, not directly. cheap-map.app focuses on a specific niche: finding affordable local businesses and deals, prioritizing price over ratings. Google Maps has a much broader scope.

Is the technology stack expensive to maintain?

Currently, the stack is extremely affordable, costing around $15/month. Costs will increase as user traffic grows, but the developer has chosen services with clear scaling paths.

What did the developer learn from this project?

The developer learned the critical importance of monitoring platform usage dashboards, understanding content update cadences for ISR, and the necessity of strong parsing logic for handling inconsistent third-party affiliate data.

Written by
Open Source Beat Editorial Team

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

Frequently asked questions

Will this app replace Google Maps?
No, not directly. cheap-map.app focuses on a specific niche: finding affordable local businesses and deals, prioritizing price over ratings. Google Maps has a much broader scope.
Is the technology stack expensive to maintain?
Currently, the stack is extremely affordable, costing around $15/month. Costs will increase as user traffic grows, but the developer has chosen services with clear scaling paths.
What did the developer learn from this project?
The developer learned the critical importance of monitoring platform usage dashboards, understanding content update cadences for ISR, and the necessity of strong parsing logic for handling inconsistent third-party affiliate data.

Worth sharing?

Get the best Open Source 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 Open Source Beat, delivered once a week.