Soko is an online marketplace for Rwanda and East Africa matching food harvests with market demands
# Agri Marketplace
> **Live app (GitHub Pages):**
phindagijimana.github.io
> **Not the live app:** the repository page **`
github.com`** is the *source code* and will always show this README when you are on that URL — that is not the hosted website.
Pilot-ready agricultural marketplace for Rwanda and East Africa. Guests can browse listings, while farmers and buyers must create phone-based profiles before posting harvest, placing orders, leaving reviews, or requesting verification.
## What is implemented
- Public browsing for listings and reviews
- Phone-based profile creation and OTP sign-in
- OTP expiry, cooldown, lockout, and token expiry
- Farmer-only listing creation
- Buyer-only order placement
- Farmer order status updates
- Review flow tied to completed orders
- Verification request workflow
- Admin review endpoints and metrics summary
- Support ticket workflow for disputes, abuse, bugs, and general issues
- Local or S3-compatible image storage (`STORAGE_BACKEND`)
- Audit logging, health checks, readiness checks, and in-memory rate limiting
- Navy blue and white frontend theme
## Still environment-specific (configure for production)
- **SMS:** Set `SMS_PROVIDER=twilio` with real `TWILIO_*` values (Account SID must start with `AC`). Until then, `file` / `console` or Twilio-with-placeholder creds log to `SMS_LOG_PATH`. Live delivery uses Twilio’s REST API (`httpx`).
- **Database:** `DATABASE_URL` (SQLite or PostgreSQL). With Docker, `CREATE_TABLES_ON_STARTUP=false` and run `alembic upgrade head` (see `backend/Dockerfile`).
- **Backups:** `python scripts/backup_database.py` (SQLite copy or `pg_dump`).
- **Object storage:** `STORAGE_BACKEND=local` (default) or `s3` with `S3_BUCKET_NAME`, `MEDIA_PUBLIC_BASE_URL`, and optional `AWS_ENDPOINT_URL` (MinIO). See `.env.example`.
- **Monitoring:** optional `SENTRY_DSN` (initializes `sentry-sdk` on startup). `/health` reports `sentry: true/false`.
- **HTTPS / TLS:** terminate a …