Belang is a navigation app I’m building for Malaysian roads. It should feel as familiar as Waze the first time you open it, it should speak proper Bahasa Melayu, and it should know about the things that are particular to driving here: PLUS SmartLane zones, R&R stops, tolls, the NKVE interchange that everyone gets wrong at least once. It should do all of that without an account, without ads, and without anyone collecting a record of where you go.
What exists today is a web prototype. You can try it in your browser, and it is honest about being a prototype: the route is fixed and much of what you see is sample data. I’ll come back to exactly what’s real at the end. This post is about how the first version came together over three days, from 21 to 23 October 2026, and the decisions along the way.
Why now
The timing wasn’t planned, but it helped. On 20 October the government told civil servants to stop using Waze while on official duty, citing data security, and the Prime Minister encouraged everyone to use TuJu, the navigation app from the Malaysian Highway Authority (LLM). Two days later, news reports said TuJu’s navigation was temporarily down for upgrades.
Whatever you think of that decision, it put a question in a lot of people’s heads: who knows where I drive, and does it matter? That’s the question Belang is built around.
A familiar shape, our own look
People already know how a navigation app works. The turn banner goes at the top, speed sits bottom left, the ETA sits at the bottom, and there’s a big report button. Moving those things around to look different would only make the app harder to use at 90 km/h. So Belang keeps Waze’s layout conventions and draws everything itself: its own colours, its own icons, its own mascot.
The prototype is React and MapLibre, drawn inside a phone frame so it can be judged at the size it will really be used. Over the first two days it gained:
- A 3D car and a 3D junction view. Before a complicated interchange, the top half of the screen switches to a 3D scene showing which lanes to be in. The camera zooms and tilts with your speed, and 3D buildings fade in when you’re close.
- Voice in BM and English, using the phone’s own text-to-speech, including lane advice like “guna dua lorong kiri”.
- SmartLane alerts for the 33 PLUS SmartLane zones on PLUS’s official Aidiladha 2026 list. One rule here is fixed: the alert never tells a driver to use the emergency lane. It points them at the overhead signal.
- R&R and toll cards in the corner, with the distance to the next stop and an option to add it to the route.
- One-tap reports with nine types: traffic, crashes, floods, potholes, animals and so on.
- Si Belang, a tiger cub. The app opens with a short launch animation (stripes sweep across, Si Belang appears with a little rawr, and the route draws itself in) before the map flies down to street level.
The rawr went through a few versions. The first was synthesised in code and sounded more like a cough. The one that shipped is a 0.44-second tiger-cub sound made with ElevenLabs sound effects, loaded once at startup so it plays instantly on the first tap.
Privacy as a design rule, not a feature
“Privacy-first” is easy to write on a landing page. In Belang it means a few specific rules:
- No accounts, no ads, and no selling location data, ever.
- In the real app, routes will be worked out on the phone. The server will only receive anonymous road-segment speeds, and you’ll be able to switch that off.
- Map tiles and routing will be self-hosted, so no third party sees where users are going.
The first thing Belang actually stores about anyone is the beta waitlist, so that’s where the rules got tested first. A sign-up keeps only what an invite needs: email, phone type, state if you choose one, preferred language, and when you agreed. There’s no IP address and no tracking. Each record is a private file named by a hash of the email, so signing up twice just updates it, and the delete form on the privacy page can find and remove it. Malaysia’s Personal Data Protection Act expects notices in both Bahasa Melayu and English, so the notice is written in full in both, with a version date that each record carries.
Then I found something I didn’t like. The data was stored in Singapore, as the notice says, but the sign-up function itself was running in Washington, DC, Vercel’s default region. Every email made a round trip through the US before landing in Singapore. Nothing was stored there, but it wasn’t what the notice promised. One line in the config moved the function to Singapore, next to the storage and closer to the people signing up.
Update, 25 October: the waitlist has since moved with the rest of the app to Cloudflare, into a D1 database in Asia-Pacific. The backend post explains why.
Making a 30-second demo
A navigation app is hard to show in a screenshot, so the prototype has a hands-free tour mode: add ?tour to the address and it plays the whole story in about 25 seconds, from launch through route preview, voice guidance, the junction view, a SmartLane alert, the R&R card and the report menu, to “Dah sampai!” That turns the demo video into a single screen recording with no editing between scenes.
Around that recording sit a few other pieces:
- Sound effects from ElevenLabs: several rawr takes, of which the shortest made it into the app.
- B-roll shots from Higgsfield’s API: a traffic jam for the hook, Si Belang, a motorcycle rider and a lorry, all vertical for phone feeds and rendered at 480p. A small script prices every shot before it’s generated, and saves an idempotency key before sending, so a request that times out can be retried without paying twice.
- An original music bed, written in code. It’s about a page of Python and numpy that adds up sine waves into a calm, lo-fi groove at 92 BPM: a soft swell under the launch animation, the beat dropping in as the map flies down, and a resolve on the end card. No licence to worry about, and it fits the cut exactly because the timings are in the code.
Two ways to launch
The launch posts were their own small decision. With the Waze news fresh, there were two honest ways to write the hook.
The cheeky version leaned on the timing: the government told everyone to switch to TuJu, and TuJu is “upgrading”. It would get more engagement. The other version agreed with the government: Malaysia should have its own navigation app, so here’s one I’m building.
Both got written, in casual BM and in English, and the second is the one to post. Belang’s best long-term customers may well include the same ministries and agencies, and there’s no reason to start that relationship with a dig. Every draft follows the same ground rules either way: say “prototaip” and “data contoh” plainly, don’t imply live traffic or a finished app, and say nothing about Waze or TuJu that isn’t in the news.
Small pieces, on purpose
Belang runs like a small team even when it’s one person. Every change starts as a GitHub issue that says why, what, and how we’ll know it’s done, and ends as a pull request that closes it. A check fails any pull request that doesn’t say which issue it closes. CI runs lint, a typecheck, unit tests for the navigation logic and a full build. Every pull request gets its own preview build with a link, so each change gets tried on a real phone before it merges, and merging to main is the only way anything reaches production. Nobody deploys by hand.
I build Belang with an AI coding agent, and the split is deliberate. The agent writes much of the code. I direct it at a high level: the architecture, the privacy rules and the order of the work. I also make the decisions along the way, from where the server lives to which launch post goes out. The issue list keeps that honest. Each piece of work is small enough to review, and nothing lands without a preview I’ve opened myself.
The issue list is also the roadmap. As of today it has 27 issues, and most of them are Phase 1.
Where the server lives
Phase 1 needs a real server: Valhalla for routing and Photon for search, both self-hosted with Malaysian map data. Choosing where to put it took more back-and-forth than anything else that week.
| Option | Cost a month | Why it did or didn’t work |
|---|---|---|
| Oracle Cloud Always Free | US$0 | Generous ARM servers, but free servers can only be created in your account’s home region, and mine is in Ashburn, Virginia. About 230 ms each way from Malaysia, so every route request would feel slow. |
| Contabo Cloud VPS 6, Singapore | US$9 advertised | 6 vCPU and 12 GB for very little, and briefly the plan. Then the order page showed Singapore out of stock, with US$4.90 a month extra for Asian regions. |
| iCore VPS-NODE1, Cyberjaya | RM39.90 + SST, about RM43 | 2 vCPU and 4 GB on NVMe, in Malaysia. Smaller, but enough. |
iCore won. Four gigabytes sounds tight for routing a whole country, but the heavy work of building the routing and search data happens in GitHub Actions, not on the server. The server only has to serve the finished files. When real users arrive, the next size up is a short upgrade. A nice side effect is that the server sits physically in Malaysia. Everything is in Docker Compose, so moving to another provider takes about an hour if this one disappoints.
Update, 24 October: iCore didn’t survive checkout, and the server ended up on Contabo in Japan. The backend post explains why, and what else changed.
What’s real, and what isn’t yet
I’d rather say this plainly than have anyone discover it:
- The route is a fixed sample, KL Sentral to Bukit Beruntung, generated once from OpenStreetMap data on the public OSRM demo server.
- R&R positions, the toll amount, traffic and reports are sample data.
- SmartLane zones come from PLUS’s real list, but they have kilometre markers rather than coordinates so far.
- Map tiles come from OpenFreeMap for now.
Phase 1 replaces all of that: real GPS, search and routing on our own server, snapping to the road and rerouting, honest “not live yet” states wherever data isn’t real, and then field tests on real Klang Valley drives. After that, the plan is a proper iPhone and Android app.
If you drive in Malaysia every day, especially on highways, for e-hailing or deliveries, or behind the wheel of a lorry, I’d love you as a beta tester. Try the demo and join the waitlist, and tell me the one thing a navigation app has to get right for you.
Map data © OpenStreetMap contributors.