- Control centre (QUORLA_CONTROL=true on app.quorlasocial.com): public /signup → Stripe Checkout, verified Stripe webhook (paid, updated, cancelled, payment failed), Admin → Agencies (approve without Stripe, suspend, resume, billing portal, resend welcome, remove) - deploy/provision-tenants.sh (cron): one container per agency with its own .env and data, nginx map for <agency>.quorlasocial.com, upgrades agencies after a rebuild, archives removed data - New workspaces: first admin only via the emailed one-time setup link (SETUP_TOKEN) - Meta system user token can be saved in Settings (encrypted) for workspaces that can't edit .env - docs/multi-tenant.md: DNS, wildcard cert, nginx, sudoers, cron, Stripe setup; tests for the control centre Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
35 lines
1.6 KiB
HTML
35 lines
1.6 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Your Quorla workspace is on its way</title>
|
|
<link rel="icon" type="image/png" href="/brand/mark.png">
|
|
<style>
|
|
* { box-sizing:border-box } [hidden]{display:none!important}
|
|
body { margin:0; background:#f6f5fb; color:#1f2024; font:16px/1.6 Inter,"Segoe UI",system-ui,sans-serif }
|
|
main { max-width:520px; margin:0 auto; padding:56px 16px; text-align:center }
|
|
img { height:34px; margin-bottom:28px } h1 { font-size:26px; color:#242142; margin:0 0 10px }
|
|
p { color:#5d6070 } .box { background:#fff; border:1px solid #e6e5ef; border-radius:14px; padding:24px }
|
|
a { color:#3b3778 }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<img src="/brand/logo.png" alt="Quorla">
|
|
<div class="box">
|
|
<h1>Thanks, you're in</h1>
|
|
<p id="paid">We're setting up <b id="addr"></b> now. You'll get an email with your setup link within a few minutes.</p>
|
|
<p id="manual" hidden>We've got your details. We'll set up <b id="addr2"></b> and email you the setup link shortly.</p>
|
|
<p>Nothing in your inbox after 15 minutes? Check spam, or write to <a href="mailto:support@quorlasocial.com">support@quorlasocial.com</a>.</p>
|
|
</div>
|
|
</main>
|
|
<script>
|
|
const q = new URLSearchParams(location.search), w = (q.get("w") || "").replace(/[^a-z0-9-]/g, "");
|
|
const host = `${w}.quorlasocial.com`;
|
|
document.getElementById("addr").textContent = host; document.getElementById("addr2").textContent = host;
|
|
if (q.get("manual")) { document.getElementById("paid").hidden = true; document.getElementById("manual").hidden = false; }
|
|
</script>
|
|
</body>
|
|
</html>
|