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 idea
Section titled “The idea”- 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.jsonmaps 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.mdinstead of being guessed.
The full contract lives in AGENTS.md
at the repo root; this page is the human-readable summary.
What it’s built with
Section titled “What it’s built with”- 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 project | Branch | What it feeds in these docs |
|---|---|---|
PulseAd/ai-api | develop | The backend “brain” — overview, capabilities, reference, the chat/report agents, and most of the AI models map |
PulseAd/pulsy-frontend | develop | The Pulson web app — the overview, guides, and the user-facing agents (the three families) |
PulseAd/pulsead-agents | master | The autonomous AgentCore layer — campaign agents, the optimize-cycle, and the autonomous side of the AI models map |
PulseAd/snowflake-semantic-agent | main | How the semantic layer is built/refreshed — the data model |
PulseAd/data_semanticview | main | The semantic views and per-domain analysts — the data model |
PulseAd/off-amazon-upload | main | Off-Amazon channel ingestion — data & coverage |
PulseAd/aop-hermes | main | The operator tool surface — the aop CLI and the read-vs-write detail in capabilities |
PulseAd/banana-bunch | main | Bulk image generation — creative |
PulseAd/ads-variation | main | Banner variation — creative |
PulseAd/video-generator | main | The video-generation gateway — creative |
PulseAd/portal · portal-api · portal-frontend | main/develop | The prior-generation product — the product timeline and what’s deprecated |
The authoritative, machine-readable version of this mapping — including the exact
pinned commit per repo and the source paths each page derives from — is
sync/manifest.json.
How to keep it current
Section titled “How to keep it current”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.