- New "همه کاربران" page: searchable/paginated full user list with
block/unblock/report actions and report-count badges.
- User detail page gained block/unblock/report buttons, a report history
section, and a recent-activity panel (via the backend's per-user
monitoring filter).
- New "رفقا" page listing every match across the app.
- New "نظارت بر عکسها" page: grid of every uploaded photo with uploader
info and a delete action, for content review without going profile-by-profile.
New sidebar sections wired to the backend's new admin APIs:
- Monitoring: live request/error-rate/latency stats plus a recent-requests
table, polling every 8s.
- Backups: create/list/download database backups (auth'd blob download
since the endpoint requires a Bearer token, not a plain link).
The reject modal now offers 5 common rejection reasons as tickable
options (no photo, incomplete info, looks fake/bot, inappropriate
photos, contact info in profile), combined with an optional free-text
note. The combined string is sent as the existing reason field — no
backend change needed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Multi-stage Dockerfile producing a minimal runtime image via
next.config.ts's output:"standalone". NEXT_PUBLIC_API_URL is taken as
a build arg since it gets baked into the client bundle at build time.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Admin login, category/option and profile-question management, and
the pending-user review workflow (list, full profile detail,
approve/reject with a reason shown back to the user).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>