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 +![Settings](assets/settings.png) + +### User Management +![User Management](assets/user-management.png) + +### Export Config +![Export Config](assets/export-config.png) + + #### 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' && ( +
+
+

VPN Users

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
UsernameStatusTraffic UsageConnectionsActions
adminActive1.2 GB / 50 GB1 / 5 + + +
test_userWarning48.5 GB / 50 GB0 / 2 + + +
+
+
+ )} + + {/* Export Config Tab */} + {activeTab === 'export' && ( +
+

Export Configurations

+ +
+

SlipNet Encrypted Connection

+

Export the full encrypted connection string for the Slipstream client.

+ +
+ + +
+ +

QR Code Configuration

+

Scan this QR code with the mobile app to automatically configure your connection.

+ +
+
+
+ {/* Simulated QR code pattern */} + {Array.from({length: 100}).map((_, i) => ( +
0.5 ? 'bg-black' : 'bg-transparent'}`}>
+ ))} +
+
+
+
+
+
+
+
+ +
+ +
+
+
+ )} + {/* Save Button */}