Dashboard
Next.js App Router, TypeScript, Tailwind CSS, TanStack Query, Recharts, and React Hook Form. Next owns browser-facing routing and proxies API calls.
Andromeda personal MVP blueprint
A build-ready specification for a local Meta ads operations system that turns signals into cited research, approved creative, measured economics, and tightly controlled campaign actions.
System architecture
The browser never talks directly to providers or FastAPI. The Next.js server proxies requests to a loopback-only Python control plane, while durable operations flow through Huey, SQLite, ClickHouse, and immutable artifacts.
The loop is directional but not autonomous authority. Deterministic policy, fresh source data, explicit approval, and post-write reconciliation sit between recommendation and action.
Next.js App Router, TypeScript, Tailwind CSS, TanStack Query, Recharts, and React Hook Form. Next owns browser-facing routing and proxies API calls.
FastAPI, Pydantic v2, SQLAlchemy 2, and Alembic. FastAPI owns provider secrets, business rules, approvals, and database writes.
Python Huey consumer with SQLite-backed jobs and scheduled tasks. Retries are classified, observable, cancelable, and idempotent.
SQLite in WAL mode stores leads, configurations, approvals, job state, cost ledger entries, and append-only audit events.
ClickHouse stores normalized performance and economics. Local Docker is the default; ClickHouse Cloud activates only when configured.
The local filesystem stores immutable research exports, prompts, scripts, assets, manifests, decision packets, and evidence bundles.
Fixture development uses local ClickHouse directly. Live Airbyte Cloud connections require a reachable ClickHouse Cloud destination or another secured reachable destination.
C:\Users\zer0cool\Documents\Playground\andromeda-mvp\
├── AGENTS.md
├── .env.example
├── apps\dashboard\ # Next.js App Router
├── services\api\ # FastAPI + SQLAlchemy + Alembic
├── services\worker\ # Huey tasks and schedules
├── clients\typescript\ # generated from FastAPI OpenAPI
├── infra\docker-compose.yml # local ClickHouse
├── data\artifacts\ # gitignored immutable outputs
├── tests\contract\
├── tests\integration\
└── docs\runbooks\
Operator model
Codex is the implementation partner, test runner, debugger, workshop guide, and human-in-the-loop operating assistant. The runtime never starts Codex CLI or Claude Code.
OpenRouter adapters perform scoring suggestions, research synthesis, and copy generation. Their outputs become typed proposals with citations, confidence, and cost—then deterministic policy decides whether the workflow can advance.
| Layer | Owns | Must not own |
|---|---|---|
| Codex | Build, test, debug, document, operate with user | Embedded runtime decisions |
| OpenRouter model | Suggestions, clustering, synthesis, draft copy | Spend approval or direct provider calls |
| Deterministic policy | Thresholds, guards, capability checks, blocking | Creative judgment |
| Human operator | Approval, typed confirmation, exceptional judgment | Bypassing hard caps in the dashboard |
| Provider adapter | Validated, idempotent, redacted execution | Unscoped orchestration |
Typed contracts
Pydantic models are the source of truth. FastAPI emits OpenAPI and a generated TypeScript client prevents dashboard drift. Contracts carry workspace ID, timestamps, trace ID, schema version, and redaction metadata.
class Connector(Protocol):
mode: ConnectorMode
def requirements(self) -> list[ConfigRequirement]: ...
def validate_config(self) -> ConfigValidation: ...
async def health(self) -> HealthReport: ...
def capabilities(self) -> set[Capability]: ...
def fixtures(self) -> list[FixtureDescriptor]: ...
async def estimate(self, request: OperationRequest) -> CostEstimate | None: ...
async def execute(self, request: OperationRequest, idempotency_key: str) -> OperationResult: ...
def classify_error(self, error: Exception) -> RetryDirective: ...
If a connector is disabled, unconfigured, or lacks a required capability, its controls disappear or become an explicit mock action. The UI never presents a button that the backend cannot safely execute.
FastAPI surface
Routes expose typed resources, not arbitrary agent prompts. Long operations return a job ID and continue through Huey. Server-sent events report progress and connector state changes.
| Group | Responsibilities | Write posture |
|---|---|---|
/v1/integrations | Status, requirements, capabilities, test and health checks | Config metadata only; never values |
/v1/leads | Manual entry, fixtures, Netlify import, enrichment, scoring, CAPI preview | PII encrypted; imports idempotent |
/v1/research | Exa, Apify, Viralo runs; evidence review; synthesis; scripts | Jobs create provenance records |
/v1/models | OpenRouter catalog, pricing and capability snapshots | Read-through cache; six-hour refresh |
/v1/creative | Estimate, approve, generate, package, inspect assets | Cost gate before queue |
/v1/analytics | ClickHouse metrics, freshness, quality and economics | Read-only application queries |
/v1/decisions | Evidence-backed campaign proposals and diffs | Proposal only |
/v1/approvals | Approve, reject, expire and revoke scoped decisions | Append-only approval ledger |
/v1/meta/actions | Dry run, execute, reconcile and rollback | Live mode opt-in, hard policy guards |
/v1/jobs | Queue visibility, retry, cancel and result pointers | State-machine transitions only |
/v1/audit | Search, inspect and export immutable audit records | No update/delete |
/v1/costs | Estimates, actuals, caps, provider and job rollups | Ledger append + reconciliation |
/v1/events/stream | SSE for jobs, connectors, approvals and action state | Read-only event stream |
POST /v1/decisions → 201 DecisionPacket(state="awaiting_approval")
POST /v1/approvals → 201 ApprovalRecord(scope_hash, expires_at)
POST /v1/meta/actions/dry-run → 200 MetaAction(preconditions, diff, rollback)
POST /v1/meta/actions/execute → 202 Job(job_id, state="queued")
GET /v1/events/stream → job.running → action.executing → action.reconciled
GET /v1/audit?trace_id=... → complete evidence and execution chain
Operator dashboard
Every screen ships with empty, mock, loading, healthy, degraded, blocked, and failure states. Actions show why they are available, what they cost, and what must happen next.
Four-hub loop, readiness score, active runs, spend caps, recent decisions, sync freshness and kill switches.
Mode, capability, required env vars, scopes, health tests, mock fixtures and provider-specific troubleshooting.
Netlify/manual/Stripe events, masked PII, enrichment facts, explainable scores, qualification policy, CAPI preview and delivery.
Queries, Reddit and Exa evidence, citation review, customer-language excerpts, optional Viralo signals, claims and scripts.
Dynamic model catalog, capability filters, price snapshots, estimates, reference assets, ElevenLabs audio and FFmpeg packaging.
Airbyte freshness, ClickHouse quality, spend, leads, qualified leads, revenue, CPA, cost per qualified lead and ROAS.
Campaign hierarchy, current snapshots, proposed diffs, policy results, approvals, typed confirmation, execution and reconciliation.
Queue, retries, provider/model costs, action history, errors, recovery instructions, evidence bundles and export manifests.
| State | Operator message | Permitted action |
|---|---|---|
| Empty | What this screen will show and the safest first step | Load fixture or open setup |
| Mock | Visible banner that outputs are deterministic fixtures | Run demo, inspect contract |
| Loading | Named operation, elapsed time, cancelability | Cancel only when safe |
| Healthy | Last check, capability and freshness | Normal workflow |
| Degraded | Missing capability or partial source failure | Retry, fallback or proceed with warning |
| Blocked | Exact policy, freshness, cost or approval blocker | Resolve prerequisite; no bypass |
| Failure | Classified error, retryability and recovery path | Safe retry, rollback or manual recovery |
Hub one
Normalize first-party events, enrich selected leads, produce explainable scores, apply deterministic qualification policy, and preview or deliver deduplicated CAPI signals.
Manual fixtures · Netlify Forms · Stripe sandbox · Apify enrichment · Meta CAPI
META_CAPI_TOKEN cannot mutate campaigns. META_SYSTEM_USER_TOKEN cannot be reused for CAPI delivery. Airbyte receives a separate analytical read credential.
{
"lead_id": "lead_fixture_001",
"score": 8.2,
"factors": [
{"name": "business_fit", "value": 1, "weight": 0.35, "evidence_ids": ["fact_12"]},
{"name": "purchase_intent", "value": 0.8, "weight": 0.30, "evidence_ids": ["event_09"]}
],
"model_suggestion": {"score": 8.6, "confidence": 0.72},
"policy_result": {"qualified": true, "rule_version": "lead-policy@1.0.0"}
}
Hub two
Current evidence becomes customer-language clusters, objections, desired outcomes, angles, and scripts. Every usable claim must point back to preserved source material.
Exa Search and Contents · Apify Reddit datasets · optional Viralo · OpenRouter synthesis
Publicly visible language may still contain personal data, copyrighted wording, or unreliable claims. Preserve provenance, paraphrase responsibly, and require a human review before it becomes an ad.
Hub three
Discover model capabilities dynamically, estimate spend before queueing, generate asynchronous assets, prefer ElevenLabs for voice, and package immutable deliverables locally with FFmpeg.
OpenRouter model catalog · image/video generation · ElevenLabs voice · FFmpeg packaging
Refresh live model and pricing data every six hours. Normalize capability, modality, limits, provider, price unit, and availability.
Show model, aspect ratio, resolution, duration, reference support, estimate, daily remaining budget, and policy result.
Queue image/video requests with idempotency keys. Poll asynchronous video, capture provider IDs, and classify retryable failures.
Use direct ElevenLabs TTS with selected voice, model, output format, character cap, and provider quota.
Assemble image/video, voice, captions, audio mix, aspect-ratio variants, branding, and thumbnails using local FFmpeg.
Freeze prompt, model, endpoint, price snapshot, references, timestamps, hashes, policy, approvals, outputs, and usage rights.
OpenRouter’s current catalog is the source of truth for supported image/video models. Direct HeyGen support remains a future adapter and requires separately verified access, capabilities, pricing, and terms.
Hub four
Airbyte and ClickHouse produce the analytical picture. The activation service takes only minimal fresh reads for preconditions, then moves a versioned decision through approval, execution, reconciliation, and rollback.
Airbyte pipelines · ClickHouse economics · decision packets · Meta Marketing API
No live action when data is stale, account currency is unknown, approved scope no longer matches current account state, a budget cap fails, or prior reconciliation is incomplete.
Provider setup runbooks
Each connector exposes mode, requirements, health, capabilities, fixtures, cost policy, and failure guidance. Secret values stay in environment variables and never return to the dashboard.
Provider menus, scopes, models, prices, endpoints, and Meta Graph versions are time-sensitive. Recheck each official source during implementation and store the verified date with every connector contract.
OPENROUTER_API_KEY=<secret>
OPENROUTER_APP_URL=http://localhost:3000
OPENROUTER_APP_NAME=Andromeda Personal MVP
OPENROUTER_TEXT_MODEL=<discovered-model-id>
OPENROUTER_MAX_JOB_USD=2
OPENROUTER_DAILY_BUDGET_USD=10
Request the live model catalog using Bearer auth plus app headers. A healthy result returns models and capability/pricing fields that normalize into a versioned snapshot. Cache for six hours; do not assume any named model remains available.
Serve a dated catalog fixture containing one text, image, and async video model with deterministic estimates and generated placeholder artifact records.
ELEVENLABS_API_KEY=<secret>
ELEVENLABS_VOICE_ID=<voice-id>
ELEVENLABS_MODEL_ID=<model-id>
ELEVENLABS_OUTPUT_FORMAT=mp3_44100_128
ELEVENLABS_MAX_CHARS_PER_JOB=3000
Call the models endpoint with the xi-api-key header. Healthy means the selected model appears and the connector can resolve—but not reveal—the selected voice ID.
Copy a short local silent/reference audio fixture and emit deterministic character usage, duration, and manifest metadata.
APIFY_TOKEN=<secret>
APIFY_ENRICHMENT_ACTOR_ID=<actor-or-task-id>
APIFY_REDDIT_ACTOR_ID=<actor-or-task-id>
APIFY_MAX_RUN_USD=1
APIFY_DAILY_BUDGET_USD=5
Call the current-user endpoint with Bearer authentication. Then validate both selected Actor/task definitions without starting a paid run. Healthy means identity and both configured resources resolve.
Return fixed enrichment facts and a small Reddit thread/comment dataset matching the normalized adapter schemas.
127.0.0.1.stripe login
stripe listen --events checkout.session.completed,payment_intent.succeeded,charge.refunded,customer.subscription.updated --forward-to http://127.0.0.1:8000/v1/leads/stripe/webhook
STRIPE_SECRET_KEY=<restricted-test-key>
STRIPE_WEBHOOK_SECRET=<whsec-from-stripe-cli>
STRIPE_MODE=sandbox
Retrieve account metadata in sandbox mode without customer records. Webhook health requires a signed test event, raw-body verification, immediate acknowledgment, and a queued background job.
Replay signed-shape JSON fixtures for successful checkout, refund, and subscription update. Deduplicate on Stripe event ID.
x-api-key.EXA_API_KEY=<secret>
EXA_DEFAULT_RESULTS=10
EXA_FETCH_FULL_TEXT=false
Run a low-volume deterministic search and request highlights for one result. Healthy means both methods return schema-valid sources with URLs and retrieval metadata.
Use a small licensed/public fixture set with frozen URLs, excerpts, hashes, and retrieval timestamps.
GOOGLE_APPLICATION_CREDENTIALS=C:\secure\andromeda-ga4-service-account.json
GA4_PROPERTY_ID=<numeric-property-id>
Run a minimal runReport against a narrow date range and one basic metric. Healthy means the property resolves and returns a valid report—even if the result has zero rows.
Load a dated GA4 metric fixture into ClickHouse and mark its source as mock:ga4.
GTM_ACCOUNT_ID=<account-id>
GTM_CONTAINER_ID=<container-id>
GTM_WORKSPACE_ID=<workspace-id>
GTM_ALLOW_DRAFT_WRITES=false
GTM_ALLOW_PUBLISH=false
List accessible accounts/containers and read the selected workspace. Only after read validation may the operator enable draft writes. Publishing remains a separate future approval workflow.
Expose a static container/workspace fixture with tags, triggers, variables, and a no-op draft diff.
META_GRAPH_API_VERSION=<current-version>
META_APP_ID=<id>
META_APP_SECRET=<secret>
META_BUSINESS_ID=<id>
META_AD_ACCOUNT_ID=act_<id>
META_PAGE_ID=<id>
META_PIXEL_ID=<dataset-or-pixel-id>
META_CAPI_TOKEN=<capi-only-secret>
META_SYSTEM_USER_TOKEN=<write-secret>
META_READ_TOKEN=<analytics-read-secret>
META_WRITE_MODE=dry_run
Serve a deterministic campaign hierarchy, CAPI response, mutable paused campaign fixture, object-version tokens, and reconciliation outcomes.
No public vendor endpoint contract has been verified. Do not invent a base URL, authentication scheme, payload, price, or rate limit.
VIRALO_MODE=disabled
VIRALO_API_BASE_URL=
VIRALO_API_TOKEN=
Expose a clearly labeled trend-signal fixture with platform, canonical URL, observed timestamp, engagement fields, topic tags, and mock provenance.
Until documentation is verified, the only valid states are disabled and mock. Live mode must fail configuration validation.
AIRBYTE_API_URL=https://api.airbyte.com
AIRBYTE_CLIENT_ID=<id>
AIRBYTE_CLIENT_SECRET=<secret>
AIRBYTE_WORKSPACE_ID=<id>
AIRBYTE_META_CONNECTION_ID=<id>
AIRBYTE_GA4_CONNECTION_ID=<id>
AIRBYTE_STRIPE_CONNECTION_ID=<id>
Obtain and refresh the short-lived access token, list the configured connections, and read each latest job. Healthy means all three IDs resolve and their latest successful sync satisfies the configured SLA.
Use fixed sync status records and load source-shaped fixtures directly into local ClickHouse. Never claim Airbyte delivered local fixture data.
andromeda database and least-privilege application user.CLICKHOUSE_MODE=local
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_DATABASE=andromeda
CLICKHOUSE_USER=andromeda_app
CLICKHOUSE_PASSWORD=<secret>
CLICKHOUSE_SECURE=false
Run SELECT 1, read migration status, query freshness metadata, and verify the app user cannot perform administrative operations.
There is no fake SQL client. Mock mode loads deterministic source fixtures into real local ClickHouse tables.
NETLIFY_ACCESS_TOKEN=<read-only-secret>
NETLIFY_SITE_ID=<site-id>
NETLIFY_FORM_NAMES=andromeda-webinar,andromeda-waitlist
NETLIFY_POLL_INTERVAL_SECONDS=300
Resolve the site and allowed forms, then request one page of submissions without importing. Healthy means the site/forms exist and the token cannot perform unrelated deployment operations.
Use fixture submissions or CSV import when no token exists. Preserve original submission ID or a deterministic CSV row hash for deduplication.
# Core
APP_ENV=local
APP_ENCRYPTION_KEY=<generate-a-32-byte-url-safe-key>
ANDROMEDA_WORKSPACE_ID=personal
FASTAPI_BASE_URL=http://127.0.0.1:8000
SQLITE_PATH=./data/andromeda.db
ARTIFACT_ROOT=./data/artifacts
# Safety
META_WRITE_MODE=dry_run
META_MAX_MUTATIONS_PER_BATCH=5
META_MAX_BUDGET_INCREASE_PCT=15
META_MAX_24H_INCREASE_MAJOR=25
META_MAX_CAMPAIGN_DAILY_BUDGET_MAJOR=100
OPENROUTER_MAX_JOB_USD=2
OPENROUTER_DAILY_BUDGET_USD=10
APIFY_MAX_RUN_USD=1
APIFY_DAILY_BUDGET_USD=5
ELEVENLABS_MAX_CHARS_PER_JOB=3000
# Provider values remain blank in .env.example
OPENROUTER_API_KEY=
OPENROUTER_APP_URL=http://localhost:3000
OPENROUTER_APP_NAME=Andromeda Personal MVP
OPENROUTER_TEXT_MODEL=
ELEVENLABS_API_KEY=
ELEVENLABS_VOICE_ID=
ELEVENLABS_MODEL_ID=
APIFY_TOKEN=
APIFY_ENRICHMENT_ACTOR_ID=
APIFY_REDDIT_ACTOR_ID=
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
EXA_API_KEY=
GOOGLE_APPLICATION_CREDENTIALS=
GA4_PROPERTY_ID=
GTM_ACCOUNT_ID=
GTM_CONTAINER_ID=
GTM_WORKSPACE_ID=
GTM_ALLOW_PUBLISH=false
META_GRAPH_API_VERSION=
META_APP_ID=
META_APP_SECRET=
META_BUSINESS_ID=
META_AD_ACCOUNT_ID=
META_PAGE_ID=
META_PIXEL_ID=
META_CAPI_TOKEN=
META_SYSTEM_USER_TOKEN=
META_READ_TOKEN=
VIRALO_MODE=disabled
VIRALO_API_BASE_URL=
VIRALO_API_TOKEN=
AIRBYTE_API_URL=https://api.airbyte.com
AIRBYTE_CLIENT_ID=
AIRBYTE_CLIENT_SECRET=
AIRBYTE_WORKSPACE_ID=
AIRBYTE_META_CONNECTION_ID=
AIRBYTE_GA4_CONNECTION_ID=
AIRBYTE_STRIPE_CONNECTION_ID=
CLICKHOUSE_MODE=local
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_DATABASE=andromeda
CLICKHOUSE_USER=andromeda_app
CLICKHOUSE_PASSWORD=
CLICKHOUSE_SECURE=false
NETLIFY_ACCESS_TOKEN=
NETLIFY_SITE_ID=
NETLIFY_FORM_NAMES=andromeda-webinar,andromeda-waitlist
Canonical proof loops
Fixtures, real AdsAgentMeta leads, and Stripe sandbox outcomes all converge on the same normalized lead, revenue, scoring, evidence, decision, and audit models.
Load a sample lead, enrich, score, create a CAPI preview, produce research, generate creative, calculate fixture metrics, and propose a Meta action.
Poll webinar and waitlist submissions, normalize and score leads, associate first-party campaign parameters, and produce quality feedback.
Receive Stripe CLI events, link revenue outcomes to lead and campaign identifiers, and update ClickHouse economics.
| Checkpoint | Fixture/manual | AdsAgentMeta | Stripe sandbox |
|---|---|---|---|
| Source ID | Fixture ID | Netlify submission ID | Stripe event ID |
| Deduplication | Fixture + version hash | Submission ID | Event ID |
| PII posture | Synthetic | Encrypted + masked | Minimal customer fields |
| Proof artifact | Complete demo audit | Lead quality trace | Revenue attribution trace |
| Done | Full loop deterministic | Cursor and score reconciled | Economics updated once |
Implementation sequence
Each phase ends with an independently demoable artifact and a workshop seed. Live credentials are not required to advance until that connector’s phase explicitly needs them.
Repository, Codex instructions, local environment, FastAPI, Next.js, SQLite WAL, Huey worker, migrations, artifacts and connector protocol.
Eight-screen navigation, four-hub overview, integration matrix, SSE job stream, audit viewer and design system.
Manual/fixture/Netlify/Stripe ingestion, PII protection, Apify enrichment, scoring, deterministic qualification and CAPI preview.
Exa, Apify Reddit, evidence preservation, synthesis, script concepts, provenance checks and unsupported-claim blocking.
OpenRouter catalog, cost estimation, image/video jobs, ElevenLabs TTS, FFmpeg packaging and creative manifests.
Airbyte configuration, ClickHouse models, source fixtures, migrations, freshness SLAs, quality tests and MetricSnapshot.
Decision packets, approval ledger, diffs, live-write guards, typed confirmation, execution, reconciliation and rollback.
Run all three proof loops, document failures, export audit packages, produce operating runbooks and convert each phase into a workshop module.
Every phase becomes: outcome → prerequisites → architecture lesson → build exercise → shipped artifact → failure drills → definition of done → optional live-provider upgrade.
Safety envelope
Dashboard controls may make caps stricter, but cannot weaken environment-configured hard limits. Model output never grants approval, raises spend, or changes policy.
Maximum five mutations in one approved batch.
Maximum increase per approved action.
Maximum aggregate increase in account currency, default USD.
Maximum daily campaign budget before policy blocks.
Maximum estimated model generation cost per job.
Maximum reconciled plus reserved model spend per day.
Maximum per Actor run / total daily spend.
Characters per job plus the provider-side key quota.
APP_ENCRYPTION_KEY.Mission Control exposes global worker pause, Meta write disable, CAPI send disable, provider generation disable, and per-connector live→mock downgrade. Kill switches are server-enforced and audit every transition.
Build path
This blueprint is intentionally open and detailed. Capable technical operators can use it as a serious solo-build map. Teams with a live business need can request a scoped implementation around their actual stack, data, constraints, and Meta account.
Bespoke Ads Agent Andromeda implementation
Lead identity, provider scopes, event quality, evidence provenance, cost controls, creative manifests, warehouse freshness, approval state, Meta object versions, reconciliation, and recovery all have to agree. A bespoke build turns this reference architecture into one controlled operating system for your business.
If the public blueprint and a few focused pointers are enough for you to build independently, that is a valid outcome. If implementation risk or opportunity cost makes a bespoke build sensible, the fit review will define why.
Yes. The architecture, contracts, provider runbooks, safety defaults, proof loops, and build sequence are public above. A capable full-stack operator can use them as a serious build map. Start with fixture mode and one proof loop instead of connecting every provider at once.
A scoped setup typically ranges from $3,000 to $10,000 USD. Cost depends on how many providers must be live, the quality of current tracking and data, the creative workflow, Meta account complexity, and deployment requirements. A simple stable implementation can continue on a $395 monthly maintenance retainer; expanded operating scope is quoted separately.
The hard work is making identities, event timing, evidence, costs, provider capabilities, data freshness, approvals, Meta object state, and recovery behavior agree under failure. The value comes from a system that remains observable and controllable when one of those assumptions breaks.
A business, agency, or growth team already running meaningful Meta campaigns with measurable lead or revenue outcomes, enough creative volume to benefit from faster iteration, and a real need to connect signal quality, creative throughput, analytics, and controlled account operations.
Acceptance and QA
The blueprint is complete when it works as a portable document. The future MVP is complete only when zero-credential boot, hard-policy enforcement, provider degradation, and recovery all pass.
Scope lock
A strong MVP is useful before every key exists. This plan deliberately separates local learning and proof from live-provider activation.
Each architecture section already includes a Workshop Seed. During implementation, convert the seeds into code-along modules only after the corresponding phase passes its acceptance tests and failure drills.
| Artifact | Andromeda Personal MVP Blueprint |
|---|---|
| Status | implementation-ready specification |
| Created | August 16, 2026 · published August 17, 2026 |
| Indexing | index,follow; canonical public resource at adsagentmeta.com/blueprint/ |
| Secrets | Placeholders only; no real account IDs, keys, tokens or customer data |
| Reference implementation | The future repository remains an implementation target, not a downloadable or running product on this page. |