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>