[object Object]

← back to Butlr

/social-claim — admin tool that generates a one-page claim sheet for any brand name. Tier 1 (high sniping risk: Instagram, X, TikTok, YouTube, Threads), Tier 2 (LinkedIn Company, Facebook Page, Bluesky, GitHub, Pinterest, Reddit), Tier 3 (Snapchat, Twitch, Vimeo, Medium, Substack, Discord, Patreon), bonus (Product Hunt, Crunchbase, HN, Trustpilot, BBB). Every link goes to the platform's actual signup flow, not a check page. Honest about the platform-side limitation: no public API for new-account creation, all require manual CAPTCHA + phone.

38ede4f738f989475d33e5db1b876dd152259f7c · 2026-05-12 12:30:22 -0700 · SteveStudio2

Files touched

Diff

commit 38ede4f738f989475d33e5db1b876dd152259f7c
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Tue May 12 12:30:22 2026 -0700

    /social-claim — admin tool that generates a one-page claim sheet for any brand name. Tier 1 (high sniping risk: Instagram, X, TikTok, YouTube, Threads), Tier 2 (LinkedIn Company, Facebook Page, Bluesky, GitHub, Pinterest, Reddit), Tier 3 (Snapchat, Twitch, Vimeo, Medium, Substack, Discord, Patreon), bonus (Product Hunt, Crunchbase, HN, Trustpilot, BBB). Every link goes to the platform's actual signup flow, not a check page. Honest about the platform-side limitation: no public API for new-account creation, all require manual CAPTCHA + phone.
---
 public/css/site.css           |  20 ++++++++
 routes/public.js              |  11 +++++
 views/public/social-claim.ejs | 103 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 134 insertions(+)

diff --git a/public/css/site.css b/public/css/site.css
index 66395ae..d95f8c2 100644
--- a/public/css/site.css
+++ b/public/css/site.css
@@ -390,3 +390,23 @@ html[data-theme='dark']  .theme-toggle-sun  { display: none; }
   content: '✓'; position: absolute; left: 0; top: 0;
   color: var(--green); font-weight: 700;
 }
+
+/* Social claim list */
+.social-claim-list { list-style: none; padding: 0; margin: .5rem 0 1.5rem; counter-reset: claim-step; }
+.social-claim-list li {
+  position: relative; padding: .75rem 1rem .75rem 2.5rem;
+  background: var(--surface); border: 1px solid var(--border);
+  border-radius: var(--radius); margin-bottom: .5rem;
+  counter-increment: claim-step;
+}
+.social-claim-list li::before {
+  content: counter(claim-step);
+  position: absolute; left: .75rem; top: .85rem;
+  width: 22px; height: 22px; border-radius: 50%;
+  background: var(--accent); color: var(--accent-fg);
+  display: inline-flex; align-items: center; justify-content: center;
+  font-size: .75rem; font-weight: 700;
+}
+.social-claim-list li a { display: block; font-weight: 500; }
+.social-claim-list li span.muted { display: block; margin-top: .25rem; }
+.social-claim-list code { background: var(--bg-alt); padding: .1rem .4rem; border-radius: 4px; font-size: .85em; }
diff --git a/routes/public.js b/routes/public.js
index 401c615..759f3b5 100644
--- a/routes/public.js
+++ b/routes/public.js
@@ -253,6 +253,17 @@ router.post('/checkout', (req, res) => {
   res.status(501).render('public/error', { title: 'Coming soon', message: 'Live billing not yet wired. Set STRIPE_DRY_RUN=0 + STRIPE_SECRET_KEY + STRIPE_PRICE_<plan> when ready.' });
 });
 
+// ── Internal admin: social-claim sheet ──────────────────────────────
+// Pass ?name=<brand> to generate direct-signup URLs for every major social.
+router.get('/social-claim', (req, res) => {
+  const name = String(req.query.name || '').replace(/[^a-zA-Z0-9_]/g, '').slice(0, 30).toLowerCase();
+  res.render('public/social-claim', {
+    title: name ? `Claim sheet for @${name} — HoldForMe` : 'Social-Claim Sheet — HoldForMe',
+    meta_desc: 'Generate direct-signup URLs for every major social platform when you lock a brand name.',
+    name,
+  });
+});
+
 router.get('/healthz', (req, res) => res.type('text').send('ok'));
 
 module.exports = router;
