Bizzy — The Invisible Backbone of African Commerce
💡 What Inspired Us
a I grew up watching small business owners around me operate entirely on instinct and paper. A woman selling perfume in Lagos market would remember hundreds of customer names, their preferences, what they owed her, and when to follow up — all in her head. She was running a sophisticated business operation with zero infrastructure to support her.
The moment I started building with AI, one question kept coming back:
"What if the most hardworking business operator in the room — the market trader, the boutique owner, the fabric seller — had access to the same intelligent infrastructure as a Fortune 500 company?"
That question became Bizzy.
Nigeria has over 39 million SMEs contributing nearly 48% of GDP. Yet fewer than 2% use any form of digital business management. The tools that exist weren't built for them — they drain batteries, consume mobile data, require stable internet, and have learning curves that assume a level of digital literacy most traders simply don't have.
The breakthrough insight was this: they don't need a new app. They need something that works inside the tool they already use every day — WhatsApp.
WhatsApp has over 93% smartphone penetration in Nigeria. Every merchant already knows how to use it. Every customer is already on it. The infrastructure was always there. What was missing was intelligence.
Bizzy puts that intelligence directly inside WhatsApp — powered by Gemini 2.5 Flash.
🏗️ How We Built It
Building Bizzy meant solving a multi-sided architecture problem: how do you make one AI engine serve thousands of merchants simultaneously, with each merchant's customers getting a completely personalised experience that feels like talking directly to that business?
The Core Architectural Decision
Every message sent to a merchant's Bizzy number carries two critical fields in the Africa's Talking webhook payload:
phoneNumber— the customer's phone numberwaNumber— the merchant's dedicated WhatsApp business number
We use the waNumber field as the merchant identity key — a direct database query into PostgreSQL that loads that merchant's entire business context: their catalog, prices, hidden negotiation floors, language preferences, payment details, and FAQ responses.
This means one FastAPI engine serves unlimited merchants simultaneously with zero context bleeding between them. Think of it like a hotel receptionist who switches language, persona, and product knowledge instantly depending on which guest walks up.
The Two-Layer AI Pipeline
We built a cost-control architecture that keeps Gemini focused on high-value work:
Layer 1 — The Microsecond Guardrail Filter
A lightweight rule-based classifier written in pure Python intercepts every incoming message before any AI processing occurs. Greetings, emojis, and single-word acknowledgments — which constitute roughly 65-70% of all incoming messages — receive instant template responses without touching the LLM.
The cost savings compound at scale. If the average merchant receives 500 messages per day across 2,000 merchants:
$$\text{Total daily messages} = 500 \times 2{,}000 = 1{,}000{,}000$$
$$\text{Messages reaching LLM} = 1{,}000{,}000 \times 0.30 = 300{,}000$$
$$\text{Estimated daily LLM cost} \approx \$300$$
$$\text{Cost per merchant per day} = \frac{\$300}{2{,}000} = \$0.15$$
That $0.15 per merchant per day is comfortably absorbed into the subscription model while maintaining healthy margins.
Layer 2 — Gemini 2.5 Flash Intelligence & Multimodal Vision
When a message passes the filter, Gemini 2.5 Flash receives the merchant's full business context as a structured system prompt alongside the conversation history from Redis. It returns a strictly enforced JSON schema — never free text:
{
"is_haggling": true,
"intent_action": "negotiate",
"parsed_items": ["Royal Oud 50ml"],
"assistant_reply": "Haha I feel you! Best I can do is ₦7,800 final price 🙏",
"confidence": 0.97
}
During conversational onboarding, merchants upload product photos directly via WhatsApp. Gemini 2.5 Flash's native vision pipeline extracts item titles, calculates default floor margins, and auto-populates the PostgreSQL products table in real time.
The Nigerian Open-Market Bargaining Engine
This is the feature that made everything click. Nigerian market commerce runs on negotiation. A customer doesn't just buy — they bargain. "Abeg reduce am small." "Last price?" "I go buy two if you do 6k."
We built a bargaining rulebook into Gemini's system prompt that:
- Detects haggling intent from colloquial Pidgin and slang
- Isolates the customer's offered price from the message
- Retrieves the merchant's hidden
min_floor_pricefrom PostgreSQL - Calculates a non-linear compromise counter-offer above the floor
$$\text{Counter Offer} = P_{\text{floor}} + \alpha \cdot (P_{\text{listed}} - P_{\text{floor}})$$
Where $\alpha \in [0.3,\ 0.6]$ is a dynamic coefficient adjusted based on negotiation round number and confidence in customer intent. For example, on a first haggling attempt with high confidence:
$$\alpha = 0.55 \Rightarrow \text{Counter} = 7{,}000 + 0.55 \times (8{,}500 - 7{,}000) = 7{,}000 + 825 = ₦7{,}825$$
On a second round with lower confidence, $\alpha$ decreases toward $0.3$, nudging the counter closer to the floor price without ever breaching it:
$$\alpha = 0.32 \Rightarrow \text{Counter} = 7{,}000 + 0.32 \times 1{,}500 = 7{,}000 + 480 = ₦7{,}480$$
The merchant's floor price is never exposed to the customer. Bizzy negotiates professionally within safe boundaries while the merchant focuses on fulfillment.
The Full Tech Stack
| Layer | Technology | Decision Rationale |
|---|---|---|
| AI / LLM | Gemini 2.5 Flash | Sub-500ms latency, native multimodal vision, structured JSON enforcement |
| Backend | FastAPI (Python) | Async performance, clean webhook handling, native Pydantic schemas |
| Database | PostgreSQL + SQLAlchemy | Relational integrity for multi-tenant merchant data and transaction ledgers |
| Session Store | Redis | Sub-millisecond conversation history and state retrieval |
| Messaging BSP | Africa's Talking | Localised African infrastructure, +234 number support, pay-as-you-go Naira billing |
| Dashboard | Next.js | Mobile-first merchant control panel, WhatsApp OTP authentication |
| Deployment | Render | Zero-downtime deploys, automatic SSL, GitHub integration |
📚 What We Learned
1. The Market Knows Best
The biggest product insight came from watching how Nigerian merchants actually communicate with customers. Our initial system prompts were too formal, too structured, too "chatbot-like." Real Nigerian market conversation flows differently — it's warm, casual, relationship-driven.
We had to rebuild the prompt engineering philosophy from scratch: Bizzy doesn't sound like a bot. It sounds like a helpful, knowledgeable shop assistant who knows your business inside out.
2. Cost Architecture Is a Product Decision
We initially underestimated how quickly LLM costs compound at conversational scale. A single merchant receiving 500 messages per day — many of which are just "okay", "thanks", or a thumbs-up emoji — would generate unsustainable API costs if every message hit Gemini.
Building the intent filter wasn't just an engineering optimisation. It was a business survival decision. The filter is what makes Bizzy's unit economics work.
3. The BSP Layer Is More Complex Than Expected
Navigating the WhatsApp Business API ecosystem — BSPs, Meta Business Verification, WABA registration, webhook configuration — was one of the steepest learning curves of the build. The documentation assumes a level of infrastructure that most African startups don't have on day one.
We eventually settled on Africa's Talking as our BSP specifically because they understand the Nigerian market, support +234 number registration, and operate on a pay-as-you-go model that eliminates heavy USD retainers.
4. Multi-Tenant Architecture Is a Day-One Decision
We almost made the mistake of building Bizzy as a single-merchant product and planning to "add multi-tenancy later." We course-corrected early enough: using the waNumber destination field as the universal lookup key was baked into the database schema from the very first model definitions.
Getting that right early meant the engine scales from 1 merchant to 10,000 merchants with zero architectural changes.
5. Gemini 2.5 Flash Is Genuinely Impressive at Structured Output and Latency
Enforcing strict JSON schema output from an LLM consistently — across colloquial Nigerian Pidgin, mixed-language inputs, and ambiguous market slang — was a non-trivial prompt engineering challenge.
Gemini 2.5 Flash handled it better than we expected. Its fast inference speed kept round-trip webhook response latency under 500ms, ensuring negotiation chats feel completely fluid.
🚧 Challenges We Faced
Challenge 1 — WhatsApp API Access and Meta Compliance
Getting approved for WhatsApp Business API access requires a verified Meta Business Account, CAC incorporation documents, and documented business legitimacy. As an early-stage Nigerian team, we incorporated Bizzy as a registered Nigerian business — CAC certified — specifically to meet Meta's business verification requirements. This is a step most hackathon teams building for African markets skip entirely, and it was non-negotiable for us to operate in production. Setting up business documentation and navigating Africa's Talking onboarding prerequisites was essential before production messages could be routed outside the sandbox.
Challenge 2 — Parsing Nigerian Market Language
Nigerian Pidgin is not a formally documented language with training datasets tailored for e-commerce NLP. Phrases like "I don sell 2 vintage shirt to Tunde", "abeg how much e cost?", and "e go reach my hand before tomorrow?" required careful prompt engineering to reliably parse into structured product actions.
We built an extensive examples library of real market conversation patterns and embedded them directly into Gemini's system prompt as few-shot examples.
Challenge 3 — Multi-Tenant Session Isolation
When hundreds of customers are simultaneously texting different merchants, Redis session management becomes critical. A session collision — where Bizzy loads the wrong merchant's context for an incoming message — would be catastrophic for merchant trust.
We solved this with a composite session key:
$$\text{session_key} = \texttt{waNumber} \mathbin{|} \texttt{phoneNumber}$$
For example:
$$\text{session_key} = \texttt{+2349010001111} \mathbin{|} \texttt{+2348012345678}$$
This guarantees complete isolation between every merchant-customer pair across the entire platform. No two sessions can ever share the same key regardless of message volume or concurrency.
Challenge 4 — Building for Zero Digital Literacy
The merchant onboarding flow had to be designed for someone who has never used a SaaS product, never created a business account on any platform, and has zero patience for technical friction.
The solution was radical simplicity: after a single web registration page to activate their number, every subsequent interaction happens entirely on WhatsApp. Catalog setup, product photo uploads, price changes, FAQ editing — all conversational. All on the app they already know.
## Challenges we ran into — Coordinated Frontend and Backend Execution
We built Bizzy's FastAPI engine, Gemini pipeline, Next.js merchant dashboard, and submission materials in parallel. Coordinating backend API routes with frontend interface — while maintaining architectural coherence — required clear documentation, shared JSON contracts, and disciplined scope management.
🎯 Impact and Vision
Bizzy's immediate target is the Nigerian SME market — but the architecture is designed for every African market where WhatsApp is the dominant commerce communication channel.
$$\text{Nigeria TAM} = 39{,}000{,}000 \text{ SMEs} \times \$2/\text{month} \approx \$78{,}000{,}000/\text{month}$$
At just 0.1% market penetration:
$$\text{Revenue} = 39{,}000 \text{ merchants} \times \$2/\text{month} = \$78{,}000/\text{month}$$
Accomplishments that we're proud of
Beyond Nigeria, the same model applies directly to Ghana, Kenya, Senegal, and any market where informal commerce runs on WhatsApp and merchants are underserved by existing software.
Bizzy is not a feature. It is infrastructure. The invisible backbone of African commerce — built on Gemini 2.5 Flash, running on WhatsApp, serving the merchants that power the continent's economy.
Built in Lagos & Abeokuta, Nigeria · Powered by Gemini 2.5 Flash · August 2026
Built With
- africa
- africastalking
- ai-agents
- computer-vision
- conversational-ai
- ecommerce
- fastapi
- fintech
- gemini-2-5-flash
- micro-saas
- multi-tenant
- nextjs
- nigeria
- paystack
- postgresql
- prompt-engineering
- pydantic
- python
- redis
- render
- smes
- sqlalchemy
- typescript
- whatsapp-api
Log in or sign up for Devpost to join the conversation.