Files
budget/views/auth-layout.php
T
Ty Clifford 6686388834 - Implemented the complete first-run experience:
Account creation and guarded onboarding flow.
Current-cash starting balance with automatic rollover enabled.
Dynamic bill generation, shared/custom categories, recurring targets, 
and optional same-day onboarding transactions.
Optional dormant reserve and additional categories.
Mailgun email or authenticator-app 2FA configuration.
Responsive dark/light UI with no overflow at 390px.
Fixed administrator session-ID creation bug.
Core implementation: [OnboardingService.php (line 
59)](/Users/tyemeclifford/Documents/GH/budget/app/OnboardingService.php:59), 
[onboarding.php (line 
19)](/Users/tyemeclifford/Documents/GH/budget/views/onboarding.php:19), 
and [index.php (line 
143)](/Users/tyemeclifford/Documents/GH/budget/public/index.php:143).
Verification passed: financial self-test, onboarding integration test, 
full browser walkthrough, mobile layout, routing guards, and zero 
browser console errors. Live email delivery requires actual Mailgun 
credentials and was not sent during testing.
2026-06-15 14:51:44 -04:00

40 lines
1.9 KiB
PHP

<?php
$appName = (string) $settings->get('app.name', 'Neon Ledger');
$defaultTheme = (string) $settings->get('theme.default', 'dark');
?>
<!doctype html>
<html lang="en" data-theme="<?= h($defaultTheme) ?>">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="dark light">
<title><?= h($title ?? 'Welcome') ?> · <?= h($appName) ?></title>
<link rel="stylesheet" href="/assets/app.css?v=<?= (int) filemtime(APP_ROOT . '/public/assets/app.css') ?>">
<script>document.documentElement.dataset.theme=localStorage.getItem('budget-theme')||<?= json_encode($defaultTheme) ?>;</script>
</head>
<body class="auth-body">
<main class="auth-shell">
<section class="auth-story">
<div class="brand auth-brand"><span class="brand-mark">NL</span><strong><?= h($appName) ?></strong></div>
<div>
<p class="eyebrow">Plan forward. Compare backward.</p>
<h1>Your money, with a memory.</h1>
<p>Build monthly budgets, carry unused funds forward, track bill progress, and move money out of sight without losing the paper trail.</p>
</div>
<div class="auth-orbit" aria-hidden="true">
<span class="orbit-one"></span><span class="orbit-two"></span><span class="orbit-three"></span>
<strong>$</strong>
</div>
</section>
<section class="auth-panel">
<button class="icon-control auth-theme-toggle" type="button" data-theme-toggle aria-label="Toggle light and dark mode"><?= icon('sun') ?></button>
<?php foreach ($flashes as $flash): ?>
<div class="flash <?= h($flash['type']) ?>"><span>!</span><?= h($flash['message']) ?></div>
<?php endforeach; ?>
<?= $content ?>
</section>
</main>
<script src="/assets/app.js?v=<?= (int) filemtime(APP_ROOT . '/public/assets/app.js') ?>"></script>
</body>
</html>