Info Covid-19 Aceh
Built with Laravel and MySQL — replaced a manual spreadsheet process with a live regional dashboard that served real-time case data to residents across every district in Aceh.
During the pandemic, regional health authorities needed a single source of truth for case data that could update daily and be trusted by both officials and the public. I designed and built a web dashboard that pulls daily figures into a structured database, visualizes trends over time, and presents a clean public-facing summary alongside a protected admin panel for data entry and corrections.
A process held together by spreadsheets
The existing process relied on figures manually compiled into spreadsheets and shared as static images across WhatsApp groups — slow, easy to mistype, and impossible to audit after the fact. By the time a number reached the public, it was often a day old and already contested.
Health workers needed a way to log figures that was simple enough to use on a shared tablet at the end of a long shift, while residents needed a page that stayed legible and fast even on low-end phones and patchy connections — a real constraint across parts of Aceh.
Starting from the data-entry desk, not the dashboard
Before writing any code, I spent time with the two health staff who would actually enter data daily, watching how they currently compiled the spreadsheet. That shaped three decisions:
- Data entry needed to take under a minute per district, or it wouldn't get done consistently.
- The public page had to render useful content even before charts finished loading.
- Corrections needed an audit trail — health staff had been burned before by "who changed this number."
How it's put together
A deliberately simple, server-rendered architecture — fewer moving parts to keep online during a crisis.
Built with
What got in the way
Health staff needed to correct yesterday's numbers without losing a record of what changed.
Added a lightweight audit log on every edit — old value, new value, who, and when.
Public page needed to stay usable on patchy 3G connections in rural districts.
Server-rendered Blade views with Alpine.js sprinkles — no heavy JS bundle to download first.
Officials distrusted a single aggregate number without district-level context.
Added a regional breakdown view so local outbreaks were visible before they became provincial news.
A closer look
Results
What I'd carry into the next project
- Talking to the people entering data first would've saved a redesign — the admin panel's first version was built around what I assumed they needed, not what they actually did.
- An audit trail is cheap to add early and expensive to retrofit once people rely on the data.
- "Fast on a bad connection" is a real constraint, not a nice-to-have, for public infrastructure in the region.