Page Builder: members can hold several pages, scaled by level

The quota and the capability used to contradict each other. An Ascensus
member was allowed 3 page builds a month, but every build overwrote the same
file — so they could build three times and never have more than one page. The
slug plumbing to do better already existed and was only exposed at level 6,
which made the Funnel Factory's differentiator a COUNT rather than a KIND, the
same flaw the upper tiers had.

Now: hold caps by level (2 at Ascensus rising to 50 at Corona), separate from
the monthly build quota. Rebuilding spends a build but needs no hold room;
adding a new page needs both. The Page Builder is a list of your pages with
view / copy link / rebuild / delete, plus a form that ADDS one instead of
silently replacing what you had.

Two things kept deliberately fixed. The first page a member builds stays at
/p/<id> forever and cannot be deleted — that address ends up on banners,
printed flyers and in people's DMs, so it must never move. Extra pages take a
slug from the headline the writer produced, de-duplicated, so the address
describes the page without anyone having to invent one.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-08-29 06:02:06 -05:00
parent 3620a72338
commit c8ae4d55b0
3 changed files with 160 additions and 11 deletions
+13
View File
@@ -29,6 +29,13 @@
border-radius:50%;animation:sp .8s linear infinite;vertical-align:-2px;margin-right:7px}
@keyframes sp{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spin{animation:none}}
.pg-page{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;
border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:9px}
.pg-page.main{border-color:var(--gold)}
.pg-page .nm{font-weight:800;font-size:15px}
.pg-page .u{font-size:12.5px;color:var(--muted);word-break:break-all;margin-top:2px}
.pg-page .meta{font-size:12px;color:var(--muted);margin-top:3px}
.pg-acts{display:flex;gap:7px;flex-wrap:wrap}
</style></head>
<body>
<header class="wrap nav"><a class="brand" href="/suite"><img class="brand-mark" src="/logo.jpg" alt="The RM Circle" width="42" height="42"><span><span id="brandName">RM Circle</span><small>Page Builder</small></span></a><div class="nav-actions"><a class="btn btn-secondary hide-mobile" href="/suite">← The Suite</a><a class="btn btn-primary" href="/suite/copy">Copy Engine</a></div></header>
@@ -45,6 +52,12 @@
<div class="pg-row"><a class="btn btn-teal btn-sm" id="pgOpen" target="_blank" rel="noopener">Open it →</a><button class="btn btn-secondary btn-sm" id="pgCopyUrl">📋 Copy link</button><span class="pg-hint" id="pgCopied" style="display:none;color:var(--teal)">Copied.</span></div>
</div>
<div id="pgPagesWrap" style="display:none">
<h2 style="font-size:19px;margin:0 0 4px">Your pages</h2>
<div class="pg-hint" id="pgCapNote" style="margin-bottom:10px"></div>
<div id="pgPages"></div>
</div>
<div class="pg-card" id="pgCard">
<label class="pg-lab" for="pgName">What should people call you?</label>
<input type="text" id="pgName" maxlength="60" placeholder="e.g. Marty B.">