- Create Altcha component for admin frontend - Add ALTCHA verification to login flow - Disable login button until ALTCHA is verified - Use admin ALTCHA challenge endpoint |
||
|---|---|---|
| .. | ||
| src | ||
| .gitignore | ||
| deploy_server.sh | ||
| fix_service.sh | ||
| next.config.js | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.js | ||
| README.md | ||
| setup_nginx.sh | ||
| setup_port3002.sh | ||
| setup_server.sh | ||
| sojorn-admin.nginx | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
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
# 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
-- 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:
- Valid JWT token (Bearer auth)
- 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
# 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:
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)