Skip to content

The domains/ folder: one file and what it compiles to

What one domains/ file holds, what each key compiles to, and the checks that read it.

One domains/ file is one Domain and what it does: the site, or the email it sends from. SiteBuilder compiles it; the pages here read what it makes.

domains/leaseline.app.mdx
---
role: email
email: { mailboxes: [dana] }
---
Mail sends from dana@leaseline.app.
show
$ npx startup-builder show domains/leaseline.app.mdx
role   email                  domains/leaseline.app.mdx:2
email  { mailboxes: [dana] }  domains/leaseline.app.mdx:3
owner  SiteBuilder
leaseline.app
leaseline.app/
├── plays/
│   ├── cold-email.mdx
│   ├── warm-intros.mdx
│   ├── signup-interviews.mdx
│   ├── lead-reactivation.mdx
│   └── events-and-webinars.mdx
├── audiences/
│   ├── small-property-managers.mdx
│   ├── lapsed-leads.mdx
│   └── renewal-season.mdx
├── sequences/
│   └── cold-email-thread-founder.mdx
├── funnels/
│   └── signup.mdx
├── workflows/
│   └── outbound.mdx
├── agents/
│   ├── sales/prospector.mdx
│   └── marketing/content-lead.mdx
├── systems/
│   └── sequences.mdx
├── domains/   ← this folder
│   └── leaseline.app.mdx
├── offers/
│   ├── pro.mdx
│   └── team.mdx
├── content/
│   └── webinars/60-day-notices.mdx
├── metrics/
│   ├── q4.mdx
│   └── positive-reply-rate.mdx
└── startups.lock

The file

KeyOn the pageCompiles toChecked by
roleUsed forwhat the Domain serves; email adds its sending records (POST /{namespace}/domains/{domain}/authenticate)—
emailInboxesone Mailbox per name, each warmed before its first cold email—

Checks

CheckIt holdsWhat dev prints
S2Every send passes a code-tier Check before it goes.sequences/cold-email-thread-founder.mdx:5 S2 steps.second sends with no code-tier Check. Add guards: [customer-collision].

Refusals

CodeFix, then the call that clears it
claimCut the line, or cite the Offer term that grants it. Then POST /{namespace}/conversations/{conversation}/answer.
customer-collisionSend it to their CSM instead: the Contact leaves the List. Then POST /{namespace}/leads/{lead}/assign.
domain-authenticatedAdd the 3 DNS records shown; it passes once they resolve, often within an hour. Then POST /{namespace}/domains/{domain}/authenticate.
mailbox-warmWait for the warm-up to finish, 14 days from day 0; warm intros keep running. Then POST /{namespace}/mailboxes/{mailbox}/warm.
owned-by-a-personLeave it to the person who owns it: the draft waits in their queue. Then POST /{namespace}/tasks/{task}/assign.
priceGet the discount approved, or quote at the floor. Then POST /{namespace}/approvals/{approval}/approve.
spam-brakeSend to a smaller List, or wait an hour for the rate to fall. Then POST /{namespace}/messages/{message}/broadcast.
visit-captureServe your Site from your Domain and publish the visitor notice; lookups start when both pass. Then POST /{namespace}/domains/connect.

Calls

domains/ compiledMode try
You, to your agent

Set up leaseline.app for email and check its records, as a dry run.

curl -X POST "https://api.sb/leaseline.app/domains/domain_1/authenticate?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"

curl -X POST "https://api.sb/leaseline.app/domains/domain_1/verify?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'

await $.Domain.authenticate({ domain: 'domain_1' }, { mode: 'try' })   // domains/leaseline.app.mdx
return await $.Domain.verify({ domain: 'domain_1' }, { mode: 'try' })   // passes once the records resolve
npx startup-builder do Domain.authenticate --json '{"domain":"domain_1"}' --try
npx startup-builder do Domain.verify --json '{"domain":"domain_1"}' --try
{
  "name": "do",
  "arguments": {
    "code": "await $.Domain.authenticate({ domain: 'domain_1' }, { mode: 'try' })   // domains/leaseline.app.mdx\nreturn await $.Domain.verify({ domain: 'domain_1' }, { mode: 'try' })   // passes once the records resolve",
    "mode": "try"
  }
}
Response200application/json
{
  "checks": {},
  "domain": {
    "$id": "https://api.sb/leaseline.app/domains/domain_1",
    "$type": "Domain",
    "hostname": "leaseline.app",
    "role": "canonical",
    "state": "verifying"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Domain.verify",
    "status": "done"
  }
}
sample
CallWhat it does
POST /{namespace}/domains/{domain}/authenticateAuthenticate writes a Domain’s SPF, DKIM and DMARC records and verifies them before its first send. Emits Domain.authenticated.
POST /{namespace}/domains/{domain}/verifyVerify checks a Domain’s DNS, ownership and certificate again and records each result, with the fix for any failure. Emits Domain.verified.
POST /{namespace}/domains/connectConnect attaches a hostname a Startup already holds and verifies ownership through DNS. Emits Domain.connected.
POST /{namespace}/mailboxes/{mailbox}/warmWarm ramps a new Mailbox from a few sends a day to its cap over two to four weeks. Emits Mailbox.warmed.

Compiled, not written: edit the records it reads (compile table; cap), then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.

Contents