Jom MAHA
A live event map and field guide for MAHA 2026, built and improved while walking the site.
visit siteMost event maps are made before the event.
I wanted to see what happens when you make one while actually walking through the event.
MAHA is huge. There are halls, districts, exhibitors, programmes, food, activities, and a lot of things happening at the same time. A static map can give you an overview, but it starts becoming less useful when the event itself is constantly changing.
So I built maha.afiq.me.
Not as a perfect map.
As a map that could get better while I was there.
I Started With What I Had
The first version came together quickly.
It had the basic things I wanted as a visitor:
Map. Search. Districts. Events. Routes. Visitor information. AR-style wayfinding.
The map layer itself started from the official MAEPS event map. I redrew the event areas and boundaries myself as GeoJSON so I could turn the reference into something the app could use and refine.

But there was a problem.
I did not have accurate coordinates for everything.
So I did not try to pretend that I did.
The first version focused on larger things like halls, venues, and areas. A venue could have an approximate location until I had a reason to believe otherwise.
That turned out to be a useful constraint.
Because then I could take the unfinished map with me.
And walk.
The Map Became My Field Tool
Once I was physically inside MAEPS, I could start fixing the things that were impossible to verify properly from behind a laptop.
I would reach a venue, open Telegram, select:
Attach → Location
and send my current position with a short note.
That gave me a very simple field workflow.
I could capture where I actually was, then use that information to update the corresponding venue.
Hermes helped turn those little field notes into structured updates: identifying the relevant venue, keeping its existing record intact, refining its location, and updating other information where needed.
The important thing was that being physically there became part of the data collection process.
The map was not just something I looked at.
It became something I was actively feeding.
Do Not Fake Accuracy
One thing I was particularly careful about was precision.
If I physically confirmed a location, I could move the pin.
If I had not confirmed it, I left it approximate.
Because a map with fewer accurate locations is more useful than a map full of beautifully precise-looking coordinates that are actually guesses.
That sounds obvious.
It is surprisingly easy to get wrong when you are working with a large event.
Then I Started Photographing Everything
The next problem was the booths.
There are a lot of them.
And when you are walking through a hall, taking a photo of a booth sign is much faster than stopping to manually enter the exhibitor name, booth number, and other details.
So I started treating those photos as data.
Not just photos.
Data.
I built an offline macOS utility using Apple’s Vision framework and VNRecognizeTextRequest.
It can process batches of JPEG and HEIC images and look for readable information such as:
- Company names
- Organisation names
- Booth codes
- Signs and other visible text
It also has MAHA-specific vocabulary to help with recognition across Malay and English text.
The goal was not to make OCR magically perfect.
The goal was to make the boring part much faster.
OCR Suggests. I Confirm.
The system does not just dump everything it recognises directly onto the map.
It produces candidates.
Repeated photos can be grouped.
Booth codes can be extracted when they are clear.
Names that look uncertain or conflicting can be flagged for review.
And the original photo remains available as the evidence behind the record.
So the process becomes:
Photo → Recognition → Candidate → Review → Confirmed data
The computer does the tedious part.
I still decide whether the result is actually correct.
A Photo Does Not Give You GPS
There is another important distinction.
A photo might tell me:
This is Company X. They are in Hall A. Their booth is B-24.
But the photo itself does not automatically tell me the exact GPS coordinate of B-24.
So I did not turn every booth into a map pin.
Instead, booth information stays connected to its parent venue.
The venue has the location.
The booth adds detail.
That keeps the map useful without creating hundreds of misleading points that look more precise than the underlying data actually is.
The Interesting Part Was Not the Map
The map was just the visible part.
The interesting thing was the loop behind it.
I could build something at home.
Then take it outside.
Use it.
Notice what was wrong.
Capture better information.
Bring that information back into the system.
And publish a better version.
Build → Walk → Capture → Verify → Update
Then do it again.
A Different Kind of Event Map
So maha.afiq.me is not really a map that was built once and finished.
It is closer to a field guide.
The app helps me navigate MAHA.
Walking MAHA helps improve the app.
And every new piece of verified information makes the next version a little more useful.
That was the part I found most interesting.
The product and the data collection were not two separate things.
They were the same process.
Build the first version. Walk the site. Attach the real location. Photograph what you find. Review the data. Publish the next version.