
An air-quality assistant that shows its sources
A free, bilingual map and chat advisor that turns Jakarta's official air-quality readings into plain answers, each one tied to a source and a time. It is built as a public good: information that helps people breathe safer should be free.
An AI product does not have to come with a big bill. Small services on shared hosting, a data refresh every hour instead of constant polling, plain code for the number work, and limits on the chat keep it cheap, and that is what keeps it free for the public.
A private view tracks model use and estimated cost for every answer, so the bill is never a surprise.
Why it matters to you: I build for the budget you have, and I show you where the money goes.
Jakarta's air is a serious public-health issue, and the official readings arrive as index numbers and station names. Turning those into an answer to "is it safe to run outside today?" is left to the reader.
A general-purpose chatbot is no fix. It can sound confident while quoting an old number, or one it made up. For air quality, a wrong number that looks current is worse than no answer.
Two hard rules: a number must never be older than it looks, and the assistant must say it does not know rather than guess.
I designed, built and deployed the whole product: the data pipeline, the map, the assistant, the evaluation and the hosting.
Live official readings
Straight from the official monitoring network, refreshed every hour, each with its observation time. Anything older than 24 hours is marked stale, not shown as current.
An interactive map
Station detail, district filters and a heatmap view, on desktop and mobile.
A chat advisor in English and Bahasa Indonesia
Switchable without reloading the page. Ask what the numbers mean, compare areas, or get practical guidance.
Numbers come from code, not the model
Readings, comparisons and history use fixed data tools. Explanations come from a curated library of 29 documents, including WHO guidance and Indonesian regulation, with a citation on each answer.
Clear labels
A station reading, city-level context, modelled history and a fallback snapshot are each marked as such. A missing reading is reported as unavailable, never as zero.
No account and no login
Chat is cleared on refresh, anonymous records are deleted after 30 days, analytics load only after a visitor opts in, and the model key stays on the server.
Found by search and AI
SEO, AEO and GEO built in: separate English and Indonesian pages, structured data on the guides and an llms.txt file, so search engines and AI tools can read and cite it.
Built to run
Scheduled data refresh, structured logs with request IDs, and a private view of latency, model use and estimated cost, so the service is visible while it runs. Next.js and FastAPI on PostgreSQL and Railway.
No diagnosis or predictions
It will not diagnose, predict for an individual, or say what caused a spike.
Not a warning service
It is an information tool, not a medical or official alert service.
No logins or billing
This is a public-information product, and information that helps people breathe safer should be free. It is a public good, so there is nothing to sign up for or pay.

The map is the front door, but the site also explains the numbers in plain language, in English and Bahasa Indonesia.





For an AI assistant, looking right in a demo is not enough. It has to be right about where its answers come from, so the checks go beyond a few good examples.
Other checks cover the data tools, safety and out-of-scope refusals, follow-up questions, and whether a repeated data refresh behaves the same each time. It works in both English and Bahasa Indonesia.
It is live at napasjakarta.com, on its own domain, and refreshing from the official network every hour. I built it as a product in its own right and as a working example of an AI assistant that can be trusted with numbers.
Free by design: air-quality information is a public good, so there is no login, no billing and no paywall.
Known limit: a station reading describes one station at one time, not the whole city. The product says so.
Why it matters to you: if you want an assistant on your own data, this is how I build it. Numbers come from code, explanations come from your documents, every answer shows where it came from, and it stays cheap to run.
Want an assistant your customers can trust?
Book a free 30-minute call and we will work out the simplest version that does the job.