diff --git a/views/public/social-claim.ejs b/views/public/social-claim.ejs
new file mode 100644
index 0000000..8fa8ee3
--- /dev/null
+++ b/views/public/social-claim.ejs
@@ -0,0 +1,103 @@
+<%- include('../partials/head', { title, meta_desc }) %>
+<%- include('../partials/header') %>
+
+<main class="social-claim-page">
+  <section class="section">
+    <div class="wrap narrow">
+      <p class="muted small"><a href="/">← Home</a></p>
+      <h1>Social-Claim Sheet</h1>
+      <p class="muted">Enter the brand name you locked. We'll generate direct signup URLs for every major platform in optimal order (highest-sniping-risk first). Open each in a new tab and claim the handle.</p>
+
+      <form method="GET" action="/social-claim" class="filter-form" style="margin:1.5rem 0">
+        <label class="field" style="flex:1;min-width:240px">
+          <span class="field-label">Brand name (no spaces, no @)</span>
+          <input type="text" name="name" value="<%= name || '' %>" maxlength="30" placeholder="e.g. holdforme" pattern="[a-zA-Z0-9_]+" required>
+        </label>
+        <button class="btn primary" type="submit">Generate sheet</button>
+      </form>
+
+      <% if (name) { %>
+        <p class="muted small">Sheet for <strong>@<%= name %></strong>. Each link below opens the platform's <em>signup</em> page (not a check). If the handle is taken there, fall back to <code><%= name %>app</code>, <code>get<%= name %></code>, or <code>the<%= name %></code>.</p>
+
+        <h2>Tier 1 — Sniping risk (claim first, in this order)</h2>
+        <ol class="social-claim-list">
+          <li>
+            <a href="https://www.instagram.com/accounts/emailsignup/" target="_blank" rel="noopener noreferrer"><strong>Instagram</strong> — sign up</a>
+            <span class="muted small">Profile URL will be <code>instagram.com/<%= name %></code>. Use Steve's existing IG → Profile → Username field.</span>
+          </li>
+          <li>
+            <a href="https://x.com/i/flow/signup" target="_blank" rel="noopener noreferrer"><strong>X (Twitter)</strong> — sign up</a>
+            <span class="muted small">Set @<%= name %> as the handle. X squatters auto-grab patterns — claim same-hour.</span>
+          </li>
+          <li>
+            <a href="https://www.tiktok.com/signup" target="_blank" rel="noopener noreferrer"><strong>TikTok</strong> — sign up</a>
+            <span class="muted small">Username = <%= name %>.</span>
+          </li>
+          <li>
+            <a href="https://accounts.google.com/signup" target="_blank" rel="noopener noreferrer"><strong>YouTube channel</strong> — needs a Google account first</a>
+            <span class="muted small">If you already have a Google account, go to <a href="https://www.youtube.com/account_advanced" target="_blank" rel="noopener noreferrer">YouTube → Advanced settings</a> and set the custom URL to @<%= name %> once you hit 100 subs.</span>
+          </li>
+          <li>
+            <a href="https://www.threads.net/" target="_blank" rel="noopener noreferrer"><strong>Threads</strong> — uses your Instagram handle automatically</a>
+            <span class="muted small">Claim Instagram first; Threads inherits.</span>
+          </li>
+        </ol>
+
+        <h2>Tier 2 — Important but lower sniping risk</h2>
+        <ol class="social-claim-list">
+          <li>
+            <a href="https://www.linkedin.com/company/setup/new/" target="_blank" rel="noopener noreferrer"><strong>LinkedIn Company Page</strong> — create</a>
+            <span class="muted small">Page URL becomes linkedin.com/company/<%= name %>. Counts as the official business presence.</span>
+          </li>
+          <li>
+            <a href="https://www.facebook.com/pages/create/" target="_blank" rel="noopener noreferrer"><strong>Facebook Page</strong> — create</a>
+            <span class="muted small">URL slug = facebook.com/<%= name %>. Sets up for FB Ads later if needed.</span>
+          </li>
+          <li>
+            <a href="https://bsky.app/" target="_blank" rel="noopener noreferrer"><strong>Bluesky</strong> — sign up</a>
+            <span class="muted small">Will become <%= name %>.bsky.social by default. Later, switch the handle to <%= name %>.<your-domain> via the DNS-TXT verification.</span>
+          </li>
+          <li>
+            <a href="https://github.com/join" target="_blank" rel="noopener noreferrer"><strong>GitHub Organization</strong> — sign up + create org</a>
+            <span class="muted small">Critical for any tech-coded brand. github.com/<%= name %>.</span>
+          </li>
+          <li>
+            <a href="https://www.pinterest.com/business/create/" target="_blank" rel="noopener noreferrer"><strong>Pinterest Business</strong> — create</a>
+            <span class="muted small">Less critical for B2C-service brands but easy claim.</span>
+          </li>
+          <li>
+            <a href="https://www.reddit.com/register" target="_blank" rel="noopener noreferrer"><strong>Reddit u/<%= name %></strong> — sign up</a>
+            <span class="muted small">Also create the <a href="https://www.reddit.com/subreddits/create" target="_blank" rel="noopener noreferrer">subreddit r/<%= name %></a> while logged in.</span>
+          </li>
+        </ol>
+
+        <h2>Tier 3 — Nice to have</h2>
+        <ol class="social-claim-list">
+          <li><a href="https://accounts.snapchat.com/accounts/v2/welcome" target="_blank" rel="noopener noreferrer"><strong>Snapchat</strong> — sign up</a> <span class="muted small">snapchat.com/add/<%= name %></span></li>
+          <li><a href="https://www.twitch.tv/signup" target="_blank" rel="noopener noreferrer"><strong>Twitch</strong> — sign up</a></li>
+          <li><a href="https://vimeo.com/join" target="_blank" rel="noopener noreferrer"><strong>Vimeo</strong> — sign up</a></li>
+          <li><a href="https://medium.com/m/signin" target="_blank" rel="noopener noreferrer"><strong>Medium</strong> — sign up</a> <span class="muted small">medium.com/@<%= name %></span></li>
+          <li><a href="https://substack.com/signup" target="_blank" rel="noopener noreferrer"><strong>Substack</strong> — sign up</a> <span class="muted small"><%= name %>.substack.com</span></li>
+          <li><a href="https://discord.com/register" target="_blank" rel="noopener noreferrer"><strong>Discord</strong> — sign up + create server</a></li>
+          <li><a href="https://www.patreon.com/signup" target="_blank" rel="noopener noreferrer"><strong>Patreon</strong> — creator signup</a> <span class="muted small">patreon.com/<%= name %></span></li>
+        </ol>
+
+        <h2>Bookmark / utility (no real handle, but worth claiming)</h2>
+        <ol class="social-claim-list">
+          <li><a href="https://producthunt.com/" target="_blank" rel="noopener noreferrer">Product Hunt</a> <span class="muted small">For launch day.</span></li>
+          <li><a href="https://www.crunchbase.com/home" target="_blank" rel="noopener noreferrer">Crunchbase</a> <span class="muted small">Free organization profile (premium edits paywalled).</span></li>
+          <li><a href="https://news.ycombinator.com/" target="_blank" rel="noopener noreferrer">Hacker News</a> <span class="muted small">Submit Show HN when you launch.</span></li>
+          <li><a href="https://www.trustpilot.com/business/signup" target="_blank" rel="noopener noreferrer">Trustpilot</a> <span class="muted small">For when reviews start rolling in.</span></li>
+          <li><a href="https://www.bbb.org/get-accredited" target="_blank" rel="noopener noreferrer">Better Business Bureau</a> <span class="muted small">Trust signal for credit-card/financial-help calls.</span></li>
+        </ol>
+
+        <h2>What we can't do for you</h2>
+        <p class="prose">Every platform above requires manual signup with CAPTCHA + phone + email verification. There's no public API that creates a new user account on Instagram/X/TikTok/etc. — that's a deliberate platform design choice to prevent botnet abuse. The fastest path: open all the Tier 1 links above in 5 tabs, claim the handle on each in sequence using Chrome's password manager + your phone for SMS codes. Budget about 15-20 minutes for Tier 1, another 30 minutes for Tier 2-3 across the rest of the day.</p>
+      <% } else { %>
+        <p class="muted">Enter a name above to generate the claim sheet.</p>
+      <% } %>
+    </div>
+  </section>
+</main>
+
+<%- include('../partials/footer') %>

← 282926f perfect: (1) AES-256-GCM encryption at rest for account_numb  ·  back to Butlr  ·  always-announce two-party consent preamble — Steve's standin 040cea4 →