The content/ folder: one file and what it compiles to
What one content/ file holds, what each key compiles to, and the checks that read it.
One content/ file is one piece: who wrote it, what it came from, where it goes and what it moves. SalesBuilder compiles it, and show traces every key.
---
author: dana # a person: drafted only from her words
from: gathering:60-day-notices # the replay and transcript
distribute: { newsletter: { issue: 47 }, posts: { handles: [dana-linkedin], count: 6 }, clips: { count: 3 }, page: /guides/60-day-notices }
metric: registrant-deals
---$ npx startup-builder show content/webinars/60-day-notices.mdx
author dana content/webinars/60-day-notices.mdx:2
from gathering:60-day-notices content/webinars/60-day-notices.mdx:3
distribute { newsletter: { issue: 47 }, posts: { handles: [dana-linkedin], count: … content/webinars/60-day-notices.mdx:4
metric registrant-deals content/webinars/60-day-notices.mdx:5
owner SalesBuilderleaseline.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/
│ └── leaseline.app.mdx
├── offers/
│ ├── pro.mdx
│ └── team.mdx
├── content/ ← this folder
│ └── webinars/60-day-notices.mdx
├── metrics/
│ ├── q4.mdx
│ └── positive-reply-rate.mdx
└── startups.lockThe file
| Key | On the page | Compiles to | Checked by |
|---|---|---|---|
author | Author | who it speaks for: a person’s pieces use only their words, an agent’s are fact-checked | S7 |
from | Made from | the source it is drafted from (POST /{namespace}/content/draft) | S6 |
distribute | Goes to | one call per output: POST /{namespace}/messages/{message}/broadcast, POST /{namespace}/posts/{post}/schedule, POST /{namespace}/videos/draft, a Page | S6 |
metric | Moves | the leaf each piece is credited on, watched by POST /{namespace}/metrics/{metric}/watch | S1 |
Checks
| Check | It holds | What dev prints |
|---|---|---|
| S1 | The Metric’s parent chain reaches arr: the Result card’s path. | metrics/ |
| S6 | Content from and distribute handles resolve. | content/ |
| S7 | Every body rule compiles to an Evaluator that runs as POST /{namespace}/actions/{action}/evaluate on each draft before its window opens. | plays/ |
Refusals
| Code | Fix, then the call that clears it |
|---|---|
announced-only | Cut it; name the integration as a product fact. Then POST /{namespace}/content/draft. |
approved-pages | Cut the sentence, or publish the Page that says it. Then POST /{namespace}/sites/{site}/publish. |
category | Drop the Audience rule or framing the Venue would reject. Then POST /{namespace}/content/draft. |
cherry-pick | Restore the Metric, or show its Withheld count in the log. Then POST /{namespace}/content/draft. |
claims-resolve | Cut the claim, or name the record that backs it. Then POST /{namespace}/content/draft. |
content-evals | Fix the lines the Evaluator lists, then publish again. Then POST /{namespace}/content/draft. |
disclosure | Name your interest before the recommendation. Then POST /{namespace}/content/draft. |
display-consent | Ask the reviewer once; the Review shows when they agree. Then POST /{namespace}/messages/{message}/schedule. |
distinctness | Draft a new open or a new fact. Then POST /{namespace}/videos/draft. |
duplicate-page | Merge it into the Page that owns the intent. Then POST /{namespace}/content/draft. |
evaluator | Fix the lines the Evaluator lists, then submit the phrase again. Then POST /{namespace}/content/draft. |
fabrication-veto | Source the specific or cut it, then draft again. Then POST /{namespace}/content/draft. |
fact-check | Cut the claim, or name the record that backs it. Then POST /{namespace}/content/draft. |
fingerprint | Rewrite the reason line from this company’s own Event. Then POST /{namespace}/content/draft. |
fresh-anecdote | Pick another anecdote from the log, or log a new one. Then POST /{namespace}/content/draft. |
give-ask-guard | Cut the ask; it opens after 3 gives they act on. Then POST /{namespace}/content/draft. |
holdout-floor | Spend holds at the last winning Limit; refresh the concepts instead. Then POST /{namespace}/content/draft. |
knowledge | Name only the job on screen, or the Customer’s own words. Then POST /{namespace}/content/draft. |
leak-scan | Remove the Customer detail from the log, then publish. Then POST /{namespace}/content/draft. |
line-claim | Say “Made with” and the Brand, and nothing about the Customer. Then POST /{namespace}/content/draft. |
listing-guard | Show the listing with no guarantee and no timer. Then POST /{namespace}/content/draft. |
mention-budget | Strip the mention, or skip the answer. Then POST /{namespace}/content/draft. |
no-conditional-seat | Remove the condition from the invitation, then draft it again. Then POST /{namespace}/content/draft. |
number-token | Replace the quantity with a record token, then compile the log. Then POST /{namespace}/content/draft. |
old-employer | Cut the line about the old company; offer only their own setup. Then POST /{namespace}/content/draft. |
partner-claim | Say “works with” and the tool’s name until the Agreement is signed. Then POST /{namespace}/content/draft. |
prep-holds | Cut it from the brief; the hold lists what stays out. Then POST /{namespace}/content/draft. |
proof | Cut the claim or add the sponsor label, then send it again. Then POST /{namespace}/content/draft. |
provenance-hold | Cut the line, or cite its timestamp in the transcript. Then POST /{namespace}/content/draft. |
raise | Cut the raise or forecast mention, then compile the log. Then POST /{namespace}/content/draft. |
review-reply | Thank them and name the fix; ask nothing about the rating. Then POST /{namespace}/content/draft. |
reward | Remove the reward. Then POST /{namespace}/content/draft. |
stale-output | Refresh the ready output, then approve it once. Then POST /{namespace}/content/draft. |
store-rule | Fix the field to the listing spec; it submits once it passes. Then POST /{namespace}/content/draft. |
synthetic-media | Use a real Customer’s words with their yes, or show the product instead. Then POST /{namespace}/content/draft. |
testimonial | Cut the line, or record a person who gave Consent. Then POST /{namespace}/videos/draft. |
thread-link | Link your own Site instead. Then POST /{namespace}/content/draft. |
vote-ask | Cut the ask; say it is live and what it does. Then POST /{namespace}/content/draft. |
watched-event | Cut it; lead with what the Person announced or asked. Then POST /{namespace}/content/draft. |
words-check | Write that sentence yourself, or cut it. Then POST /{namespace}/content/draft. |
Calls
You, to your agent
Draft issue 47 from the webinar, send it, and watch what it earns, as a dry run.
curl -X POST "https://api.sb/leaseline.app/content/draft?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"article","brief":"Example brief"}'
curl -X POST "https://api.sb/leaseline.app/messages/message_1/broadcast?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"audience":"audience_1"}'
curl -X POST "https://api.sb/leaseline.app/metrics/metric_1/watch?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"threshold":1,"direction":"above"}'import { $ } from 'startup-builder'
await $.Content.draft({ kind: 'article', brief: 'Example brief' }, { mode: 'try' }) // content/ webinars/ 60-day-notices.mdx
await $.Message.broadcast({ message: 'message_1', audience: 'audience_1' }, { mode: 'try' }) // the newsletter issue
return await $.Metric.watch({ metric: 'metric_1', threshold: 1, direction: 'above' }, { mode: 'try' }) // registrant-deals
npx startup-builder do Content.draft --json '{"kind":"article","brief":"Example brief"}' --try
npx startup-builder do Message.broadcast --json '{"message":"message_1","audience":"audience_1"}' --try
npx startup-builder do Metric.watch --json '{"metric":"metric_1","threshold":1,"direction":"above"}' --try{
"name": "do",
"arguments": {
"code": "await $.Content.draft({ kind: 'article', brief: 'Example brief' }, { mode: 'try' }) // content/webinars/60-day-notices.mdx\nawait $.Message.broadcast({ message: 'message_1', audience: 'audience_1' }, { mode: 'try' }) // the newsletter issue\nreturn await $.Metric.watch({ metric: 'metric_1', threshold: 1, direction: 'above' }, { mode: 'try' }) // registrant-deals",
"mode": "try"
}
}Response200
application/json{
"watch": {
"$id": "https: //api.sb/ leaseline.app/ watches/ watch_1",
"$type": "Watch",
"selector": "Example selector",
"url": "https: //leaseline.app"
},
"metric": {
"$id": "https: //api.sb/ leaseline.app/ metrics/ metric_1",
"$type": "Metric",
"query": "Example query",
"status": "draft"
},
"action": {
"$id": "https: //api.sb/ leaseline.app/ actions/ action_1",
"operation": "Metric.watch",
"status": "done"
}
}
sample| Call | What it does |
|---|---|
POST /{namespace}/content/draft | Draft writes Content of one kind from a brief, such as an article for a question the help center could not answer. Emits Content.drafted. |
POST /{namespace}/content/{content}/publish | Publish puts a Content draft live on its Site and every Interface, once it passes the Evals for its kind. Emits Content.published. |
POST /{namespace}/posts/{post}/publish | Publish sends a Post out through its Handle once every claim it states resolves to a live record. Emits Post.published. |
POST /{namespace}/videos/draft | Draft writes a Video’s timeline from a Startup’s records, its Brand and a Template, with a draft mark on every frame. Emits Video.drafted. |
POST /{namespace}/videos/{video}/finalize | Finalize lifts a Video’s draft mark once every claim it makes reads from a live record, so its cuts can be published. Emits Video.finalized. |
POST /{namespace}/keywords/{keyword}/measure | Measure records a Keyword’s monthly search volume, difficulty, cost per click and trend in one locale. Emits Keyword.measured. |
POST /{namespace}/gatherings/{gathering}/register | Register gives a Contact a place at a Gathering, or a waitlist place when the Gathering is full. Emits Gathering.registered. |
POST /{namespace}/reviews/{review}/publish | Publish shows a Review on the Startup’s Pages with its rating counted, whatever the rating. Emits Review.published. |
| Not live yet | Use today |
|---|---|
Content.refresh | Gaps #2. Today: POST /{namespace}/content/draft with a brief. |
Content.withdraw | Gaps #2. Today: POST /{namespace}/content/draft with a brief. |
Gathering.schedule | Gaps #2. Today: POST /{namespace}/content/draft with a brief. |
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.