Docs Running a business
The growth loop
The growth loop runs content, email and experiments for a business: posts and pages on a calendar, email sequences for the waitlist, and A/B tests on the hosted page.
Open Growth in the sidebar. Only a business's owners see it. Tick Switched on to start. While the loop is off or the business is paused, nothing goes out; scheduled items wait. Over its model budget, scheduled posts and emails still go out (they cost no model time); only drafting by @steward stops.
The calendar
@steward schedules two kinds of items with growth_schedule:
- Posts to the business's social account. At its time, each one goes through the gate as "post to social", so the trust ladder decides whether it asks first.
- Extra pages at
/p/<slug>/<path>, like/p/my-business/pricing. They're served sandboxed like the main page. Only the main page's first publish needs an owner's yes; extra pages count as updates to a site that's already public, so they run on their own. An owner can lower that on Integrations and trust ("publish an extra page on a live site").
While the loop is off, growth_schedule still puts the item on the calendar, where it waits. Its answer says the loop is off, so the agent tells whoever asked. Nothing goes out until an owner switches the loop on. Then any item whose time has passed goes out on the next tick.
Every business with a page has /p/<slug>/sitemap.xml (the main page and the extra pages) and /p/<slug>/robots.txt. Search engines may index the pages while the growth loop is on, unless an owner unticks Let search engines index the pages. Otherwise pages carry noindex.
Email sequences
growth_sequence drafts 1 to 6 emails for people who join the waitlist from then on, each on a day after signup. The owners approve the sequence once, on a card. Each email then goes through the gate as "send a sequence email" (risk person): suggest first, then on its own once trusted. At most 5 sequence cards are open at once per business.
Every email has:
- the business's postal address, which an owner sets on Growth (the law requires it in marketing email);
- an unsubscribe link on the hosted domain,
/p/<slug>/unsubscribe?t=..., plus theList-Unsubscribeheaders for one-click unsubscribe in mail apps.
Opening the link asks to confirm, so link scanners don't unsubscribe anyone. An unsubscribe is checked again at send time, so an email approved after it never goes out.
A/B tests
growth_experiment tests a new version of the main page, or only its headline: the part of the page wrapped in .... It goes through the gate as "start an A/B test on the page". One test runs at a time.
- Split. Each visitor sees A or B by a hash of their address and browser, on the server. No scripts, and the same visitor always sees the same version.
- Conversion. Waitlist signups over visits, per version.
- Stopping. After the minimum sample for each version (200 visits by default), B wins when the chance it beats A is 95% or more, and loses at 5% or less. The chance comes from a Beta posterior for each version. After 10 times the minimum, or 30 days, it stops with no winner.
- Rollout. A winning B becomes the page for everyone, on its own.
- Guardrail. Once each version has a quarter of the minimum (at least 30 visits), B is rolled back if it converts at under half of A's rate and the chance it's better is 2% or less.
Each result is posted in the channel and recorded in the outcomes network (tactic "landing page ab test" or "headline ab test"). Owners can stop a test on the Growth page.
Traffic by source
Every visit to a hosted page is counted by source:
?ref=orutm_sourceon the link, if the link has one;- otherwise the referring site;
- otherwise "direct".
Tag the links you share, like https://.../p/my-business?ref=bsky.
The weekly review
Once a week, the heartbeat tells @steward to review the business's channels: visits by source for 7 and 30 days, and past tests. It posts a short review in the channel and proposes the next test. The morning brief shows each business's visits by source and the running test.
Paid ads and cross-promotion
The Growth page also has Paid ads: the monthly ad budget, what's spent and committed, and each campaign with Pause or Start. See Paid ads.
A sequence email can carry one more line: a mention of a sister business the owners of both agreed to, with its own ref code. See cross-promotion in Analytics.
Env
PUBLIC_URL: needed for sequence emails, so the unsubscribe links work.RESEND_API_KEYorRESEND_API_KEY_<SLUG>: sequence emails.BLUESKY_APP_PASSWORD_<SLUG>: posts.UNSUBSCRIBE_SECRET(optional): signs unsubscribe links. Without it, the hub makes one and keeps it in the database.
Tools
growth_schedule, growth_sequence, growth_experiment and growth_status.