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
+51
View File
@@ -0,0 +1,51 @@
<?php $pageTitle = 'NixPanel — Modern Web Hosting Control Panel'; ?>
<?php
$features = [
['icon' => '⚡', 'title' => 'Lightning Fast', 'body' => 'Built for performance. Nginx support, PHP-FPM pools, and optimized defaults out of the box.'],
['icon' => '🔒', 'title' => 'Security First', 'body' => "Hardened defaults, Let's Encrypt SSL automation, Fail2ban, and two-factor auth."],
['icon' => '🌐', 'title' => 'Full DNS Control', 'body' => 'Manage BIND9 zones and records directly from the panel. No third-party DNS required.'],
['icon' => '📊', 'title' => 'Complete Control', 'body' => 'Manage email, databases, cron jobs, FTP accounts, and subdomains in one clean dashboard.'],
['icon' => '🔄', 'title' => 'Easy Migration', 'body' => 'Moving from cPanel? Import your accounts with a single command using our migration tool.'],
['icon' => '💳', 'title' => 'Simple Licensing', 'body' => 'Tied to your server IP. No per-user fees, no surprises. Upgrade or cancel anytime.'],
];
?>
<section class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 pt-24 pb-20 text-center">
<div class="inline-flex items-center gap-2 bg-brand-900/40 border border-brand-500/30 text-brand-400 text-xs font-medium px-3 py-1.5 rounded-full mb-6">
Now in public beta
</div>
<h1 class="text-5xl sm:text-6xl font-extrabold text-white leading-tight tracking-tight">
The hosting control panel<br>
<span class="text-brand-500">you actually want to use.</span>
</h1>
<p class="mt-6 text-lg text-gray-400 max-w-2xl mx-auto">
NixPanel is a modern, open-source alternative to cPanel. Manage your Linux server,
host sites, and control everything from a clean, fast dashboard.
</p>
<div class="mt-10 flex flex-col sm:flex-row gap-4 justify-center">
<a href="/register" class="btn-primary text-base px-7 py-3">Get started free</a>
<a href="/install" class="btn-outline text-base px-7 py-3">Install guide</a>
<a href="/pricing" class="btn-secondary text-base px-7 py-3">View pricing</a>
</div>
</section>
<section class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-20">
<h2 class="text-3xl font-bold text-white text-center mb-12">Everything you need to run a server</h2>
<div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
<?php foreach ($features as $f): ?>
<div class="card">
<div class="text-3xl mb-3"><?= $f['icon'] ?></div>
<h3 class="font-semibold text-white mb-2"><?= e($f['title']) ?></h3>
<p class="text-sm text-gray-400"><?= e($f['body']) ?></p>
</div>
<?php endforeach ?>
</div>
</section>
<section class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-20">
<div class="bg-brand-900/20 border border-brand-500/20 rounded-2xl p-12 text-center">
<h2 class="text-3xl font-bold text-white mb-4">Ready to take control?</h2>
<p class="text-gray-400 mb-8">Start free. Upgrade when you need more.</p>
<a href="/register" class="btn-primary text-base px-8 py-3">Create your account</a>
</div>
</section>