Automated B2B payment verification & real-time reconciliation platform for Ethiopian merchants. Integrates Telebirr, CBE Birr, Chapa, and SantimPay with instant Telegram cashier alerts and daily ledger exports.
# Recco ET
B2B Payment Verification & Reconciliation SaaS for the Ethiopian market.
Connects Telebirr, CBE Birr, Chapa, and SantimPay to merchants — verifies
transactions in real time (anti fake-SMS/screenshot fraud), auto-reconciles
daily sales at 18:00 Africa/Addis_Ababa, and alerts cashiers via Telegram.
## Architecture
```
/
├── apps/
│ ├── api/ # FastAPI backend (asyncpg, Redis, Celery, Alembic)
│ ├── web/ # Next.js merchant dashboard
│ └── telegram_bot/ # Cashier alert bot (/check TX_ID)
├── nginx/ # Reverse proxy + rate limits
├── docker-compose.yml
└── README.md
```
## Stack
| Layer | Technology |
|-------|------------|
| API | FastAPI + SQLAlchemy 2 (async) + Alembic |
| DB | PostgreSQL 16 |
| Cache / Queue | Redis 7 + Celery |
| Dashboard | Next.js (App Router) + TypeScript + Tailwind |
| Alerts | python-telegram-bot |
| Proxy | NGINX |
## Quick start
```bash
# 1. Copy the sandbox env (mock gateway credentials, safe to run locally)
cp .env.sandbox .env
# 2. Start the stack
docker compose up --build
# Services
# API docs (debug):
localhost
# Dashboard:
localhost
# Telegram bot: docker compose --profile telegram up
# NGINX proxy: docker compose --profile proxy up
```
Host ports are configurable (`POSTGRES_HOST_PORT`, `REDIS_HOST_PORT`,
`API_HOST_PORT`, `WEB_HOST_PORT`, `NGINX_HOST_PORT`) so the stack can coexist
with other local projects. Set `TELEGRAM_BOT_TOKEN` before the bot is useful.
### Dashboard outside Docker
```bash
cd apps/web
npm install
cp .env.example .env.local # then fill in the two values
npm run dev
```
`.env.local` needs the API base URL and the merchant to display:
| Variable | Notes |
|----------|-------|
| `RECCO_API_URL` | Backend base URL, e.g. `
localhost` — match `API_HOST_PORT` |
| `RECCO_MERCHANT_ID` | Any merchant `id`; stands in for the session until auth lands |
Create a merchant to point i …