chore: initial project scaffold with admin web, backend, desktop client, and deployment setup

Add monorepo structure for NexaVPN WireGuard control plane including:
- .gitignore for node_modules, build artifacts, and environment files
- README with project overview, monorepo layout, and quick start guide
- Admin web UI with React, Vite, TypeScript, and nginx reverse proxy
- API client with type definitions for users, devices, policies, gateways, and audit logs
- Admin pages for dashboard, users, devices, policies, g
This commit is contained in:
2026-03-15 16:32:34 +01:00
commit 830491cb0d
91 changed files with 5279 additions and 0 deletions

View File

@@ -0,0 +1,111 @@
:root {
font-family: "Segoe UI", "SF Pro Text", sans-serif;
color: #f5f7fb;
background:
radial-gradient(circle at top, rgba(79, 208, 164, 0.18), transparent 25%),
linear-gradient(180deg, #08111f 0%, #0d1727 100%);
}
* {
box-sizing: border-box;
}
body {
margin: 0;
}
.client-shell {
min-height: 100vh;
display: grid;
place-items: center;
gap: 24px;
padding: 32px 20px;
}
.hero,
.panel {
width: min(560px, 100%);
}
.hero {
text-align: center;
}
.eyebrow {
color: #74e0b8;
letter-spacing: 0.18em;
text-transform: uppercase;
font-size: 0.78rem;
}
.lede {
color: #a9b8d3;
}
.panel {
padding: 24px;
border-radius: 24px;
background: rgba(12, 22, 38, 0.84);
border: 1px solid rgba(167, 185, 219, 0.14);
box-shadow: 0 24px 60px rgba(2, 8, 18, 0.36);
backdrop-filter: blur(16px);
}
form {
display: grid;
gap: 16px;
}
label {
display: grid;
gap: 8px;
color: #c2cfe5;
}
input {
border: 1px solid rgba(167, 185, 219, 0.16);
background: rgba(7, 14, 27, 0.85);
color: #f5f7fb;
border-radius: 14px;
padding: 14px 16px;
}
button {
border: 0;
border-radius: 999px;
padding: 13px 18px;
font-weight: 700;
background: linear-gradient(135deg, #74e0b8 0%, #1fb67a 100%);
color: #04141a;
}
.error {
color: #ffb7b7;
}
.status {
display: grid;
gap: 18px;
}
.status-row,
.details {
display: flex;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
}
.details div {
display: grid;
gap: 6px;
}
.details span {
color: #9db0cf;
}
.resource-list {
margin: 0;
padding-left: 18px;
}