Inspiration
In many Kenyan schools, chasing fees still means a teacher calling parent after parent — or sending a child home with a message that may never arrive. When follow-up fails, kids get sent away from class until the balance is paid. Teaching time disappears, and collections still come in late.
Parents already live on WhatsApp. Schools already need a real ledger, M-Pesa, and staff who can step in when a conversation needs judgment. We built Kora so those pieces work together: school operations in one place, and a WhatsApp fee agent that reminds parents and helps them pay — without forcing another app on families.
What it does
Kora is a multi-tenant school operations platform for Kenyan schools:
- Ops workspace — grades, streams, roster, attendance, and staff roles (admin, bursar, teacher)
- Fee engine — term fee plans, invoices, bursaries/discounts, promises, receipts, and a live ledger
- M-Pesa — Daraja STK push and Paybill C2B reconciliation
- WhatsApp fee agent — overdue reminders, natural-language replies, full/partial pay, promises, cash notify, and escalate to staff
- Staff console — claim escalated chats and reply parents in-thread
Balances and receipts come from the same finance ledger the dashboard uses — the agent does not invent numbers.
How we built it
We built Kora as a Django multi-tenant app with school-scoped data, encrypted school credentials, and a dashboard for day-to-day ops.
The WhatsApp path uses Twilio for inbound/outbound messaging. A rules-first payment menu (options 1–5) handles clear choices reliably. Google Gemini with tool calling handles natural parent messages (“I will pay tomorrow”, typos, mixed English/Swahili) by calling trusted tools only: balance lookup, STK initiation, payment promises, staff notify, and escalation.
Payments go through Safaricom Daraja. Reminder scheduling respects quiet hours so schools do not spam parents overnight. When a parent asks to talk to the school, the bot steps aside and staff take over from the WhatsApp console.
What we learned
- Parents will not install another school app if WhatsApp already works — meet them there
- AI is strongest when it is bounded: understand intent, then call deterministic tools for money movement
- Menu digits and free text must not fight each other (e.g. “how much?” vs option 5)
- Staff handoff is a feature, not a failure — bursars still need to own hard conversations
- Sandbox WhatsApp peers and Daraja shortcodes behave differently from production; delivery details matter as much as the agent prompt
Challenges we faced
- Turn-state on WhatsApp — keeping “menu”, “how much?”, and “what date?” contexts correct so digits mean the right thing
- Cash vs escalate — option 3 (bring cash) must notify staff without looking like option 5 (talk to school)
- Uncertain promises — parents often say “not sure”; the ledger and UI need a clear “date TBD”, not a blank date
- Sandbox delivery — Twilio peer IDs vs E.164 phones, and Daraja sandbox shortcode/passkey rules for STK
- Trust — every balance, STK, and receipt had to stay tied to the real fee ledger so the demo (and a real school) can trust the chat
What’s next
A parent web portal (verified phone → fees and attendance), richer weekly updates, and deeper multi-guardian flows — while WhatsApp remains the primary parent channel.
Log in or sign up for Devpost to join the conversation.