Zero-knowledge anonymous VPN built with Next.js, React Three Fiber, database encryption, and Paddle billing.
- Next.js 15+ (App Router)
- React Three Fiber / Drei (3D interface)
- PostgreSQL + Prisma ORM
- Zod (validation)
- Argon2id (password hashing)
- Jose (secure JWT sessions in httpOnly cookies)
- Paddle (Checkout & Webhooks)
- Tailwind CSS
- No Email Registration: Accounts are mapped to auto-generated
VPN-XXXXXXIDs. - Crypto storage: Passwords are hashed with argon2.
- VPN Configs: Encrypted in the database using AES-256-GCM.
- Billing separation: Only Paddle Customer/Subscription IDs are kept on our end. No card data.
- Anti-Bot & Limits: Inbuilt SVG Captcha for auth. 1000 active users cap. Automatic cron cleanup for abandoned free accounts.
Copy .env.example to .env and fill the variables:
cp .env.example .envEnsure you set a valid 32-character string for VPN_CONFIG_ENCRYPTION_KEY in production, and set a random string for CRON_SECRET to protect the cron endpoint.
Ensure you have a PostgreSQL database running and mapped to DATABASE_URL.
Run Prisma push and generate:
npx prisma db push
npx prisma generateSeed the default subscription plan:
npx tsx prisma/seed.tsnpm run dev
# or
pnpm dev- Set
PADDLE_ENVIRONMENT=sandboxin.env. - Get your test API key from Paddle Dashboard -> Developer tools -> Authentication.
- Replace
NEXT_PUBLIC_PADDLE_CLIENT_TOKENwith your Sandbox Client Token. - Use a service like ngrok to forward local port 3000 to the web and paste the URL in the Paddle webhooks page.
- Set
PADDLE_WEBHOOK_SECRETwith the signature key provided in the Paddle dashboard.
By default, the .env has VPN_PROVIDER=mock, which returns dummy payloads to test the logic without requiring a real VPN edge server.
Later, change VPN_PROVIDER=marzban and configure Marzban API credentials in .env to connect it to an actual endpoint.
- 3D futuristic landing page.
- Secure Anonymous Registration flow.
- Login and Session creation.
- Payment checkout integration (Paddle SDK).
- Webhook endpoints to verify and grant active VPN access.
- Basic mock VPN config issue and rotation endpoints.
- Base schemas, legal pages.
- A real Marzban external integration (Currently stubbed to log statements in
lib/vpn/provider.ts). - Public admin panel.
- Account password recovery (As there are no emails!).