URL: /code/files/content · Id: `page:/code/files/content`

# 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.

```mdx title="content/webinars/60-day-notices.mdx"
---
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
---
```

```text title="show"
$ 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       SalesBuilder
```

```text title="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/
│   └── leaseline.app.mdx
├── offers/
│   ├── pro.mdx
│   └── team.mdx
├── content/   ← this folder
│   └── webinars/60-day-notices.mdx
├── metrics/
│   ├── q4.mdx
│   └── positive-reply-rate.mdx
└── startups.lock
```

## The 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](/code/checks#s7) |
| `from` | Made from | the source it is drafted from (<Op verb="Content.draft" />) | [S6](/code/checks#s6) |
| `distribute` | Goes to | one call per output: <Op verb="Message.broadcast" />, <Op verb="Post.schedule" />, <Op verb="Video.draft" />, a Page | [S6](/code/checks#s6) |
| `metric` | Moves | the leaf each piece is credited on, watched by <Op verb="Metric.watch" /> | [S1](/code/checks#s1) |

## Checks
| Check | It holds | What dev prints |
| --- | --- | --- |
| [S1](/code/checks#s1) | The Metric’s parent chain reaches `arr`: the Result card’s path. | `metrics/q4.mdx:5  S1  keyResults[1].metric: demo-requests has no parent chain to arr. Set its parent: opened-deals-and-trials.` |
| [S6](/code/checks#s6) | Content `from` and `distribute` handles resolve. | `content/webinars/60-day-notices.mdx:4  S6  distribute.posts.handles: dana-x is not a connected account. Did you mean dana-linkedin?` |
| [S7](/code/checks#s7) | Every body rule compiles to an Evaluator that runs as <Op verb="Action.evaluate" /> on each draft before its window opens. | `plays/cold-email.mdx:5  S7  body: “sound friendly” compiles to no Evaluator. Write what a draft must hold or must leave out.` |

## Refusals
| Code | Fix, then the call that clears it |
| --- | --- |
| [`announced-only`](/code/refusals#check-announced-only) | Cut it; name the integration as a product fact. Then <Op verb="Content.draft" />. |
| [`approved-pages`](/code/refusals#check-approved-pages) | Cut the sentence, or publish the Page that says it. Then <Op verb="Site.publish" />. |
| [`category`](/code/refusals#check-category) | Drop the Audience rule or framing the Venue would reject. Then <Op verb="Content.draft" />. |
| [`cherry-pick`](/code/refusals#check-cherry-pick) | Restore the Metric, or show its Withheld count in the log. Then <Op verb="Content.draft" />. |
| [`claims-resolve`](/code/refusals#check-claims-resolve) | Cut the claim, or name the record that backs it. Then <Op verb="Content.draft" />. |
| [`content-evals`](/code/refusals#check-content-evals) | Fix the lines the Evaluator lists, then publish again. Then <Op verb="Content.draft" />. |
| [`disclosure`](/code/refusals#check-disclosure) | Name your interest before the recommendation. Then <Op verb="Content.draft" />. |
| [`display-consent`](/code/refusals#check-display-consent) | Ask the reviewer once; the Review shows when they agree. Then <Op verb="Message.schedule" />. |
| [`distinctness`](/code/refusals#check-distinctness) | Draft a new open or a new fact. Then <Op verb="Video.draft" />. |
| [`duplicate-page`](/code/refusals#check-duplicate-page) | Merge it into the Page that owns the intent. Then <Op verb="Content.draft" />. |
| [`evaluator`](/code/refusals#check-evaluator) | Fix the lines the Evaluator lists, then submit the phrase again. Then <Op verb="Content.draft" />. |
| [`fabrication-veto`](/code/refusals#check-fabrication-veto) | Source the specific or cut it, then draft again. Then <Op verb="Content.draft" />. |
| [`fact-check`](/code/refusals#check-fact-check) | Cut the claim, or name the record that backs it. Then <Op verb="Content.draft" />. |
| [`fingerprint`](/code/refusals#check-fingerprint) | Rewrite the reason line from this company’s own Event. Then <Op verb="Content.draft" />. |
| [`fresh-anecdote`](/code/refusals#check-fresh-anecdote) | Pick another anecdote from the log, or log a new one. Then <Op verb="Content.draft" />. |
| [`give-ask-guard`](/code/refusals#check-give-ask-guard) | Cut the ask; it opens after 3 gives they act on. Then <Op verb="Content.draft" />. |
| [`holdout-floor`](/code/refusals#check-holdout-floor) | Spend holds at the last winning Limit; refresh the concepts instead. Then <Op verb="Content.draft" />. |
| [`knowledge`](/code/refusals#check-knowledge) | Name only the job on screen, or the Customer’s own words. Then <Op verb="Content.draft" />. |
| [`leak-scan`](/code/refusals#check-leak-scan) | Remove the Customer detail from the log, then publish. Then <Op verb="Content.draft" />. |
| [`line-claim`](/code/refusals#check-line-claim) | Say “Made with” and the Brand, and nothing about the Customer. Then <Op verb="Content.draft" />. |
| [`listing-guard`](/code/refusals#check-listing-guard) | Show the listing with no guarantee and no timer. Then <Op verb="Content.draft" />. |
| [`mention-budget`](/code/refusals#check-mention-budget) | Strip the mention, or skip the answer. Then <Op verb="Content.draft" />. |
| [`no-conditional-seat`](/code/refusals#check-no-conditional-seat) | Remove the condition from the invitation, then draft it again. Then <Op verb="Content.draft" />. |
| [`number-token`](/code/refusals#check-number-token) | Replace the quantity with a record token, then compile the log. Then <Op verb="Content.draft" />. |
| [`old-employer`](/code/refusals#check-old-employer) | Cut the line about the old company; offer only their own setup. Then <Op verb="Content.draft" />. |
| [`partner-claim`](/code/refusals#check-partner-claim) | Say “works with” and the tool’s name until the Agreement is signed. Then <Op verb="Content.draft" />. |
| [`prep-holds`](/code/refusals#check-prep-holds) | Cut it from the brief; the hold lists what stays out. Then <Op verb="Content.draft" />. |
| [`proof`](/code/refusals#check-proof) | Cut the claim or add the sponsor label, then send it again. Then <Op verb="Content.draft" />. |
| [`provenance-hold`](/code/refusals#check-provenance-hold) | Cut the line, or cite its timestamp in the transcript. Then <Op verb="Content.draft" />. |
| [`raise`](/code/refusals#check-raise) | Cut the raise or forecast mention, then compile the log. Then <Op verb="Content.draft" />. |
| [`review-reply`](/code/refusals#check-review-reply) | Thank them and name the fix; ask nothing about the rating. Then <Op verb="Content.draft" />. |
| [`reward`](/code/refusals#check-reward) | Remove the reward. Then <Op verb="Content.draft" />. |
| [`stale-output`](/code/refusals#check-stale-output) | Refresh the ready output, then approve it once. Then <Op verb="Content.draft" />. |
| [`store-rule`](/code/refusals#check-store-rule) | Fix the field to the listing spec; it submits once it passes. Then <Op verb="Content.draft" />. |
| [`synthetic-media`](/code/refusals#check-synthetic-media) | Use a real Customer’s words with their yes, or show the product instead. Then <Op verb="Content.draft" />. |
| [`testimonial`](/code/refusals#check-testimonial) | Cut the line, or record a person who gave Consent. Then <Op verb="Video.draft" />. |
| [`thread-link`](/code/refusals#check-thread-link) | Link your own Site instead. Then <Op verb="Content.draft" />. |
| [`vote-ask`](/code/refusals#check-vote-ask) | Cut the ask; say it is live and what it does. Then <Op verb="Content.draft" />. |
| [`watched-event`](/code/refusals#check-watched-event) | Cut it; lead with what the Person announced or asked. Then <Op verb="Content.draft" />. |
| [`words-check`](/code/refusals#check-words-check) | Write that sentence yourself, or cut it. Then <Op verb="Content.draft" />. |

## Calls

```text title="content/ compiled · Ask"
Draft issue 47 from the webinar, send it, and watch what it earns, as a dry run.
```

```ts title="content/ compiled · SDK"
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
```

```json title="content/ compiled · Response · sample"
{
  "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"
  }
}
```

| Call | What it does |
| --- | --- |
| <a id="content-draft"></a><Op verb="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`](/code/events#content-drafted). |
| <a id="content-publish"></a><Op verb="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`](/code/events#content-published). |
| <a id="post-publish"></a><Op verb="Post.publish" /> | Publish sends a Post out through its Handle once every claim it states resolves to a live record. Emits [`Post.published`](/code/events#post-published). |
| <a id="video-draft"></a><Op verb="Video.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`](/code/events#video-drafted). |
| <a id="video-finalize"></a><Op verb="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`](/code/events#video-finalized). |
| <a id="keyword-measure"></a><Op verb="Keyword.measure" /> | Measure records a Keyword’s monthly search volume, difficulty, cost per click and trend in one locale. Emits [`Keyword.measured`](/code/events#keyword-measured). |
| <a id="gathering-register"></a><Op verb="Gathering.register" /> | Register gives a Contact a place at a Gathering, or a waitlist place when the Gathering is full. Emits [`Gathering.registered`](/code/events#gathering-registered). |
| <a id="review-publish"></a><Op verb="Review.publish" /> | Publish shows a Review on the Startup’s Pages with its rating counted, whatever the rating. Emits [`Review.published`](/code/events#review-published). |

| Not live yet | Use today |
| --- | --- |
| `Content.refresh` | [Gaps #2](/code/reference#gap-content-verbs). Today: <Op verb="Content.draft" /> with a brief. |
| `Content.withdraw` | [Gaps #2](/code/reference#gap-content-verbs). Today: <Op verb="Content.draft" /> with a brief. |
| `Gathering.schedule` | [Gaps #2](/code/reference#gap-content-verbs). Today: <Op verb="Content.draft" /> with a brief. |