Eling Bunda: WhatsApp reminders that keep pregnant mothers on their check up schedule
In Indonesia a pregnant mother should see her midwife at least six times. Many miss a visit simply because they forget, and the midwife only finds out after it's too late. Eling Bunda works out every visit from the first day of the last period, reminds the mother on WhatsApp three days and one day before, lets her confirm with a single reply, and tells the midwife who needs a call today. The mother installs nothing.
Midwife clinics for pregnant mothers (Bali, Indonesia)
Sole engineer: design, web app, WhatsApp worker and AI
1 month
Next.js, TypeScript, PostgreSQL (Supabase), Drizzle, WhatsApp (Baileys), Docker, Gemini
Enter your WhatsApp number on the demo and a real reminder arrives in about 30 seconds. Reply 1 or 2 and see what happens. Demo numbers are deleted after 7 days.
First, a quick honest note
Eling Bunda started with two midwifery students from a Ministry of Health polytechnic, who saw the problem first hand at their partner midwife clinics and researched it. I'm the engineer on the team: I designed and built the whole system around their research. The project is a national finalist at HSPO, the Mawapres Poltekkes Kemenkes 2026 competition. The clinics are real. The mothers you see on the dashboard are dummy data, and no real patient appears on this page.
The problem
Antenatal check ups are how problems like pre eclampsia and anaemia get caught early. Indonesia asks for at least six visits, but nationally only about 80% of mothers reach even the fourth one, against a 95% target. At the partner clinics, between a quarter and more than a third of mothers came late or forgot their visit.
The schedule lived only in the mother's paper KIA book. Every midwife reminded her mothers by typing WhatsApp messages one by one, between patients. Nobody had a clear list of who was due, who had confirmed, and who simply didn't show up.
What I built
-
A schedule that writes itself. The midwife enters the first day of the mother's last period, and all six visits are worked out following the Ministry of Health's rules. She can still move any visit by hand.
-
WhatsApp reminders from the clinic's own number. Three days and one day before each visit. The mother replies 1 to confirm or 2 to ask for a new date, and the dashboard updates on its own. Miss a visit, and she gets a caring follow up the next day while the midwife is told to call.
-
A dashboard that answers "who do I call today". Today's visits with the reminder trail of each one, a "needs action" list, on time attendance over the months, and a monthly K1 to K6 report the clinic can download for the community health centre.
-
Asisten Bunda, an AI for everyday questions. Mothers can ask simple things like "can I eat pineapple?" on the same WhatsApp chat, and the AI answers only from reviewed KIA book material. Anything that sounds like a danger sign skips the AI completely and goes straight to the midwife.
-
Message templates the midwife controls. She edits the wording of every reminder with a live WhatsApp preview, so the messages sound like her clinic, not like a robot.
The architecture
Two parts. The web dashboard runs on Vercel and never talks to WhatsApp directly: it writes each message into a queue in the database. A small worker in Docker sends the queue, reads the replies and runs the reminder jobs. Because the worker only makes outgoing connections, it can run on the clinic's own laptop with no server, no open port and no monthly hosting bill. If it goes offline, the dashboard keeps working and messages simply wait.
The hard parts, and how I solved them
A reminder app sounds simple. In a clinic, with real mothers and a real WhatsApp number, these were the problems that mattered.
-
An AI must never play doctor. The safety lives in plain code around the AI, not in the AI itself. Before any question reaches it, a check looks for danger signs like bleeding. If one shows up, the mother gets a fixed "come now" message and the midwife is alerted with one tap to open the mother's WhatsApp. After the AI answers, a second check blocks anything that looks like a drug name or dose. The team tests a set of 60 questions by hand, and the bar is 100% safe on the risky ones.
-
WhatsApp without the official API bill, and without getting banned. Small clinics can't pay for the WhatsApp Business Platform yet, so the worker runs as a linked device on the clinic's number. To keep that number safe it sends one message at a time with a random 4 to 8 second gap, only during the day, and never puts a link in the first message to a new number. All the WhatsApp code sits in one file, so moving to the official API later is a single swap.
-
A reminder must never arrive twice. The worker runs on a laptop that can restart at any moment. Each reminder is tied to its visit and type in the database, so a restart picks up where it left off without sending anything twice. Every time and date is computed in Jakarta time, so a reminder for tomorrow really means tomorrow.
-
Real mothers don't reply "1". They write "iya bu", "insyaallah" or "tidak bisa". Every message is read in a fixed order: STOP first, then danger signs, then a yes like 1, iya or insyaallah, or a no like 2 or berhalangan, and only then a question for the assistant. A "1" with no reminder pending goes to the assistant instead of confirming some random visit.
-
Built for cheap phones and busy hands. Mothers read WhatsApp on shared, low end Android phones with little data, so there is nothing to install and every message is plain Indonesian. The midwife checks the dashboard between patients, often on her phone, so every screen works at 390 pixels wide with high contrast, something the first version's users asked for.
How I write the code
-
The medical rules live in one tested place. The visit schedule, the reminder timing, reply reading, danger signs and phone number cleanup sit in a shared package used by both the web app and the worker, with unit tests on each.
-
Typed from the database up. TypeScript everywhere and a Drizzle schema with migrations, so a column change is caught before it reaches a clinic.
-
Decisions written down. Every feature has its own spec, and the big choices, like the database queue instead of a direct API call, are recorded with the reasons.
-
One gate before every push. Lint, type checks and tests run together, and nothing ships unless all three pass. Releases are tagged, so any version can be rolled back.
The process, step by step
-
1
Start from the research. The team's field data and the Ministry's visit rules became a product brief: who the users are, what success looks like, and what the system must never do.
-
2
One spec per feature. Seventeen features, each with its own rules, edge cases and acceptance checks, written down before building.
-
3
Design every screen first. Landing, dashboard, patients, schedule, reports, settings and the four WhatsApp conversations, all designed and reviewed before the code.
-
4
Build feature by feature. Each feature on its own branch, merged only when the gate is green.
-
5
Audit, then ship. A full pass on contrast, wording, consent defaults and accessibility before release.
Security, and how I checked it
Pregnancy data is sensitive personal data under Indonesia's data protection law. I treated it that way from the first commit.
-
Only what's needed. No national ID number is collected or stored. Names and phone numbers only, with the mother's consent recorded, and replying STOP stops every automatic message.
-
Each clinic sees only its own mothers. One account per midwife, public sign up is off, and every query is scoped to the clinic.
-
Real questions stay private. Real mothers' questions only go to the AI on a paid tier that doesn't train on them. When an answer is blocked, the logs keep only the reason, never the mother's words.
-
Dummy data can't reach a real phone. Sample mothers are marked in the database and the worker refuses to message them. Secrets live only in environment settings, the WhatsApp login stays on one machine, and security headers go out on every page.
Fast on the phones that matter
-
Opens in a blink. On a laptop the landing page loads in about half a second and scores 99 on Google's own speed check, and 91 on a phone. Nothing jumps around while it loads.
-
Light on data. Mothers never open a web page at all. Everything they need arrives as a short WhatsApp text.
-
A dashboard that keeps up. When a mother replies, her status changes on the midwife's screen without a refresh, and a banner warns right away if the clinic's WhatsApp goes offline.
Delivery
The web app deploys to Vercel from tagged releases, so any version can be rolled back quickly. The WhatsApp worker runs in Docker on the clinic's laptop and restarts on its own. You'd get the repo, the product brief, a spec for every feature, the architecture decisions, the database schema and the design file.
What you get when you work with me
-
Built on the channel your users already have. If your customers live in WhatsApp, the product meets them there instead of asking for one more app.
-
AI with guard rails. When the stakes are high, the safety is in plain code you can read and test, and a human gets the final say.
-
Cheap to run. No server bill for the messaging part, free tiers where they're safe, and a clear path to the official APIs when you grow.
-
Privacy by default. Collect less, record consent, honour STOP. Your users' trust is the product.
What the clinics got in the first field trial
86.7%
Mothers on time for their visit, up from 40%
94%
Midwives' rating for usefulness and ease of use
15/15
Mothers who got their reminders on time
Field trial of the first version at 5 midwife clinics with 15 mothers.
Years of
Experience
Projects
Delivered
Features
In Production
Community
Members
Get in touch
Have a product to build, or a workflow that eats your team's time? Tell me about it.I'll build a small working piece of it first, free, so you can judge the result before you commit.