1. High-Level System Overview
Complete end-to-end architecture across all access channels
graph TB
subgraph CHANNELS["Access Channels"]
APP["Mobile App
(Flutter - iOS & Android)"]
USSD["USSD Gateway
Dedicated Short Code
Offline Access"]
WHATSAPP["WhatsApp Bot
Payment & Transfers"]
QR["QR Code Payments
Scan-to-Pay"]
WEB["Admin Dashboard
(React Web)"]
MERCHANT["Merchant Portal
(Future)"]
end
subgraph GATEWAY["API Gateway & Load Balancer"]
LB["Nginx / AWS ALB
SSL Termination
Rate Limiting"]
WAF["Web Application Firewall
DDoS Protection"]
end
subgraph CORE["Core Backend (Go / Gin)"]
AUTH["Auth Service
JWT + OTP + PIN + 2FA"]
TXN["Transaction Engine
Atomic Operations
Mutex Locking"]
WALLET["Wallet Service
Multi-currency
Fiat + Crypto"]
AGENT_SVC["Agent Service
Float Management
Commission Engine"]
CARD_SVC["Card Issuance
Virtual + Physical"]
IBAN_SVC["IBAN Service
International Transfers
SWIFT/SEPA"]
LOAN_SVC["Lending Engine
Credit Scoring
Loan Management"]
NOTIF_SVC["Notification Service
Push + SMS + Email"]
KYC_SVC["KYC/AML Engine
Identity Verification"]
ANALYTICS_SVC["Analytics Engine
Real-time Reporting"]
end
subgraph DATA["Data Layer"]
MYSQL[(MySQL Primary
100 conn pool)]
REDIS[(Redis Cache
Sessions + OTP + Rates)]
S3["Object Storage
KYC Docs + Avatars"]
end
subgraph EXTERNAL["External Service Providers"]
direction LR
MM["Mobile Money
M-Pesa, Airtel, Orange"]
BANK["Banking Rails
SWIFT, SEPA, Local Banks"]
CRYPTO_EX["Crypto Exchanges
Binance, Coinbase"]
CARD_NET["Card Networks
Visa, Mastercard"]
SMS_GW["SMS Gateway
Africa's Talking"]
EMAIL_SVC["Email Service
SendGrid"]
KYC_PRV["KYC Provider
Smile Identity"]
IBAN_PRV["IBAN Provider
Banking Circle / CurrencyCloud"]
WA_API["WhatsApp Business API
Meta Cloud API"]
USSD_GW["USSD Aggregator
Africa's Talking"]
end
APP -->|HTTPS + JWT| LB
USSD -->|USSD Protocol| USSD_GW
USSD_GW -->|HTTPS| LB
WHATSAPP -->|Webhook| WA_API
WA_API -->|HTTPS| LB
QR -->|Deep Link| APP
WEB -->|HTTPS + Admin JWT| LB
LB --> WAF --> CORE
CORE --> DATA
TXN --> MM
TXN --> BANK
IBAN_SVC --> IBAN_PRV
IBAN_SVC --> BANK
CARD_SVC --> CARD_NET
WALLET --> CRYPTO_EX
NOTIF_SVC --> SMS_GW
NOTIF_SVC --> EMAIL_SVC
KYC_SVC --> KYC_PRV
LOAN_SVC --> ANALYTICS_SVC
AUTH --> REDIS
style CHANNELS fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
style GATEWAY fill:#fce4ec,stroke:#c62828,stroke-width:2px
style CORE fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
style DATA fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
style EXTERNAL fill:#fff3e0,stroke:#e65100,stroke-width:2px
2. Technology Stack & Justification
Every technology choice and why it was selected
Go (Golang) — Backend
Compiled language with native concurrency (goroutines), ideal for financial transaction processing. Handles 100K+ concurrent connections. Used by Monzo, Nubank, and Paystack.
Gin FrameworkGORM ORMJWT Auth
Flutter — Mobile App
Single codebase for iOS and Android. 120fps rendering. Used by Nubank (150M+ users), Google Pay, Alibaba. Reduces development cost by 40% vs native.
DartMaterial Design40+ Screens
React — Admin Dashboard
Industry standard for web admin panels. Component-based architecture with TypeScript for type safety. Real-time data visualization with Recharts.
TypeScriptReact RouterRecharts
MySQL — Primary Database
ACID-compliant relational database. Proven at scale (Facebook, Uber, Netflix). Connection pooling with 100 max concurrent connections. Supports row-level locking for financial transactions.
InnoDBConnection PoolAuto-Migration
Redis — Cache & Sessions
In-memory data store for OTP codes (with TTL expiry), session tokens, exchange rate caching, and rate limiting. Sub-millisecond response times.
OTP CacheRate LimitingSession Store
Nginx — API Gateway
Reverse proxy with SSL termination, load balancing, request rate limiting, and WebSocket support for real-time features.
SSL/TLSLoad BalancerRate Limit
3. Access Channels
Seven ways users interact with Money+ Congo
graph LR
subgraph MOBILE["Mobile App (Primary)"]
FLUTTER["Flutter App
iOS + Android
40+ screens
Full feature set"]
end
subgraph USSD_CH["USSD Channel"]
USSD_FLOW["Dedicated Short Code
Works on any phone
No internet required
Menu-based navigation"]
end
subgraph WA_CH["WhatsApp Bot"]
WA_FLOW["WhatsApp Business API
Send/Receive money
Check balance
Pay bills via chat"]
end
subgraph QR_CH["QR Code Payments"]
QR_FLOW["Dynamic QR Generation
Merchant scan-to-pay
P2P payments
Amount pre-filled"]
end
subgraph WEB_CH["Web Admin"]
WEB_FLOW["React Dashboard
User management
Agent monitoring
KYC review"]
end
subgraph API_CH["Developer API"]
API_FLOW["RESTful API
Merchant integration
Payment gateway
Webhooks"]
end
subgraph AGENT_CH["Agent Network"]
AGENT_FLOW["Agent App (Flutter)
Cash-in / Cash-out
Float management
Commission tracking"]
end
FLUTTER --> CORE((Core API))
USSD_FLOW --> CORE
WA_FLOW --> CORE
QR_FLOW --> FLUTTER
WEB_FLOW --> CORE
API_FLOW --> CORE
AGENT_FLOW --> CORE
style MOBILE fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
style USSD_CH fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
style WA_CH fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
style QR_CH fill:#fff3e0,stroke:#e65100,stroke-width:2px
style WEB_CH fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
style API_CH fill:#fce4ec,stroke:#c62828,stroke-width:2px
style AGENT_CH fill:#fff3e0,stroke:#e65100,stroke-width:2px
USSD Architecture
flowchart LR
PHONE["Any Phone
(No internet needed)"] -->|"Dial USSD Code"| TELCO["Telco Network
(Vodacom/Airtel/Orange)"]
TELCO -->|"USSD Session"| AGG["USSD Aggregator
(Africa's Talking)"]
AGG -->|"HTTP Callback"| API["Money+ API Server"]
API -->|"Menu Response"| AGG
AGG -->|"USSD Response"| PHONE
subgraph USSD_MENUS["USSD Menu Tree"]
M1["1. Send Money"]
M2["2. Check Balance"]
M3["3. Buy Airtime"]
M4["4. Pay Bills"]
M5["5. Withdraw"]
M6["6. Mini Statement"]
M7["7. Request Loan"]
end
WhatsApp Bot Architecture
flowchart LR
USER["User on WhatsApp"] -->|"Message"| META["Meta WhatsApp
Business API"]
META -->|"Webhook POST"| BOT["Money+ Bot Server
(Go microservice)"]
BOT -->|"Process Command"| CORE["Core Transaction API"]
CORE -->|"Result"| BOT
BOT -->|"Reply Message"| META
META -->|"Deliver"| USER
subgraph COMMANDS["Bot Commands"]
C1["'send 5000 to +243...' → Transfer"]
C2["'balance' → Check Balance"]
C3["'topup 2000' → Buy Airtime"]
C4["'pay SNEL 12345' → Bill Payment"]
C5["'loan 50000' → Loan Application"]
C6["'statement' → Mini Statement"]
end
QR Code Payment Flow
flowchart LR
MERCHANT["Merchant displays
QR Code"] -->|"Customer scans"| APP["Money+ App
Camera/Scanner"]
APP -->|"Decode QR payload"| PARSE["Parse: merchant_id
amount, currency, ref"]
PARSE -->|"Show confirmation"| CONFIRM["Confirm Payment
Enter PIN"]
CONFIRM -->|"POST /api/v1/send"| API["Core API
Process Payment"]
API -->|"Notification"| MERCHANT
API -->|"Receipt"| APP
subgraph QR_TYPES["QR Code Types"]
STATIC["Static QR
Fixed merchant ID
Customer enters amount"]
DYNAMIC["Dynamic QR
Pre-filled amount
One-time use"]
P2P_QR["P2P QR
User-to-user
Share payment link"]
end
4. API Architecture
RESTful API v1 — 55+ endpoints across 15 resource groups
| Group | Endpoints | Auth | Description |
| Auth | register, login, verify-otp, forgot-password, reset-password | Public | User registration, authentication, password recovery |
| Profile | GET/PUT profile, change-password, GET/PUT preferences | JWT | User profile management and preferences |
| PIN | set, verify, change, status | JWT | Transaction PIN management (bcrypt hashed) |
| Security | GET/PUT security, sessions, signout-all | JWT | 2FA, biometrics, login alerts, session management |
| KYC | POST kyc, GET status | JWT | Identity verification submission and tracking |
| Wallets | GET wallets | JWT | Multi-currency wallet management (fiat + crypto) |
| Transactions | send, deposit, withdraw, GET list, GET filtered | JWT + PIN | Core money movement with atomic DB operations |
| IBAN | create-iban, international-transfer, incoming-webhook | JWT + PIN | International bank transfers via SWIFT/SEPA |
| Services | topup, pay-bill, internet bundles | JWT | Airtime, data, utility bill payments |
| Crypto | buy, sell, send, swap, portfolio, prices | JWT + PIN | Cryptocurrency trading and management |
| Cards | CRUD cards, update controls | JWT | Virtual and physical card issuance |
| Contacts | CRUD contacts, favorites, recent | JWT | Saved beneficiaries |
| Splits | CRUD splits, settle member | JWT | Group expense splitting |
| Loans | apply, status, repay, history, eligibility | JWT + KYC | Loan applications and repayment |
| Agent | dashboard, cash-in, cash-out, float, commissions | JWT + Agent Role | Agent-specific operations |
| Admin | 25+ endpoints for user/agent/KYC/txn management | Admin JWT | Back-office operations |
5. Data Model & Database Design
22 tables with relationships, indexing, and soft deletes
erDiagram
User ||--o{ Wallet : has
User ||--o{ Transaction : sends
User ||--o{ Transaction : receives
User ||--o{ Card : owns
User ||--o{ Contact : saves
User ||--o{ Notification : receives
User ||--|| TransactionPIN : secures
User ||--|| KYCSubmission : verifies
User ||--|| SecuritySettings : configures
User ||--|| NotificationSettings : configures
User ||--|| UserPreferences : sets
User ||--|| Budget : defines
User ||--o{ UserSession : logs
User ||--o{ CryptoHolding : holds
User ||--o{ ChatMessage : chats
User ||--o{ PaymentRequest : creates
User ||--o| AgentFloat : manages
User ||--o{ AgentCommission : earns
User ||--o| IBAN : assigned
User ||--o{ Loan : applies
SplitPayment ||--o{ SplitMember : includes
AdminUser ||--o{ AuditLog : creates
User {
uint id PK
string name
string email UK
string phone UK
string password_hash
string country
string role "user | agent"
bool kyc_verified
string iban
}
Wallet {
uint id PK
uint user_id FK
string currency "CDF | USD | EUR"
float balance
string type "fiat | crypto"
}
Transaction {
uint id PK
uint sender_id FK
uint receiver_id FK
float amount
float fee
string type "send | deposit | withdraw | cash_in | cash_out"
string status "pending | completed | failed"
string reference UK
}
Loan {
uint id PK
uint user_id FK
float amount
float interest_rate
int term_months
float monthly_payment
string status "pending | approved | active | repaid | defaulted"
}
IBAN {
uint id PK
uint user_id FK
string iban_number UK
string bic
string currency
string provider "banking_circle | currencycloud"
}
Key Design Decisions: All financial amounts stored as DECIMAL(18,2). Soft deletes on user-facing records. Unique indexes on email, phone, card_number, IBAN, and transaction references. Per-wallet mutex locking for concurrent balance updates. All passwords and PINs bcrypt hashed.
6. Security Architecture
Multi-layered security at every level
flowchart TB
subgraph L1["Layer 1: Network"]
WAF["WAF - DDoS Protection"]
SSL["TLS 1.3 Encryption"]
RATE["Rate Limiting
100 req/min per IP"]
end
subgraph L2["Layer 2: Authentication"]
JWT_AUTH["JWT Tokens
72-hour expiry"]
OTP_2FA["OTP via SMS/Email
6-digit, 10-min expiry"]
BIO["Biometric Auth
Face ID / Fingerprint"]
end
subgraph L3["Layer 3: Authorization"]
ROLE["Role-Based Access
user | agent | admin"]
PIN_V["Transaction PIN
4-digit, bcrypt hashed
Required before every txn"]
GUARD["Route Guards
AgentOnly / AdminRequired"]
end
subgraph L4["Layer 4: Data"]
BCRYPT["bcrypt Password Hashing
Cost factor: 10"]
ENCRYPT["AES-256 Encryption
Sensitive fields at rest"]
AUDIT["Full Audit Trail
Admin action logging"]
end
subgraph L5["Layer 5: Compliance"]
KYC_AML["KYC/AML Verification
Smile Identity"]
TXN_MON["Transaction Monitoring
Chainalysis"]
SANCTIONS["Sanctions Screening
PEP / OFAC lists"]
LIMITS["Transfer Limits
Daily: 5M CDF
Single: 1M CDF"]
end
L1 --> L2 --> L3 --> L4 --> L5
style L1 fill:#fce4ec,stroke:#c62828,stroke-width:1px
style L2 fill:#fff3e0,stroke:#e65100,stroke-width:1px
style L3 fill:#e3f2fd,stroke:#1565c0,stroke-width:1px
style L4 fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px
style L5 fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1px
7. Payment Rails & IBAN Infrastructure
How money moves — domestically and internationally
graph TB
subgraph DOMESTIC["Domestic Payments (DRC)"]
MM_MPESA["Vodacom M-Pesa
STK Push / B2C / C2B"]
MM_AIRTEL["Airtel Money
Collection & Disbursement"]
MM_ORANGE["Orange Money
Payment API"]
MM_AFRICELL["Africell Money"]
LOCAL_BANK["Local Banks
Rawbank, TMB, Equity
Account-to-account"]
AGENT_NET["Agent Network
10,000+ Cash Points
Cash-in / Cash-out"]
end
subgraph IBAN_SYS["IBAN & International Transfers"]
IBAN_ISSUE["IBAN Issuance
Each user gets a unique IBAN
via Banking Circle / CurrencyCloud"]
SEPA["SEPA Transfers
EUR zone, 0-2 days
Low cost"]
SWIFT_NET["SWIFT Network
Global coverage
1-5 business days"]
CORRESPONDENT["Correspondent Banks
USD nostro/vostro accounts"]
end
subgraph CARD_PAY["Card Payments"]
VISA["Visa Network
Card issuance + processing"]
MC["Mastercard Network
Card issuance + processing"]
THREE_DS["3D Secure
Transaction verification"]
end
subgraph QR_PAY["QR Payments"]
STATIC_QR["Static Merchant QR
Printed at POS"]
DYNAMIC_QR["Dynamic QR
Generated per transaction"]
NFC["NFC Tap-to-Pay
(Future)"]
end
USER((User)) --> DOMESTIC
USER --> IBAN_SYS
USER --> CARD_PAY
USER --> QR_PAY
IBAN_ISSUE -->|"Receive international
wire transfers"| SWIFT_NET
IBAN_ISSUE -->|"Receive EUR
transfers"| SEPA
SWIFT_NET --> CORRESPONDENT
style DOMESTIC fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px
style IBAN_SYS fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
style CARD_PAY fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1px
style QR_PAY fill:#fff3e0,stroke:#e65100,stroke-width:1px
IBAN Architecture
How IBANs Work: Each verified user receives a personal IBAN (International Bank Account Number) issued through a banking-as-a-service provider (Banking Circle or CurrencyCloud). This IBAN allows users to receive international wire transfers (SWIFT) and EUR transfers (SEPA) directly into their Money+ wallet — just like Revolut, Wise, or N26. Incoming funds are automatically converted to the user's preferred currency at competitive FX rates.
| Feature | Implementation | Provider |
| IBAN Issuance | Unique IBAN per KYC-verified user (e.g., CD12 MPLUS 0001 2345 6789) | Banking Circle / CurrencyCloud |
| SEPA Incoming | Receive EUR from any EU bank account, 0-2 day settlement | Banking Circle SEPA Access |
| SWIFT Incoming | Receive USD/EUR/GBP from any bank worldwide | Correspondent Banking Network |
| SWIFT Outgoing | Send to any bank account globally using IBAN/BIC | SWIFT gpi (Global Payments Innovation) |
| FX Conversion | Auto-convert incoming foreign currency to CDF at market rate | Open Exchange Rates + markup |
| Diaspora Remittance | Congolese abroad send EUR/USD to family's Money+ IBAN | SWIFT + SEPA rails |
8. Agent Network Architecture
The cash-to-digital bridge — modeled on M-Pesa's agent system
Cash-In (Deposit)
Customer hands physical cash to agent. Agent's e-money float decreases, cash float increases. Customer's wallet is credited instantly.
0.5% Commission
Cash-Out (Withdrawal)
Customer requests withdrawal. Agent's cash float decreases, e-money float increases. Customer receives physical cash.
0.5% Commission
Float Management
Agents maintain dual float: physical cash + e-money balance. Starting float: 500,000 CDF each. Rebalancing via bank deposit or super-agent network.
Real-time Tracking
Commission Engine
Automatic 0.5% commission per transaction. Daily/monthly reporting. Commission payouts to agent wallet. Tiered rates for high-volume agents.
Auto-calculated
9. Crypto & Digital Assets Architecture
Buy, sell, send, swap, and hold cryptocurrencies
| Asset | Buy | Sell | Send | Swap | Exchange Provider |
| BTC Bitcoin | Yes | Yes | Yes | Yes | Binance / Coinbase |
| ETH Ethereum | Yes | Yes | Yes | Yes | Binance / Coinbase |
| USDT Tether | Yes | Yes | Yes | Yes | Binance |
| BNB Binance Coin | Yes | Yes | No | Yes | Binance |
| SOL Solana | Yes | Yes | Yes | Yes | Coinbase |
| XRP Ripple | Yes | Yes | Yes | Yes | Binance |
10. Loan & Credit Architecture
Micro-lending powered by transaction history and credit scoring
flowchart TD
APPLY([User Applies for Loan]) --> ELIGIBLE{"Eligibility Check
- KYC verified?
- Account age > 30 days?
- Transaction history?
- No active defaults?"}
ELIGIBLE -->|Fail| DENIED["Application Denied
Show reason + retry date"]
ELIGIBLE -->|Pass| SCORE["Credit Scoring Engine"]
subgraph SCORING["Credit Scoring Model"]
S1["Transaction Frequency
Weight: 25%"]
S2["Average Balance
Weight: 20%"]
S3["Income Regularity
Weight: 20%"]
S4["Repayment History
Weight: 25%"]
S5["Account Age
Weight: 10%"]
end
SCORE --> SCORING
SCORING --> CREDIT_SCORE["Credit Score: 0-1000"]
CREDIT_SCORE --> OFFER["Generate Loan Offer
Amount: up to 3x avg monthly income
Interest: 5-15% per month
Term: 7-90 days"]
OFFER --> ACCEPT{User Accepts?}
ACCEPT -->|No| CANCEL[Application Cancelled]
ACCEPT -->|Yes| DISBURSE["Instant Disbursement
Credit user's M+ Wallet"]
DISBURSE --> REPAY_SCHED["Repayment Schedule
Auto-deduct from wallet
SMS reminders"]
REPAY_SCHED --> REPAID{Fully Repaid?}
REPAID -->|Yes| SCORE_UP["Improve Credit Score
Unlock higher limits"]
REPAID -->|No, Overdue| COLLECT["Collection Process
SMS reminders → Restrict withdrawals
→ Report to credit bureau"]
style SCORING fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1px
| Loan Product | Amount Range | Interest | Term | Requirements |
| Nano Loan | 1,000 - 10,000 CDF | 5% flat | 7 days | Active account, min 5 transactions |
| Micro Loan | 10,000 - 100,000 CDF | 8% flat | 14-30 days | KYC verified, 30+ day account |
| Personal Loan | 100,000 - 1,000,000 CDF | 10-15%/month | 30-90 days | Full KYC, income proof, credit score 600+ |
| Agent Float Loan | 500,000 - 5,000,000 CDF | 8%/month | 30 days | Agent role, 60+ day history, good float utilization |
Regulatory Note: Micro-lending in DRC requires authorization from the Central Bank of Congo (BCC). Interest rate caps and consumer protection rules apply. All loan products must be registered with the BCC before launch.
11. Concurrency & Scalability Architecture
Handling thousands of concurrent transactions safely
flowchart TB
subgraph CONCURRENT["Concurrent Requests"]
R1["User A: Send 5000 CDF"]
R2["User B: Withdraw 3000 CDF"]
R3["Agent C: Cash-In 10000 CDF"]
R4["User D: Buy BTC"]
R5["USSD: Check Balance"]
R6["WhatsApp: Pay Bill"]
end
R1 & R2 & R3 & R4 & R5 & R6 --> GIN["Gin HTTP Server
1 goroutine per request
Zero-allocation router"]
GIN --> POOL["MySQL Connection Pool
Max Open: 100
Max Idle: 25
Lifetime: 5 min"]
subgraph LOCKING["Balance Protection"]
MUTEX["sync.Map per-wallet Mutex
Prevents double-spend"]
DEADLOCK["Deadlock Prevention:
Always lock lower wallet ID first"]
ATOMIC["Atomic SQL Updates:
SET balance = balance - ?
(not read-modify-write)"]
GORM_TX["GORM Transaction:
Begin → Debit → Credit → Commit
Auto-rollback on failure"]
end
POOL --> LOCKING
subgraph SCALE["Horizontal Scaling"]
LB2["Load Balancer"]
S1["Server 1"]
S2["Server 2"]
S3["Server N"]
REDIS2["Redis (shared state)
Distributed locks
Session store"]
end
LB2 --> S1 & S2 & S3
S1 & S2 & S3 --> REDIS2
style CONCURRENT fill:#e3f2fd,stroke:#1565c0,stroke-width:1px
style LOCKING fill:#fce4ec,stroke:#c62828,stroke-width:1px
style SCALE fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px
12. Infrastructure & Deployment
Cloud-native deployment with CI/CD
graph TB
subgraph CI_CD["CI/CD Pipeline"]
GIT["GitHub Repository"] --> GH_ACTIONS["GitHub Actions"]
GH_ACTIONS --> TEST["Run Tests
Unit + Integration"]
TEST --> BUILD["Build Docker Images"]
BUILD --> PUSH["Push to Container Registry"]
end
subgraph PROD["Production (AWS / Azure)"]
ALB["Application Load Balancer
+ WAF + SSL"]
ECS1["Go API Server
(Container x3)"]
ECS2["WhatsApp Bot
(Container x1)"]
ECS3["USSD Handler
(Container x1)"]
RDS["MySQL RDS
Multi-AZ Replica"]
ELASTI["Redis ElastiCache
Cluster Mode"]
S3_STORE["S3 Bucket
KYC Documents"]
CLOUDFRONT["CloudFront CDN
Admin Dashboard"]
end
PUSH --> ALB
ALB --> ECS1 & ECS2 & ECS3
ECS1 --> RDS
ECS1 --> ELASTI
ECS1 --> S3_STORE
CLOUDFRONT --> WEB_APP["React Admin App"]
subgraph MONITORING["Monitoring & Observability"]
CW["CloudWatch Metrics"]
SENTRY["Sentry Error Tracking"]
GRAFANA["Grafana Dashboards"]
PAGER["PagerDuty Alerts"]
end
ECS1 --> CW & SENTRY
CW --> GRAFANA --> PAGER
style CI_CD fill:#e3f2fd,stroke:#1565c0,stroke-width:1px
style PROD fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
style MONITORING fill:#fff3e0,stroke:#e65100,stroke-width:1px
13. Compliance & Regulatory Framework
Regulatory requirements for operating in the DRC and East Africa
| Requirement | Authority | Status | Implementation |
| Payment Service Provider License | Banque Centrale du Congo (BCC) | Required | Application via BCC portal, capital requirements |
| Electronic Money Institution License | BCC | Required | For wallet issuance and float management |
| KYC / Customer Due Diligence | BCC / FATF | Implemented | 3-step KYC: personal info + ID document + selfie (Smile Identity) |
| AML / CFT Compliance | CENAREF (DRC FIU) | Implemented | Transaction monitoring, suspicious activity reporting, sanctions screening |
| Data Protection | DRC Constitution Art. 31 | Implemented | Encryption at rest + transit, data minimization, user consent |
| Crypto Asset Regulation | BCC (evolving) | Monitoring | Compliance-ready architecture, can disable crypto module via admin settings |
| Consumer Credit License | BCC | Required for lending | Interest rate caps, cooling-off period, transparent fee disclosure |
| Cross-border Transfer License | BCC / SWIFT | Required for IBAN | Correspondent banking relationships, SWIFT membership or BaaS partnership |
| USSD Short Code Registration | ARPTC (Telecom regulator) | Required | Register dedicated USSD short code with ARPTC, agreements with each telco |
14. Technical Roadmap
Four-phase deployment strategy
Phase 1 — MVP Launch (Q3 2026)
- M-Pesa + Airtel Money integration
- SMS OTP (Africa's Talking)
- KYC (Smile Identity)
- P2P transfers + agent cash-in/out
- Airtime top-up
- USSD short code registration + basic menu
- Admin dashboard live
Phase 2 — Expansion (Q4 2026)
- Orange Money + Africell
- Virtual card issuance (Visa)
- WhatsApp bot payments
- QR code merchant payments
- Bill payments (SNEL, Regideso)
- Push notifications (Firebase)
- Email service (SendGrid)
Phase 3 — Financial Products (Q1 2027)
- IBAN issuance (Banking Circle)
- SWIFT/SEPA international transfers
- Crypto trading (Binance API)
- Nano & micro loan products
- Credit scoring engine
- Physical card shipping
- Multi-country: Kenya, Tanzania
Phase 4 — Scale (Q2-Q4 2027)
- Full SWIFT membership
- Business/merchant accounts
- Insurance products
- Savings & investment products
- Open banking API (developer portal)
- 10+ African country expansion
- 1M+ user target
External API Provider Map
All 19+ external service integrations
| Category | Provider | Purpose | Phase |
| Mobile Money | Vodacom M-Pesa | STK Push, B2C, C2B payments | Phase 1 |
| Airtel Money | Collection & disbursement | Phase 1 |
| Orange Money | Payment API | Phase 2 |
| Africell Money | Top-up & transfer | Phase 2 |
| Banking | Banking Circle / CurrencyCloud | IBAN issuance, SEPA access | Phase 3 |
| SWIFT Network | International wire transfers | Phase 3 |
| Rawbank / TMB / Equity | Local bank account API | Phase 2 |
| Card Networks | Visa | Virtual + physical card issuance | Phase 2 |
| Mastercard | Card processing, 3D Secure | Phase 3 |
| Crypto | Binance API | Trading engine, prices, order execution | Phase 3 |
| Coinbase API | Fiat on/off ramp | Phase 4 |
| Communication | Africa's Talking | SMS OTP, USSD gateway, airtime | Phase 1 |
| SendGrid | Transactional email | Phase 2 |
| Push | Firebase FCM | Push notifications | Phase 2 |
| WhatsApp | Meta Cloud API | WhatsApp Business bot for payments | Phase 2 |
| Identity | Smile Identity | KYC document + face verification (Africa-focused) | Phase 1 |
| Compliance | Chainalysis | AML transaction monitoring | Phase 3 |
| FX Rates | Open Exchange Rates | Live forex rates (CDF, USD, EUR, etc.) | Phase 1 |
| Crypto Prices | CoinGecko API | Real-time crypto pricing | Phase 3 |