← 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
M public/css/site.cssM routes/public.jsA views/public/social-claim.ejs
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 →