Apartment rent in Accra made easy
# RentAgentGhana
Finding an apartment in Accra is harder than it should be. Renters chase agents across TikTok, WhatsApp, and word of mouth — repeating the same budget, room count, and move-in date to people who may not even cover their area.
**RentAgentGhana** solves that. Renters search by neighborhood, browse agents who serve that area (sorted by ratings), and unlock contacts + messaging with a weekly or monthly pass.
## Architecture
Monorepo with two apps:
| App | Stack | Role |
|-----|--------|------|
| `frontend/` | Next.js 15 (App Router) + Tailwind | Primary product UI |
| `python/` | Django 5 + DRF + SimpleJWT | API + `/admin/` |
```
Browser → Next.js (Vercel) → BFF + JWT → Django API (Render) → Postgres / Paystack / Arkesel
```
Django HTML templates remain in the repo for rollback, but the Next.js app is the primary UI. Optionally set `FRONTEND_URL` so operators know where the product lives; the Django root `/` health path is unchanged for Render.
## Local development
### 1. Django API
```powershell
cd python
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
docker compose up -d
copy .env.example .env
python manage.py migrate
python manage.py seed_agents
python manage.py dedupe_agents # safe if seed already produced same-name duplicates
python manage.py runserver
```
API health:
127.0.0.1
### 2. Next.js frontend
```powershell
cd frontend
copy .env.local.example .env.local
npm install
npm run dev
```
Open
localhost
### Environment
**Django** (`python/.env`):
| Variable | Purpose |
|----------|---------|
| `DATABASE_URL` | PostgreSQL connection |
| `FRONTEND_URL` | Next.js origin (CORS/CSRF), e.g. `
localhost` |
| `CORS_ALLOWED_ORIGINS` | Comma-separated allowed origins (no trailing slash) |
| `ARKESEL_API_KEY` | SMS for OTP |
| `SMS_ENABLED` | `False` logs SMS to console in development |
| `SITE_URL` | Public Django URL (webhooks, absolute media URLs) |
| `PAY …