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]>
18 lines
878 B
PHP
18 lines
878 B
PHP
<?php $pageTitle = 'Verify Email — NixPanel'; ?>
|
|
|
|
<div class="min-h-[80vh] flex items-center justify-center px-4 py-16">
|
|
<div class="w-full max-w-md text-center">
|
|
<?php if ($verified): ?>
|
|
<div class="text-5xl mb-6">✅</div>
|
|
<h1 class="text-3xl font-bold text-white mb-3">Email verified!</h1>
|
|
<p class="text-gray-400 mb-8">Your account is active. You can now sign in.</p>
|
|
<a href="/login" class="btn-primary px-8 py-3">Sign in</a>
|
|
<?php else: ?>
|
|
<div class="text-5xl mb-6">❌</div>
|
|
<h1 class="text-3xl font-bold text-white mb-3">Invalid link</h1>
|
|
<p class="text-gray-400 mb-8">This verification link is invalid or has already been used.</p>
|
|
<a href="/register" class="btn-secondary px-8 py-3">Create a new account</a>
|
|
<?php endif ?>
|
|
</div>
|
|
</div>
|