awali (Swahili) — the beginning; the origin; the very first step.
WhatsApp-native RSVP & M-Pesa payments platform for Kenya.
Guests never leave WhatsApp. Organisers never chase anyone manually. Payments flow through M-Pesa. Data lands in a clean dashboard in real time.
Every day in Kenya, millions of people coordinate events, collect RSVPs, manage memberships, and collect payments — all on WhatsApp, all manually. Organisers share Google Form links that people ignore. They chase replies in noisy group chats. They reconcile M-Pesa payments in Excel sheets at midnight.
AWALI eliminates all of that.
- Create a Flow — choose a template (wedding, church, chama, rental, etc.)
- Customise — set questions, upload poster/PDF/map pin, configure payment amount
- Share — get a QR code + WhatsApp link
- Watch the dashboard — real-time RSVPs, payments, and check-ins
- Scan QR code or tap WhatsApp link
- Bot guides them through questions conversationally
- Pay via M-Pesa STK Push — PIN prompt appears on their phone
- Receive confirmation, ticket, schedule PDF, map pin — all in WhatsApp
- Get automated reminders on the same thread
| Layer | Technology |
|---|---|
| Framework | Nuxt 4 (Vue 3) |
| Styling | Tailwind CSS 4 + shadcn-vue |
| UI Components | Reka UI primitives via shadcn-vue |
| Backend | Firebase (Firestore + Auth) |
| AI | Google Gemini (gemini-3-flash-preview) |
| Payments | M-Pesa (Daraja API) — STK Push, Paybill, Till, Pochi la Biashara |
| Hosting | awali.co.ke |
| Package Manager | Bun |
awali/
├── app/
│ ├── assets/css/ # Tailwind CSS entry
│ ├── components/ui/ # shadcn-vue components
│ ├── layouts/ # Dashboard + default layouts
│ ├── lib/ # Utilities (cn helper)
│ ├── pages/ # Routes (use-cases/, etc.)
│ └── app.vue # Root component
├── server/ # Nitro server routes
├── public/ # Static assets (llms.txt)
├── skills/ # Project context docs
├── nuxt.config.ts # App configuration
├── components.json # shadcn-vue config
└── package.json
# Install dependencies
bun install
# Start dev server
bun run dev
# Build for production
bun run build
# Preview production build
bun run previewThe WhatsApp phone number is the identity layer. M-Pesa is the payment layer. The bot is the experience layer. The QR code is the bridge between the physical world and the digital flow.
- Events — flow configuration, templates, payment settings
- RSVPs — guest responses linked by phone number
- UserProfiles — Universal ID pattern (
AW-123456) mapped to Firestore UUIDs
- Firestore Rules — "Master Gate" pattern with strict schema validation
- ABAC — Attribute-Based Access Control (organisers manage only their own flows)
- Entity Validation — key/type/size checks to prevent denial-of-wallet attacks
Gemini powers:
- Kenyan-style event description generation
- Custom RSVP/registration question suggestions based on event template
- In-chat guest support during WhatsApp simulation
123 flows across 7 categories:
| Category | Flows | Examples |
|---|---|---|
| RSVP & Events | 17 | Wedding, funeral, harambee, graduation, corporate dinner |
| Live Event Info | 17 | Conference info bot, venue navigator, live Q&A, auction bidding |
| Membership & Registration | 18 | Church member, chama, SACCO, gym, tenant onboarding |
| Payments & Collections | 18 | Rent, school fees, tithe, chama contributions, loan repayment |
| Feedback & Surveys | 16 | Post-event, sermon rating, NPS, tenant satisfaction |
| Registration & Forms | 22 | Job application, volunteer signup, property viewing, maintenance request |
| Check-in & Access | 15 | Event entrance, hotel check-in, hospital queue, gym daily |
Does the organiser have a Paybill?
├── Yes → Direct to their Paybill (0% platform cut)
└── No → Till number?
├── Yes → Direct to Till (0% platform cut)
└── No → Pochi la Biashara?
├── Yes → Direct to Pochi (0% platform cut)
└── No → AWALI Platform Paybill
Platform deducts agreed % → disburses net to organiser
Reconciliation uses the phone number as the universal join key between WhatsApp conversations and M-Pesa callbacks.
| Tier | Price | Includes |
|---|---|---|
| Basic | KES 499 | RSVP, reminders, guest list |
| Standard | KES 999 | + payments, assets, check-in |
| Premium | KES 1,999 | + feedback, certificates, priority support |
| Enterprise | KES 4,999 | Up to 1,000 guests, white-label |
| Plan | Price | Flows | Contacts/mo |
|---|---|---|---|
| Community | KES 2,999 | 3 | 300 |
| Organisation | KES 6,999 | 10 | 1,000 |
| Business | KES 14,999 | Unlimited | 5,000 |
| Enterprise | KES 35,000 | Unlimited | Unlimited |
Transaction fees: 8% (per-event) → 3% (Community/Org) → 1.5% (Business/Enterprise) → 0% (bring your own Paybill/Till).
- Named the app "Awali" (The Origin)
- Firebase project provisioned in
europe-west2with Firestore and Auth - Core relational data model defined (Events, RSVPs, UserProfiles)
- Hardened Firestore rules using "Master Gate" pattern
- Strict schema validation (keys, types, sizes) within rules
- ABAC so organisers can only manage their own flows
- Gemini assistant for event descriptions, question suggestions, and in-chat support
- First-time onboarding (WhatsApp number or system-generated ID)
- Multi-category template system (Events, Membership, Check-in, Rentals)
- WhatsApp simulation UI (typing indicators, bubble logic, STK-push mockups)
- Reporting with
jspdfandxlsxfor data extraction
"Kenyan Tech-Minimalism"
- Typography: Inter (Sans) + Georgia (Serif Italic)
- Color: Charcoal
#141414+ Paper White#F5F5F5 - Motion:
motion/reactfor fluid mobile-app-like transitions
- Cancellation + refund flow
- Event reschedule/cancellation broadcast
- Waitlist + capacity management
- Kenya Data Protection Act 2019 compliance (consent + ODPC registration)
- WhatsApp API template pre-approval for reminder sequences
- Group/family RSVP path
- Ticket transfer
- Multi-user dashboard access (co-organiser roles)
- Partner/reseller programme
- Free tier for acquisition
- Live WhatsApp Business API integration (replace simulation)
- Daraja API for verified M-Pesa payments
- QR code generation for physical check-in
- Table banking template
- School fee collection template
- CPD & certification vertical
- AI no-show prediction + smart reminder timing
The user's phone is their ID. Dashboard shows AW-123456. Internally, Firestore UUIDs. This separation enables anonymous registration while maintaining M-Pesa reconciliation.
WhatsAppBot.tsx uses step-based state machines. For complex flows, consider moving logic to configuration objects in the Event document for data-driven bots.
- 24-hour window: Outbound proactive messages require pre-approved Meta templates
- Per-message cost: ~$0.005–0.008/message for Kenya
- All reminder sequences must be designed as approved templates from day one
Private. All rights reserved.
AWALI — kila tukio linaanza hapa. Every gathering starts here.