diff --git a/.gitignore b/.gitignore index acee04d..ee80c09 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ Thumbs.db .env .env.local frontend/package-lock.json +node_modules/ diff --git a/README.md b/README.md index c981b50..89cc146 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,18 @@ A high-performance **Rust (Axum)** + **React (Vite)** admin panel for managing S ### Panel Features +## 📸 Admin Panel Screenshots + +### Settings + + +### User Management + + +### Export Config + + + #### Core Features - 🚀 **High Performance**: Rust backend with Axum framework and async I/O - 👥 **User Management**: Full CRUD operations for VPN users with traffic quotas diff --git a/assets/export-config.png b/assets/export-config.png new file mode 100644 index 0000000..cf7d2ed Binary files /dev/null and b/assets/export-config.png differ diff --git a/assets/settings.png b/assets/settings.png new file mode 100644 index 0000000..c780f79 Binary files /dev/null and b/assets/settings.png differ diff --git a/assets/user-management.png b/assets/user-management.png new file mode 100644 index 0000000..7533a34 Binary files /dev/null and b/assets/user-management.png differ diff --git a/frontend/src/components/ConfigPanel.tsx b/frontend/src/components/ConfigPanel.tsx index 81f6d86..4ae7e01 100644 --- a/frontend/src/components/ConfigPanel.tsx +++ b/frontend/src/components/ConfigPanel.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { configApi, ServerConfig } from '../api/config'; -type TabType = 'network' | 'vpn' | 'limits'; +type TabType = 'network' | 'vpn' | 'limits' | 'users' | 'export'; interface FormErrors { [key: string]: string; @@ -100,6 +100,8 @@ export function ConfigPanel() { { id: 'network' as TabType, label: 'Network' }, { id: 'vpn' as TabType, label: 'VPN Settings' }, { id: 'limits' as TabType, label: 'Default Limits' }, + { id: 'users' as TabType, label: 'User Management' }, + { id: 'export' as TabType, label: 'Export Config' }, ]; if (loading) { @@ -453,6 +455,97 @@ export function ConfigPanel() { )} + + {/* User Management Tab */} + {activeTab === 'users' && ( +
| Username | +Status | +Traffic Usage | +Connections | +Actions | +
|---|---|---|---|---|
| admin | +Active | +1.2 GB / 50 GB | +1 / 5 | ++ + + | +
| test_user | +Warning | +48.5 GB / 50 GB | +0 / 2 | ++ + + | +
Export the full encrypted connection string for the Slipstream client.
+ +Scan this QR code with the mobile app to automatically configure your connection.
+ +