A dating app for African users with mobile money and card payment support.
FlutterFlow projects are built to run on the Flutter stable release.
The app uses PawaPay for Mobile Money payments, supporting 25+ African countries.
PawaPay supports the following countries and providers:
| Country | Providers |
|---|---|
| Benin | MTN |
| Burkina Faso | Orange |
| Cameroon | MTN, Orange |
| Congo Brazzaville | MTN |
| Ivory Coast | MTN, Orange, Moov, Wave |
| DRC | Airtel, Orange, Vodacom |
| Ghana | MTN, Vodafone, AirtelTigo |
| Guinea | MTN |
| Kenya | M-Pesa |
| Malawi | TNM, Airtel |
| Mozambique | Vodacom, M-Pesa |
| Nigeria | OPay |
| Rwanda | MTN |
| Senegal | Orange, Free, Wave |
| Sierra Leone | Orange |
| Tanzania | Vodacom, Airtel, Tigo, Halotel |
| Uganda | MTN, Airtel |
| Zambia | MTN, Airtel |
| Zimbabwe | EcoCash |
- Sign up at PawaPay Dashboard
- Complete business verification
- Get your API token from the dashboard
# Enable Secret Manager API
gcloud services enable secretmanager.googleapis.com
# Create the secret
echo -n "YOUR_PAWAPAY_API_TOKEN" | gcloud secrets create PAWAPAY_API_TOKEN --data-file=-
# Grant Cloud Functions access
gcloud secrets add-iam-policy-binding PAWAPAY_API_TOKEN \
--member="serviceAccount:YOUR_PROJECT_ID@appspot.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"cd firebase/functions
npm install
firebase deploy --only functionsfirebase deploy --only firestore:rulesPush notifications are sent when users receive new direct messages.
- FCM is already configured in the Cloud Functions
- The app automatically registers FCM tokens on user login
- Notifications are sent via the
onNewMessageCloud Function
Android (android/app/src/main/AndroidManifest.xml):
POST_NOTIFICATIONS(Android 13+)
iOS (ios/Runner/Info.plist):
- Push notification capability enabled in Xcode
lib/
├── auth/ # Firebase authentication
├── backend/ # Firebase/Firestore schemas
├── chats/ # Chat screens and components
├── home/ # Home screen, swiper, filters
├── matches/ # Matches list and user profiles
├── profile/ # User profile screens
├── register/ # Sign up and onboarding
├── services/ # Business logic services
│ ├── pawapay_service.dart # PawaPay API calls
│ └── push_notification_service.dart
├── settings/ # Settings screens
│ ├── subscription/ # Subscription plans
│ └── pawapay_payment_dialog/ # Payment UI
└── flutter_flow/ # UI utilities and theme
firebase/
├── functions/
│ └── index.js # Cloud Functions (payments, notifications)
└── firestore.rules # Security rules
| Variable | Description | Where to Set |
|---|---|---|
PAWAPAY_API_TOKEN |
PawaPay API token | Google Secret Manager |
- Use PawaPay sandbox credentials for testing
- Test phone numbers are provided in PawaPay docs
The Cloud Functions are configured to use Google Cloud Secret Manager to securely store the PawaPay API token.
- Go to Google Cloud Console - Secret Manager
- Select your Firebase project
- Click "Create Secret"
- Set the name to:
PAWAPAY_API_TOKEN - Paste your PawaPay API token as the secret value
- Click "Create"
Then grant access to Cloud Functions:
- Click on the secret
PAWAPAY_API_TOKEN - Go to "Permissions" tab
- Click "Grant Access"
- Add principal:
YOUR_PROJECT_ID@appspot.gserviceaccount.com - Select role: "Secret Manager Secret Accessor"
- Save
If Secret Manager isn't available, you can use Firebase Functions config:
firebase functions:config:set pawapay.api_token="YOUR_PAWAPAY_API_TOKEN"
firebase deploy --only functions- Regenerate your PawaPay API token from the PawaPay dashboard (if it was exposed)
- Deploy the Cloud Functions:
firebase deploy --only functions - Test a payment in the app