Have a product to build or a problem to solve? Send it over. I'll build a small working piece first, free, so you can judge the result before you commit.

Phone / WhatsApp

+62 812-2851-2171

Email

arimaulanahardan@gmail.com

Linkedin

@ari-maulana-hardan

Address

Jakarta, Indonesia

Social

Back to Works HealthTech & WhatsApp

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.

Client
Midwife clinics for pregnant mothers (Bali, Indonesia)
My Role
Sole engineer: design, web app, WhatsApp worker and AI
Timeline
1 month
Tech Stack
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.

Eling Bunda landing page, WhatsApp reminder and AI assistant chats, the midwife dashboard and the monthly report

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.

Eling Bunda architecture: the midwife enters HPHT in the Next.js dashboard on Vercel, which queues messages in PostgreSQL on Supabase; a WhatsApp worker in Docker reads the queue and sends reminders through the clinic WhatsApp to the mother; mothers' questions go through a danger sign check that alerts the midwife, and only safe questions reach the Gemini assistant
From the midwife typing one date to the mother walking in. Swipe sideways, or tap to open it full size.

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.
Ari Maulana in a video call with a member of the client team, presenting the code on screen
A working session with the client team on a video call. Their face and name are blurred on purpose.
Four WhatsApp conversations: welcome and H-3 reminder, H-1 reminder with reply 1, reschedule and H+1 follow up, and the AI assistant answering a question then flagging a danger sign
Midwife dashboard with today's visits and the reminder trail of each, on time attendance, the needs action list with a danger sign alert
The WhatsApp flow and the midwife dashboard, with illustrative names and numbers. The live dashboard sits behind the clinic's login.

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.
Phone / WhatsApp
+62 812-2851-2171
Email
arimaulanahardan@gmail.com
Linkedin
@ari-maulana-hardan
Address
Jakarta, Indonesia

Leave a message

ari maulana