Skip to content

How this was made

These docs are a derived artifact. They aren’t written from memory — they’re generated from PulseAd’s live source repositories and pinned to the exact commit each page was produced from. That’s what makes them re-syncable: when the code moves, you re-run the sync and only the affected pages change. (To do that, see Refreshing the docs.)

  • The source repos are the truth for what exists. Endpoints, agents, models, tables, CLI commands — all read from code, not recalled.
  • This repo is the truth for the mental model and point of view. It explains how the pieces fit, what to predict, and where the gotchas are.
  • Every page records its provenance. sync/manifest.json maps each page to the source paths it’s derived from and pins the commit it was last generated from. A freshness check (npm run freshness) fails the build if a page has no provenance or a link breaks.
  • Unverifiable claims don’t get published. Anything the code can’t confirm goes to _internal/needs-johnny.md instead of being guessed.

The full contract lives in AGENTS.md at the repo root; this page is the human-readable summary.

  • Astro Starlight — the docs site framework.
  • Bilingual — English at /, Korean mirror under /ko/.
  • Cloudflare Pages — static hosting.
  • The interactive bits (the AI models map) are Astro components; provider logos come from lobe-icons.

The GitHub projects these docs are pulled from

Section titled “The GitHub projects these docs are pulled from”

Every page is derived from one or more PulseAd/* repositories. Here’s what each contributes:

GitHub projectBranchWhat it holdsRead by
ai-api develop The backend brain — chat, reports, and the agents behind them agents/campaign ·agents/ ·agents/planning ·agents/reporting ·ai/history ·ai/ ·cli/ ·faq/ ·getting-started ·guides/ ·overview ·reference/capabilities ·reference/glossary ·reference/ ·timeline/deprecated ·timeline/
pulsy-frontend develop The Pulson web app. Its own model references are CI and dev tooling, not product runtime agents/campaign ·agents/ ·agents/planning ·agents/reporting ·ai/history ·faq/ ·guides/ ·overview ·timeline/
pulsead-agents master The autonomous AgentCore layer — campaign agents and the optimize cycle agents/campaign ·agents/ ·agents/reporting ·ai/history ·ai/ ·cli/ ·faq/ ·overview ·reference/capabilities ·timeline/
snowflake-semantic-agent main How the semantic layer is built and refreshed ai/history ·ai/ ·cli/ ·reference/data-model ·timeline/deprecated ·timeline/
data_semanticview main The semantic views and per-domain analysts ai/history ·ai/ ·guides/data-and-coverage ·overview ·reference/data-model ·timeline/deprecated ·timeline/
off-amazon-upload main Off-Amazon channel ingestion guides/data-and-coverage ·timeline/
aop-hermes main The AOP operator CLI — tool surface and the operator agent profiles agents/ ·ai/history ·ai/ ·cli/ ·faq/cli ·overview ·reference/capabilities ·timeline/deprecated ·timeline/
banana-bunch main Bulk image generation ai/history ·ai/ ·creative/image ·timeline/
ads-variation main Banner variation ai/history ·ai/ ·creative/image ·timeline/
video-generator main The video-generation gateway ai/history ·ai/ ·creative/video ·timeline/
portal main Prior-generation product ai/history ·timeline/deprecated ·timeline/
portal-api main Prior-generation backend ai/history ·timeline/deprecated ·timeline/
portal-frontend develop Prior-generation frontend ai/history ·timeline/deprecated ·timeline/
aop-hermes-server main The AOP fleet runtime — per-brand profiles and the fleet's default model ai/history ·ai/ ·cli/ ·faq/cli
snowflake-multi-agent main A Cortex orchestrator prototype — one commit, no activity since 2026-03-31 ai/history
growth-cell-workspace main Carries the AOP managed-agents service config ai/history
pulsy-qa main Pulsy QA evaluation pipeline (LangGraph + Snowflake) ai/history
prefect main Scheduling/orchestration for the data and report flows ai/history

That table is generated from sync/manifest.json at build time — the repo list, the branches, and the “read by” column are all derived, so they can’t drift out of date. The manifest also pins the exact commit per repo and the source paths each page reads.

“Read by” is worth reading carefully. A repo can be tracked here and still be invisible to a given page: coverage is a property of each page↔path pair, not of the repo. That column is how you check.

Source repos keep moving. When they do, refresh the docs — that page walks through re-running the sync so only the pages whose source changed get rewritten.