The Problem That Nearly Killed The Idea
I'm an entrepreneur by heart. Every service I render needs to convey my professionalism and dedication. Fidbacc Invoice started as a side project. I needed invoices for my own work.
But here's the thing: I've always been uneasy about free and open-source invoice apps. Who owns my data? Where is my customer's information going? I've seen too many "free" tools that sell data to whoever pays a penny for it. The paid alternatives? They bundle features I don't need and charge prices I can't justify for my business need.
None of them offered what I actually wanted: generating invoices directly from WhatsApp. Not just web interfaces, not a mobile app, but on WhatsApp, where my customers and team already live.
So I built Fidbacc Invoice.
Why This Project Matters
Nigeria's Federal Inland Revenue Service (FIRS) is rolling out e-invoicing mandates. Enforcement is coming, and millions of entrepreneurs, market traders, and SMBs need compliant solutions. Fidbacc sits at that intersection. Helping everyday enterprenuer look professional while staying tax-compliant.
The product clicked. We gained traction across Nigeria, Ghana, Kenya, and even the UK. Handymen, social media traders, market women, people who don't have time to learn complex software.
And then the complaints started.
The Bottleneck: PDF Generation
"Why does it take so long to get my invoice?"
Our biggest churn driver wasn't missing features. It was speed. The PDF generator. The core of the entire product was too SLOW.
We were running on AWS Lightsail, a single instance with the invoice generation embedded in the app. Puppeteer rendered PDFs locally. It worked fine for 10 users. At 100 concurrent users? The server choked.
What We Tried First: S3 Caching
We implemented PDF mirroring to S3. Generate once, cache forever. Re-downloads pulled directly from S3.
It helped, repeat downloads were instant. But first-time generation? Still painfully slow. Market women don't wait. They move on. The bottleneck hinders further adoption and recurring use.
The Solution: AWS Lambda
We needed to decouple PDF generation from the main application. Lambda was the obvious choice:
- Scales to zero: No cost when idle
- Scales to infinity: 1000 concurrent invoices? No problem
- Pay per use: ~$2/month for 1000 PDFs vs $10-15/month for a dedicated server
The Architecture
Technical Implementation
The Lambda function uses:
- puppeteer-core with @sparticuz/chromium (headless Chrome optimised for Lambda)
- AWS SDK v3 for S3 uploads
- 3008 MB memory (Puppeteer needs room to breathe)
- 60-second timeout (generous, but we rarely hit 10 seconds)
Dual Response Strategy
Lambda has a 6MB response limit. Most invoices are 40-60KB, but large invoices with many items can exceed 5MB. We handle both:
| PDF Size | Strategy | Latency |
|---|---|---|
| ≤ 5MB | Return buffer directly in response | Fastest |
| > 5MB | Return S3 URL, backend fetches | +1s |
The Numbers
| Metric | Before (Lightsail) | After (Lambda) |
|---|---|---|
| Cold start | N/A (always running) | 3-5 seconds |
| Warm generation | 8-15 seconds | 1-2 seconds |
| Concurrent limit | ~10 users | Unlimited |
| Monthly cost | $10-15 fixed | ~$2 variable |
| Failure rate | High under load | Near zero |
Cold starts happen on first request or after 15+ minutes of inactivity. We mitigate this with CloudWatch Events pinging the function every 5 minutes during peak hours.
The Result
Our biggest churn reason became our best feature.
Users noticed immediately. New users were impressed. Existing users told their friends. The market woman who needs her invoice in seconds while juggling three customers? She gets it.
One Lego at a time.
What's Next: V2
The PDF generator was just the first piece. V2 is already in progress:
RAG-Powered Conversations
Currently using ChromaDB + Gemini for context-aware WhatsApp conversations. Each vendor gets personalised responses based on their history, products, and customers. Moving to Amazon Bedrock for better compliance, cost centralisation, and tighter AWS integration.
Voice Invoicing
Voice commands work, but transcription accuracy is a challenge. WhatsApp's built-in transcription struggles with Nigerian Pidgin English, local dialects, and modern slang. Nigeria has 500+ native languages, and people mix them freely.
Looking for recommendations: Cost-effective voice transcription that handles African accents and dialects. AWS Transcribe? Something else? If you've solved this, I'd love to learn.
FIRS Compliance
E-invoicing enforcement is coming. We're building compliant Invoice Reference Numbers (IRN), automated tax exports, and integration with Nigeria's tax authority systems.
Call to the Community
Fidbacc is a hobby project that became real. We're building this in public, learning as we go.
If you've tackled voice transcription for African/diverse languages, Bedrock Knowledge Bases vs self-managed RAG, WhatsApp Business API at scale, or e-invoicing compliance in emerging markets, I'd love to connect.
Let's build something that matters. One Lego at a time.
APP: Fidbacc Invoice

Top comments (0)