← Back to blog

2026-07-12 · 10 min read

Building WeFoundIt: A Full-Stack Lost & Found Platform for Cameroon

How I designed, built, and launched a production lost-and-found platform from scratch, FastAPI, Flutter, React, AWS, mobile money, solving a real problem in Cameroon.

#project#fastapi#flutter#aws#cameroon#startup#full-stack
Building WeFoundIt: A Full-Stack Lost & Found Platform for Cameroon

Building WeFoundIt: A Full-Stack Lost & Found Platform for Cameroon

Thousands of items, IDs, phones, wallets, documents, go unclaimed at police stations and bus parks across Cameroon every month. Losing a CNI (national ID card) is particularly painful: replacement takes months and costs money. There was no digital system connecting finders with owners. So I built one.

WeFoundIt is now live at wefoundit.space: a mobile-first platform with a Flutter app, a React web admin, and a FastAPI backend handling 107 endpoints. This is the story of how I designed and shipped it.

The Problem

  • 29 million people in Cameroon, 31.5 million mobile connections
  • Zero mobile-native lost-and-found apps serving the market
  • Police stations stockpile unclaimed items with no way to notify owners
  • Bus parks (Garantie Express, Finexs, Central Voyages) accumulate lost luggage daily
  • The only existing solution is a basic web-only platform with no matching, no notifications, no mobile app

Architecture

┌─────────────────────────────────────────────────────┐
│              Mobile App (Flutter/Dart)                │
│  Auth → Home (Feed/Search) → Chat → Payments         │
└───────────────────────┬─────────────────────────────┘
                        │ HTTPS
┌───────────────────────▼─────────────────────────────┐
│              API (FastAPI + PostgreSQL)               │
│  Auth │ Items │ Matching │ Chat │ Notifications      │
│  Payments │ Reputation │ Reports │ Admin             │
└───┬───────────┬─────────────────────┬───────────────┘
    │           │                     │
  PostgreSQL   Redis              Celery workers

The stack:

LayerChoiceWhy
MobileFlutter 3.19 + RiverpodCross-platform (iOS + Android) from one codebase
BackendFastAPI + SQLAlchemy 2.0 + Pydantic v2Async, type-safe, fast development
DatabasePostgreSQL 16Relational data (items, users, matches) with PostGIS potential
QueueRedis + CeleryBackground jobs (notifications, matching, cleanup)
PaymentsNkwa PayMTN MoMo + Orange Money (the payment rails Cameroonians actually use)
StorageAWS S3Item photos (presigned uploads from mobile)
HostingAWS EC2 + CaddyAuto-HTTPS, reverse proxy, simple and cheap (~$18/mo)

The Smart Matching Algorithm

The core value of the platform: when someone reports a found item, the system automatically searches for potential matches against all reported lost items.

Matching factors (weighted):

  • Category: phone, wallet, ID, bag, etc.
  • Colour: primary and secondary
  • Brand/model: exact or fuzzy match
  • Serial number / ID number: if available, this is a definitive match
  • Location radius: items found near where they were lost score higher
  • Time window: recent losses match more strongly

A match generates push notifications, SMS (for non-smartphone users via Africa's Talking), and in-app alerts. The owner and finder can then chat, arrange return, and settle a reward through mobile money, all in-app.

Revenue Model

This isn't a hobby project, it's designed to be self-sustaining:

  1. Commission: 15% of finder's reward on successful reunions
  2. ID Document Fee: 3,000 XAF per document returned (split with partner institutions)
  3. Boost listings: premium visibility for high-value items
  4. Institution subscriptions: monthly plans for police stations and bus parks

What I Built (Scope)

Backend (107 endpoints):

  • Full auth (JWT, refresh tokens, OTP verification, password reset)
  • Item CRUD with photo upload (S3 presigned URLs)
  • Matching engine (background Celery task)
  • Real-time chat (WebSocket)
  • Payment integration (Nkwa Pay callbacks)
  • Reputation/review system
  • Admin dashboard API (stats, moderation, user management)
  • Multi-role access (user, institution, admin, super_admin)
  • Rate limiting, CORS, security headers

Mobile App (Flutter, 149 files):

  • Onboarding flow
  • Report lost/found items (camera, gallery, location picker)
  • Feed + search with filters
  • Match notifications (push + in-app)
  • Chat with matched users
  • Payment flow (initiate reward via MoMo/Orange Money)
  • Profile, reputation, settings

Web App (React 19 + Vite, 31 pages):

  • Admin dashboard (stats, charts, user management)
  • Content moderation (flagged items, reports)
  • Institution portal (bulk upload, analytics)
  • User-facing web search

Deployment

Everything runs on a single AWS EC2 t3.small (~$18/month):

  • Docker Compose: API + Web + PostgreSQL + Redis + Celery
  • Caddy reverse proxy with automatic Let's Encrypt HTTPS
  • Daily automated backups to S3 (3 AM)
  • Terraform for infrastructure provisioning
  • Security: UFW firewall, DB bound to localhost, Redis password-protected, rate limiting

Lessons Learned

  1. Payment integration in Africa is hard. Mobile money APIs are poorly documented, have inconsistent webhooks, and testing in sandbox vs production behaves differently.

  2. Design for low bandwidth. Image compression, lazy loading, and offline-first patterns matter when your users are on 3G.

  3. Multi-language from day one. English-first with French localization, Cameroon is bilingual and you lose half your market without it.

  4. Institutions are the growth hack. One police station with 200 unclaimed items is worth more than 200 individual users. Partnership-first go-to-market.

  5. The matching algorithm is the moat. Anyone can build a listing site. The value is in automatically connecting the right people, that's what makes users come back.

What's Next

  • AI image matching (CLIP/MobileNet for visual similarity)
  • WhatsApp bot integration (most-used messaging app in Cameroon)
  • USSD interface for feature phones
  • Play Store launch (in review)
  • Partnership rollout with police stations in Yaoundé and Douala

Try It

This project demonstrates that you can build a real, production-grade SaaS from Cameroon, design the architecture, write the code, deploy to AWS, integrate local payment rails, and ship to real users. The same engineering skills that power my DevOps consulting work powered this product build.


WeFoundIt is built and operated by DG Enterprise. If you're interested in partnership (institutions, logistics, investment), reach out at team@wefoundit.space.

Share:LinkedInXWhatsApp

Related articles

Reactions & comments