feat: rewrite website in PHP, drop Node.js stack

Replace React/Vite frontend + Fastify API with a single PHP application.

- Front controller router in public/index.php (clean URLs via .htaccess)
- Session-based auth (no JWT) — register, login, verify email,
  forgot/reset password, logout
- Stripe checkout sessions, billing portal, webhook handler
  (checkout.session.completed, subscription.updated/deleted)
- License IP change via internal licensing server API
- PHP classes: DB (PDO), Auth, Mailer (PHPMailer), StripeClient
- Views: home, pricing, install, login, register, dashboard,
  verify-email, forgot-password, reset-password, 404
- Tailwind CSS via CDN — no build step required
- Composer dependencies: stripe/stripe-php, phpmailer/phpmailer,
  vlucas/phpdotenv, ramsey/uuid
- CSRF protection on all POST forms
- PRG pattern with session flash messages

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
NixReaper
2026-04-05 11:29:58 -05:00
co-authored by Claude Sonnet 4.6
parent 72f5cc1060
commit faf0818dde
69 changed files with 1733 additions and 2616 deletions
-44
View File
@@ -1,44 +0,0 @@
# Server
NODE_ENV=production
PORT=4000
HOST=0.0.0.0
# CORS
CORS_ORIGIN=https://nixpanel.io
# Database (MariaDB / MySQL)
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=nixpanel_web
DB_PASSWORD=your_secure_password_here
DB_NAME=nixpanel_website
# JWT — generate with: openssl rand -hex 64
JWT_SECRET=changeme_use_openssl_rand_hex_64
JWT_EXPIRES_IN=7d
# Stripe
STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Stripe Price IDs (create in Stripe Dashboard)
STRIPE_PRICE_SOLO_MONTHLY=price_...
STRIPE_PRICE_SOLO_ANNUAL=price_...
STRIPE_PRICE_HOST_MONTHLY=price_...
STRIPE_PRICE_HOST_ANNUAL=price_...
STRIPE_PRICE_AGENCY_MONTHLY=price_...
STRIPE_PRICE_AGENCY_ANNUAL=price_...
# Internal link to the licensing server
LICENSING_SERVER_URL=http://localhost:3000
LICENSING_SERVER_API_KEY=your_internal_api_key_here
# Email (SMTP)
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USER=[email protected]
MAIL_PASSWORD=your_smtp_password
MAIL_FROM=[email protected]
# Public URL (used in emails and redirects)
APP_URL=https://nixpanel.io