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:
co-authored by
Claude Sonnet 4.6
parent
72f5cc1060
commit
faf0818dde
@@ -0,0 +1,45 @@
|
||||
<?php $pageTitle = 'Create Account — NixPanel'; ?>
|
||||
|
||||
<div class="min-h-[80vh] flex items-center justify-center px-4 py-16">
|
||||
<div class="w-full max-w-md">
|
||||
<div class="text-center mb-8">
|
||||
<h1 class="text-3xl font-bold text-white">Create your account</h1>
|
||||
<p class="text-gray-400 mt-2">Get started with NixPanel for free</p>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<form method="POST" action="/register" class="space-y-4">
|
||||
<?= csrf_field() ?>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm text-gray-400 mb-1.5">Full name</label>
|
||||
<input type="text" name="full_name" value="<?= old('full_name') ?>" required
|
||||
class="input" placeholder="Jane Smith">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm text-gray-400 mb-1.5">Email address</label>
|
||||
<input type="email" name="email" value="<?= old('email') ?>" required
|
||||
class="input" placeholder="[email protected]">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm text-gray-400 mb-1.5">Password</label>
|
||||
<input type="password" name="password" required minlength="8"
|
||||
class="input" placeholder="Min 8 characters">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn-primary w-full justify-center py-3">Create account</button>
|
||||
|
||||
<p class="text-xs text-gray-500 text-center">
|
||||
By creating an account you agree to our
|
||||
<a href="/terms" class="text-brand-400 hover:underline">Terms of Service</a>.
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<p class="text-center text-sm text-gray-500 mt-6">
|
||||
Already have an account? <a href="/login" class="text-brand-400 hover:underline">Sign in</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user