137 lines
4.3 KiB
Markdown
137 lines
4.3 KiB
Markdown
# Sojorn Admin Panel
|
|
|
|
Secure administration frontend for the Sojorn social network platform.
|
|
|
|
## Features
|
|
|
|
- **Dashboard** — Real-time platform stats, user/post growth charts, quick actions
|
|
- **User Management** — Search, view, suspend, ban, verify, change roles, reset strikes
|
|
- **Post Management** — Browse, search, flag, remove, restore, view details
|
|
- **AI Moderation Queue** — Review AI-flagged content (OpenAI + Google Vision), approve/dismiss/remove/ban
|
|
- **Appeal System** — Full appeal workflow: review violations, approve/reject appeals, restore content
|
|
- **Reports** — Community reports management with action/dismiss workflow
|
|
- **Algorithm Settings** — Configure feed ranking weights and AI moderation thresholds
|
|
- **Categories** — Create, edit, manage content categories
|
|
- **System Health** — Database status, connection pool monitoring, audit log
|
|
|
|
## Tech Stack
|
|
|
|
- **Framework**: Next.js 14 (App Router)
|
|
- **Language**: TypeScript
|
|
- **Styling**: TailwindCSS
|
|
- **Charts**: Recharts
|
|
- **Icons**: Lucide React
|
|
- **Backend**: Go (Gin) REST API at `api.sojorn.net`
|
|
|
|
## Setup
|
|
|
|
```bash
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Configure API endpoint
|
|
cp .env.local.example .env.local
|
|
# Edit NEXT_PUBLIC_API_URL if needed
|
|
|
|
# Run development server
|
|
npm run dev
|
|
```
|
|
|
|
The admin panel runs on **port 3001** by default.
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `NEXT_PUBLIC_API_URL` | `https://api.sojorn.net` | Backend API base URL |
|
|
|
|
## Authentication
|
|
|
|
The admin panel uses the same JWT authentication as the main app. Users must have `role = 'admin'` in the `profiles` table to access admin endpoints.
|
|
|
|
### Setting up an admin user
|
|
|
|
```sql
|
|
-- On the VPS, connect to sojorn database
|
|
UPDATE profiles SET role = 'admin' WHERE handle = 'your_handle';
|
|
```
|
|
|
|
## Backend API Routes
|
|
|
|
All admin endpoints are under `/api/v1/admin/` and require:
|
|
1. Valid JWT token (Bearer auth)
|
|
2. User profile with `role = 'admin'`
|
|
|
|
| Method | Endpoint | Description |
|
|
|--------|----------|-------------|
|
|
| GET | `/admin/dashboard` | Platform stats |
|
|
| GET | `/admin/growth` | User/post growth data |
|
|
| GET | `/admin/users` | List users (search, filter) |
|
|
| GET | `/admin/users/:id` | User detail |
|
|
| PATCH | `/admin/users/:id/status` | Change user status |
|
|
| PATCH | `/admin/users/:id/role` | Change user role |
|
|
| PATCH | `/admin/users/:id/verification` | Toggle verification |
|
|
| POST | `/admin/users/:id/reset-strikes` | Reset strikes |
|
|
| GET | `/admin/posts` | List posts |
|
|
| GET | `/admin/posts/:id` | Post detail |
|
|
| PATCH | `/admin/posts/:id/status` | Change post status |
|
|
| DELETE | `/admin/posts/:id` | Delete post |
|
|
| GET | `/admin/moderation` | Moderation queue |
|
|
| PATCH | `/admin/moderation/:id/review` | Review flagged content |
|
|
| GET | `/admin/appeals` | List appeals |
|
|
| PATCH | `/admin/appeals/:id/review` | Review appeal |
|
|
| GET | `/admin/reports` | List reports |
|
|
| PATCH | `/admin/reports/:id` | Update report status |
|
|
| GET | `/admin/algorithm` | Get algorithm config |
|
|
| PUT | `/admin/algorithm` | Update algorithm config |
|
|
| GET | `/admin/categories` | List categories |
|
|
| POST | `/admin/categories` | Create category |
|
|
| PATCH | `/admin/categories/:id` | Update category |
|
|
| GET | `/admin/health` | System health check |
|
|
| GET | `/admin/audit-log` | Audit log |
|
|
|
|
## Deployment
|
|
|
|
```bash
|
|
# Build for production
|
|
npm run build
|
|
|
|
# Start production server
|
|
npm start
|
|
```
|
|
|
|
For production, serve behind Nginx with SSL. Add a server block for `admin.sojorn.net`:
|
|
|
|
```nginx
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name admin.sojorn.net;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/admin.sojorn.net/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/admin.sojorn.net/privkey.pem;
|
|
|
|
location / {
|
|
proxy_pass http://localhost:3001;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
```
|
|
|
|
## Moderation Flow
|
|
|
|
```
|
|
Content Created → AI Analysis (OpenAI/Google Vision)
|
|
↓
|
|
Score > threshold → Auto-flag → Moderation Queue
|
|
↓
|
|
Admin reviews → Approve / Dismiss / Remove Content / Ban User
|
|
↓
|
|
If removed → User sees violation → Can file appeal
|
|
↓
|
|
Admin reviews appeal → Approve (restore) / Reject (uphold)
|
|
```
|