Link in Bio
A public landing page at sonethub.com/u/{your-handle} that the agent drafts, updates with your latest posts, and can answer visitor questions on.
What it is
Your bio page lives at sonethub.com/u/{your-handle}. It's the one link you put in every social profile — visitors land here, see your latest posts, the things you want them to click, and a chat that answers their questions from your brand voice.
Three things make it different from a Linktree clone:
- The agent drafts it for you. Tell the chat "set up my bio page" and you get a 4-7 block starter (header, latest posts, links to your courses, etc.) that you tweak instead of building from scratch.
- The latest-posts block auto-syncs. Pick which platforms it pulls from once; every new post you publish shows up automatically. No manual embed-and-forget.
- A public AI assistant can answer visitor questions. Growth plan and up. The agent that knows your brand voice talks to visitors on the page, captures interested ones as leads. (Cost-capped — see AI assistant block.)
Setup
1. Pick your handle
Go to Bio in the dashboard. First time you land you get an empty state with one input: your handle. This becomes the URL: pick something short and memorable. Once you create the page, the slug is renameable but old links to the previous slug stop working — so don't rename casually.
2. Let the agent draft it (optional)
In /chat, ask: "set up my bio page" — the agent calls generate_bio_page, reads your last 30 days of posts and your brand memories, and proposes a draft. You see the result in the editor right away. Nothing is published until you flip the Publish toggle yourself.
You can skip this and build manually, but the agent is usually faster than dragging blocks into shape.
3. Edit the blocks
The editor is a left-side block list with a live preview on the right. Drag handles to reorder. Click a block to expand its form. Click the eye to hide a block without deleting it. Click the trash to delete; one inline confirmation, no modal.
4. Publish
Top-right of the page. Once published, the URL works for anyone. Unpublishing immediately removes the page — visitors see a 404.
Block types
| Type | What it does |
|---|---|
| Link | Outbound link with a label, optional subtitle, optional icon. The most common block. |
| Header | A section title (h1/h2/h3) to break the page into chunks. |
| Image | A standalone image with optional click-through. |
| Video embed | YouTube, Vimeo, TikTok, or Instagram embed. Paste the URL, the editor picks the right player. |
| Latest posts | Live feed of your most recent posts from selected connected accounts. Grid or carousel. |
| AI assistant | A chat bubble visitors can talk to. Growth plan and up. |
| Paywall | Stripe Checkout button — sells digital goods through your connected Stripe account. |
| Email capture | Connects to Mailchimp, Kit, or drops into the bio leads inbox. |
Brand identity
The page picks up your workspace brand identity automatically — logo, primary color, font. Set these once in the bio editor's Brand identity section and every surface that uses brand cascading (this page today; future automation reply cards) follows along.
If you've set org-level brand identity on an organization (the Settings → Organization section, used for white-label reports on the Business plan), workspaces inherit from there. Setting workspace-level values overrides the org defaults for this bio page only.
Themes
Five starter themes ship with the page: Classic, Minimal, Editorial, Neon, Paper. Pick one in the editor's theme picker — each card shows a mini preview using its actual tokens, so you can compare without leaving the page.
Pro plan and up unlocks theme overrides: pick any theme and override the primary color or display font on top of it. Below Pro, the theme is the theme.
Targeting (Pro plan and up)
Each block can be conditionally shown:
- Time window (
go-live/expires) — hide a Black Friday block until November 28, hide a holiday block after January 6. - Countries — only show this block to visitors from Spain, the US, Germany.
- Devices — mobile-only, desktop-only, or both.
- Weekdays — show only Saturdays and Sundays for a weekend-only offer.
All of these are stacked: a block needs to pass every active filter to render. The visibility filter runs at the edge from the visitor's cf-ipcountry header and UA — there's no client-side flicker.
AI assistant block (Growth plan and up)
The same agent loop you talk to in /chat, exposed publicly on your bio page with a hard-restricted tool set:
- Reads from your brand memories (the same ones you teach the agent over time in chat).
- Writes exactly one thing:
capture_lead— when a visitor voluntarily leaves their email or name, it lands in your bio leads inbox and you get a Resend email notification. - Cannot publish, schedule, send DMs, generate images / video / music, or spend any other API budget. None of those tools are wired into this surface.
The visitor's conversation lives in their browser. SonetHub never persists the chat — only captured leads land in your DB. GDPR-friendliest version of a public chat surface.
Cost guardrails
Public AI surfaces are an uncapped cost vector. The stack:
- Per-visitor IP: 10 messages per hour, 30 per day.
- Per workspace: 200 messages per day on Growth, 1000 on Pro, 5000 on Business.
- Model: Anthropic Haiku 4.5 only. Visitor chat doesn't need Sonnet quality, and the per-request cost is single-digit cents after prompt caching kicks in (your brand context is cached across all visitors of yours for the same 5-minute window).
- Max 3 tool calls per conversation so the agent can't loop on
capture_lead. - Conversation transcript caps at 24 turns server-side; the client trims past 20 to keep Haiku coherent.
Every assistant turn records a bio-assistant-chat cost event against your workspace. Visible alongside your other cost events on the admin dashboard; aggregate visibility lands on your bio analytics dashboard.
When to ask for an email
The system prompt nudges the assistant to capture leads when the visitor voluntarily offers contact details (or when a question can't be answered from your brand context — "I'm not sure, want to leave your email so the creator can follow up?"). It does not proactively ask every turn — that pattern annoys visitors and tanks conversion.
Click-tracking and UTM tags
Every outbound click is recorded against the block it came from. The render path auto-applies your workspace UTM settings (the ones in Settings → UTM) to outbound links so the click shows up correctly in Google Analytics, Plausible, whatever you use downstream.
Block click counts shown in the editor refresh every 15 minutes (denormalized from the raw events). Your analytics dashboard reads the raw events directly so the numbers there are always exact.
Analytics
/bio/analytics gives you:
- Top-line KPIs: views, unique visitors, total clicks, click-through rate.
- Activity over time chart across 7 / 30 / 90 days.
- Block performance — per-block clicks with CTR and traffic share, including a "Removed block" row so deleted-block traffic doesn't silently disappear from your totals.
- Breakdowns: top countries (with flags), devices, top referrers, UTM sources.
A small note on unique visitors: the count is approximate. Visitor identifiers rotate every UTC day (GDPR proportionality), so a visitor returning on day 2 is counted twice. The tooltip on the metric calls this out — the relative trend stays meaningful.
Custom domains
Path-based for everyone in V1: sonethub.com/u/{your-handle}. SSL handled by Vercel.
Bringing a custom domain like janedoe.com is a planned V2 feature on the Growth plan and up. The schema already accommodates it; the provisioning pipeline (Cloudflare for SaaS) lands when there's user demand.
Plan breakdown
| Free | Starter (€15) | Growth (€29) | Pro (€59) | Business (€129) | |
|---|---|---|---|---|---|
| Pages | 1 | 1 | 1 | 1 | Multi-page (V2) |
| Block count | 5 | ∞ | ∞ | ∞ | ∞ |
| Themes | 3 | 5 | 5 + overrides | All | All + white-label |
Branded /u/{slug} URL | ✅ | ✅ | ✅ | ✅ | ✅ |
| Custom domain | ❌ | ❌ | V2 | V2 | V2 |
| Agent-drafted page | ❌ | 1 / month | 5 / month | Unlimited | Unlimited |
| AI assistant block | ❌ | ❌ | ✅ (200 msgs/day) | ✅ (1000 msgs/day) | ✅ (5000 msgs/day) |
| Auto-syncing latest-posts | ❌ | ❌ | ✅ | ✅ | ✅ |
| Geo/device targeting | ❌ | ❌ | ❌ | ✅ | ✅ |
| Paywall blocks | ❌ | ❌ | ❌ | ✅ | ✅ |
| Agency sub-clients | ❌ | ❌ | ❌ | ❌ | V2 |
Common questions
Can I rename my handle?
Yes — Edit the Handle field in page settings. Old links break, so prefer not to. Reserved handles (admin, api, common brand names) are rejected at validation.
Will Google Safe Browsing reject my page if a link goes bad later?
Outbound URLs are scanned at create-time and re-checked weekly. A flagged URL blocks the publish action with the specific threat type surfaced in the editor (MALWARE, SOCIAL_ENGINEERING, etc.). Remove or replace the URL and you can re-publish.
Can the agent A/B test my links? Not yet. The schema accommodates experiments but the UI + sweep logic is intentionally deferred — most creators don't have enough traffic for Bayesian winner detection to fire. We'll ship it properly when there's demand.
What happens to my page if I downgrade? Your page stays live on the new tier's limits. Tier-gated features that were active (extra blocks past the Free 5-cap, AI assistant on Growth → Free) are auto-disabled but never deleted — re-upgrading restores them.