Generic framework features, code-only — the tables come from the schema snapshot:
- controllers/account.php — email signup (verified) + Google OAuth (server-side auth-code
flow, async-popup friendly); native password_hash sessions on sp_users; sp_oauth_accounts +
sp_user_tokens; PublicController origin+throttle guards; {ok,data,error} envelope.
- Helpers/Mailer.php — transactional email: Brevo HTTP API (Guzzle) -> SMTP fallback
(PHPMailer) -> logs; config in sp_settings (encrypted).
- cli/rebuild.php — queue a static rebuild (sp_settings rebuild_pending flag) after DB edits.
- cli/resources.php — read a curated source registry (mde_resources) per agent_type.
- db/seed_google_oauth.php, db/seed_email.php — env-seeded encrypted secrets into sp_settings.
- templates/emails/verify.html — verification email template.
- composer.json — declare guzzlehttp/guzzle ^7.10 (account.php + Mailer use GuzzleHttp\Client).
Depends on the schema-snapshot branch (sp_users / sp_oauth_accounts / sp_user_tokens /
sp_settings / mde_resources) plus `composer require guzzlehttp/guzzle`. No data.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FMQeUnUrAeexcZ7P2Hxa6G
34 lines
2.1 KiB
HTML
34 lines
2.1 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<body style="margin:0;background:#f4f5f7;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#1f2430;">
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background:#f4f5f7;padding:32px 12px;">
|
|
<tr>
|
|
<td align="center">
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="max-width:480px;background:#ffffff;border-radius:16px;overflow:hidden;box-shadow:0 1px 3px rgba(16,24,40,.08);">
|
|
<tr>
|
|
<td style="padding:32px 32px 8px;">
|
|
<p style="margin:0 0 20px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#0f766e;">%SITE%</p>
|
|
<h1 style="margin:0 0 12px;font-size:26px;line-height:1.25;">Confirm your email</h1>
|
|
<p style="margin:0 0 20px;font-size:15px;line-height:1.6;color:#4b5563;">
|
|
Hi %NAME%, welcome to %SITE%. Tap the button below to confirm your email and start joining the conversation.
|
|
</p>
|
|
<p style="margin:0 0 24px;">
|
|
<a href="%VERIFY_URL%" style="display:inline-block;background:#0f766e;color:#ffffff;text-decoration:none;font-size:15px;font-weight:600;padding:12px 22px;border-radius:10px;">Confirm my email</a>
|
|
</p>
|
|
<p style="margin:0 0 8px;font-size:13px;line-height:1.6;color:#6b7280;">
|
|
Or paste this link into your browser:
|
|
</p>
|
|
<p style="margin:0 0 24px;font-size:13px;line-height:1.6;word-break:break-all;">
|
|
<a href="%VERIFY_URL%" style="color:#0f766e;">%VERIFY_URL%</a>
|
|
</p>
|
|
<p style="margin:0;font-size:12px;line-height:1.6;color:#9ca3af;border-top:1px solid #eef0f2;padding-top:16px;">
|
|
This link expires in 24 hours. If you didn't create an account, you can safely ignore this email.
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|