PowerMarketing Docs
Back to App

Core Concepts

Reference vocabulary for PowerMarketing. Read this first to understand how the platform works — how humans and agents collaborate to produce and publish content continuously.


Platform Purpose

PowerMarketing is an AI-powered content distribution platform for B2B brands. It automates the full loop from content planning → AI generation → human review (when needed) → publishing. It is multi-brand: one installation serves multiple brands, each with its own settings, API keys, and calendar.

Human action AI Agent Approval gate Auto-publish Output


Human vs Agent — Who Does What

PowerMarketing splits work between humans (strategy, review, approval) and AI agents (generation, publishing). Understanding this split is the key to using the platform well.

Human
🎯
Brand strategy
Brand voice, content pillars, messaging framework, target segments — configured once via Quick-Start or AI Assist.
📅
Content planning
Fill the calendar with topics. Use "✦ Plan this week" for AI-suggested entries, or add manually.
👁
Review & approve (Track 2 only)
Articles, videos, email go to the Decision Inbox. Human reads the AI draft, then approves or rejects.
⚙️
Publication rules
Decide which content types auto-publish vs require review — set once in Settings → Automation.
AI Agents
🔄
ContentDispatcher
Reads calendar entries, orchestrates the other agents, routes results to Track 1 or Track 2.
✍️
ContentCreator
Writes the post for each platform using brand voice, pillars, and live trend data (when enabled).
🚀
Publisher
Posts approved content to the target social platform via its API. Handles Track 1 automatically.
Scheduler
Polls every 15 minutes. Fires each brand's dispatcher at its configured UTC time. Fully automatic.

Brands

A Brand is the central entity. Everything in PowerMarketing belongs to a brand: posts, calendar entries, leads, subscribers, credentials, API keys.

FieldPurpose
Brand VoiceTone guide — how the brand sounds, what to avoid. Min 80 chars for dispatch.
Content Pillars3–6 strategic topic areas. AI rotates content through these.
Messaging FrameworkProblem / solution / proof / benefit narrative.
Target SegmentsAudience description for AI to tailor content.
LLM Provider & ModelWhich AI model generates content for this brand.
API KeysClaude / DeepSeek / Moonshot / Resend / Tavily — per brand, not global.
Dispatch TimeUTC time the scheduler auto-dispatches calendar entries.

Users & Roles

PowerMarketing has its own user accounts — no external authentication required. JWT Bearer tokens, bcrypt passwords, 8-hour sessions.

RoleAccess
superadminAll brands, user management, all settings
adminAssigned brands — full settings including credentials
operatorAssigned brands — content, decisions, calendar, leads
viewerAssigned brands — read-only

The Two-Track Publication Pipeline

This is the central design of PowerMarketing. Every AI-generated post takes one of two paths, determined by its content type and the brand's publication rules.

Track 1 — Auto-publish ⚡

Zero human action required. The dispatcher generates content and publishes it directly. Used for time-sensitive, lightweight content: news, trend_scan, short_post, repurposed.

Track 1 — Auto-publish flow
📅
Human
Calendar entry
🔄
Agent
Dispatcher
✍️
Agent
ContentCreator
Auto
Publication rules
🚀
Agent
Publisher
Output
Live post
No human action needed
Track 1 posts appear in the Command Center's overnight summary bar after they've been published. The user checks results — they do not intervene in production.

Track 2 — Approval required 👁

Human reviews the AI draft before it goes live. Used for strategic, high-visibility content: article, post, story, carousel. video and email are always Track 2 — this cannot be changed.

Track 2 — Approval flow
📅
Human
Calendar entry
🔄
Agent
Dispatcher
✍️
Agent
ContentCreator
🔔
Gate
Decision Inbox
👁
Human
Review & approve
🚀
Agent
Publisher
Output
Live post
🛡️
Approval gate — human always in the loop
The Decision Inbox queues every Track 2 post. The human reads the AI draft, optionally edits it, then clicks Approve. Only then does the Publisher agent send it to the platform.

Safe fallback: If a Track 1 auto-publish fails (no credential configured, API error), the post falls back to the Track 2 Decision Inbox instead of being lost.

Per-entry override: Any calendar entry can have its "Require approval" checkbox checked, forcing Track 2 regardless of the brand's publication rules.


The Agent Crew

PowerMarketing runs eight specialised AI agents. Each has a single responsibility and a defined trigger.

ContentDispatcher
⏰ Scheduler / Manual
Reads calendar entries, calls ContentCreator for each platform, routes results to Track 1 or Track 2. The orchestrator.
ContentCreator
⚙️ Dispatcher / Manual
Writes post content for one platform. Uses brand voice, pillars, and live trend data (Tavily) when mode is trend_scan.
ContentRepurposer
👤 Manual
Adapts an existing published post for a new platform. Preserves the core message, adjusts format and tone.
EngagementAnalyst
👤 Manual
Analyses post performance context and produces recommendations for content improvement.
LeadNurture
👤 Manual
Drafts a personalised outreach message for a lead based on their role, company, and the brand's voice.
VideoCreator
👤 Manual
Writes video script, storyboard, voiceover text, and caption from a topic and format brief.
Publisher
⚡ Auto (Track 1) / Manual
Posts approved content to social platforms via their API. Called by Dispatcher for Track 1, or manually for Track 2.
Planner
👤 Manual / AI Command
Reads content pillars and the audience funnel, then proposes a whole-funnel weekly plan (content + newsletter + nurture) as one approvable Decision.

Headless Audience Acquisition

The audience subscribes on each product's own website — never inside PowerMarketing. PowerMarketing is the headless brain behind the brand: it ingests subscribers from the product's site, social, and feeds, then manages and nurtures them. Three ingestion paths feed one unified per-brand contacts store:

  • A · Embeddable widget — a tiny vanilla-JS snippet (copy it from Settings → Ingestion) the product site drops onto a page.
  • B · Ingest API + webhook — the product backend POSTs to /api/ingest/{public_key}/subscribe (or sends an HMAC-verified webhook).
  • C · Pull connectors — PowerMarketing pulls from a REST source or CSV the product already uses.

Every brand has an ingest_public_key (shown and rotatable in Settings → Ingestion). Capture uses double opt-in for GDPR/CAN-SPAM compliance, and a public unsubscribe link is always honored. The confirm and unsubscribe links open branded HTML pages (themed per brand, with website & close buttons) rather than raw responses. Re-subscribing is idempotent: an already-confirmed address is told “you're already subscribed” (no duplicate email), a pending address gets a fresh confirmation, and a previously unsubscribed address is re-opted-in.

🌐
Product
Widget · API · Connector
📥
Ingest
/api/ingest/{key}
✉️
Consent
Pending · opt-in email
Confirm
Clicks confirm link
📇
Output
Confirmed contact

Contacts & Lifecycle

Every captured person becomes a contact in one unified, per-brand store — with a stage, a behavioral score, a consent status, and a source. Newsletter subscribers and sales leads automatically link into the same record, matched by email — one person, one row, no matter how they arrived. The People page is the day-to-day view (filters, tags, CSV import, saved segments); click Manage → on a row for the deep contact view (event timeline, score, one-click enroll into a nurture sequence).

Behavioral scoring: email opens (+1) and clicks (+3) arrive via the Resend webhook and raise the contact's score. Crossing a threshold auto-promotes the stage — 10 → engaged, 25 → hot — so the hottest leads surface automatically.

🌱
Stage
Subscriber
📈
Stage
Engaged · score ≥ 10
🔥
Stage
Hot · score ≥ 25
🤝
Stage
Customer

Nurture Sequences

A nurture sequence is an ordered set of steps (each with a delay, a channel, and an AI prompt). Enroll a contact and the scheduler processes due steps automatically: the AI drafts the message, the autopilot level gates it, and it either sends or queues for approval — then the sequence advances. Manage sequences on the Nurture page ("Run due now" triggers them on demand).

📈
Signal
Score / stage
Scheduler
Step due
✍️
Agent
AI drafts message
🎚️
Autopilot
Gate
📨
Output
Send · or approve

Newsletter Automation

Recurring schedules assemble an auto-digest from the period's published posts. Because email is always Track 2, the digest is queued as a Decision for human approval, then sent to a segment (filtered by stage / score). A deliverability guardian automatically pauses a brand's sending if complaints or bounces spike, and the public unsubscribe link is always honored. Manage it on the Newsletters page (with a live digest preview).

📝
Source
Published posts
🧠
Agent
Digest builder
🔔
Gate
Approve (Track 2)
🎯
Segment
Stage / score
📤
Output
Sent

Autopilot — Human Supervision Dial

Every brand has an autopilot level that decides how much the crew does without asking. Set it from the Command Center dial. It gates every outward action (publish, send) — it never removes your ability to step in.

Manual
Every outward action waits for your approval. The crew drafts; you decide everything.
Review (default)
Routine content auto-publishes; strategic content (articles, video, email) waits in the approval inbox.
Auto-guardrails
The crew runs autonomously and only pauses on guardrails — budget caps, complaint spikes, missing credentials.

Earned autonomy: the dial isn't the only path to hands-off. The platform tracks how often you approve each content type without editing it; once a type crosses 20+ reviews at ≥95% unedited approvals in the last 90 days, it proposes a 🎓 Autonomy Upgrade in the approval inbox. Approving grants that content type auto-publish — even at Review level. Locked types (video, email) and per-entry "require approval" flags always keep their human gate. The intended trajectory: you approve everything at first, the system earns trust type by type, and you end up approving only exceptions.


Command Center — Mission Control

The Command Center is the operator's home screen. At a glance: live stat tiles (new contacts, pending approvals, newsletter status, monthly budget), the audience funnel, the autopilot dial, a unified approvals queue (posts, newsletters, nurture, plans), an AI command box (describe a change in plain English → the Planner proposes a plan), plus today's pipeline, "Run Agents Now", and quick actions.


Proof Library — the Trust Layer

The Proof Library is a managed set of trust assets the AI crew cites instead of inventing — testimonials, case studies, metrics, and credentials. Stored per brand (the Proof page in the sidebar); only active assets are used.

  • Proof is injected into the ContentCreator and newsletter prompts, so generated content quotes real customers and numbers — and is instructed to never fabricate proof.
  • A dedicated social_proof content type / generation mode builds a post around your proof assets.
  • The Planner sees when proof exists and can propose proof-led posts.
🏆
Human
Add proof assets
✍️
Agent
Cites real proof in content
Output
Credible, verifiable posts

The Distribution Stack Scorecard

Adoption — not just the product — wins. The Command Center scores each brand across the five layers of the AI distribution stack, each 0–100, computed from data the platform already holds, so you can see and close the gaps.

LayerQuestionScored from
AudienceWho already pays attention before you sell?Confirmed contacts
TrustWhy should users believe your AI?Proof assets + messaging framework
Workflow AccessWhere does your product enter existing behavior?Connected channels + ingestion
EducationHow do you teach the market what to do next?Content published (last 30 days)
HabitWhat makes users come back every week?Active newsletter schedule + nurture sequence

Each layer shows its score, a short detail, and a one-line "how to improve" on the Command Center's Distribution Stack card, plus an overall adoption-coverage score.


Cost Control — Optional LLM Gateway

Agents can route every LLM call through an optional LiteLLM gateway that enforces a per-brand monthly budget and picks the cheapest capable model via tiers:

TierModelUsed for
localOpen-weight via OllamaHigh-volume, low-stakes (scoring, repurposing)
midDeepSeek · MoonshotDefault working tier
frontierClaudeHigh-stakes generation & escalation

When the gateway is off, each brand uses its own provider API key directly — a graceful fallback that needs no extra infrastructure.


Plans & Self-Serve Onboarding

PowerMarketing is multi-tenant and sellable. Plan tiers map to a monthly budget and seat limit:

PlanMonthly budgetSeats
Free$51
Starter$503
Pro$50010

A public Signup page provisions a new brand, an admin user, and ingest keys in one step. Access is brand-scoped — non-members are blocked (tenant isolation).


Content Calendar

The calendar is the source of truth for what gets generated and when. Each calendar entry contains: topic, content type, platforms (comma-separated), scheduled date, optional owner, and optional "require approval" override.

One entry with platforms = linkedin,twitter creates two posts — one per platform — each generated independently for that platform's format.

Calendar Auto-Fill — "✦ Plan this week"

👤
Human
Pick week + count
🧠
Agent
Reads pillars → suggests entries
✏️
Human
Review & edit preview
📅
Output
Week planned

The Dispatcher — Sequence of Events

When dispatch runs (automatically or manually), for each pending calendar entry:

1. Create posts row (draft)
One post row per platform in the entry
2. Call ContentCreator
mode = trend_scan for news/trends · product_topic for everything else
3. Evaluate publication rules
should_auto_publish(content_type, brand, require_approval_override)
⚡ Track 1
4a. Call Publisher → published
🛡 Track 2
4b. Create Decision → inbox
5. Mark entry dispatched
LLM failures are logged; dispatcher continues with next entry

Brand Readiness

Before dispatch runs, the platform evaluates a readiness checklist. If any blocking check fails, dispatch returns 412 Precondition Failed with the full checklist. The Command Center shows an amber card with Fix → links.

  • Brand voice (80+ chars) — blocks dispatch
  • Content pillars definedblocks dispatch
  • LLM API key presentblocks dispatch
  • LLM model configuredblocks dispatch
  • Calendar entries for target dateblocks dispatch
  • Credentials for target platformsblocks dispatch
  • Auto-publish types configured — warning only
  • Tavily key (if web search enabled) — warning only

Brand Quick-Start

New brands arrive empty. The Quick-Start card auto-appears in Settings → Brand Profile. One LLM call from 3 plain-language inputs fills all four profile fields simultaneously.

👤
Human
Industry · Product · Audience
🧠
Agent
Single LLM call (10–20s)
Output
Voice · Pillars · Messaging · Segments

Generation Modes

ModeBest forWhat the AI does
product_topicArticles, thought leadershipWrites from brand perspective using voice, pillars, and messaging framework
trend_scanNews, industry updatesFetches live web content (Tavily), connects trends to brand story
competitor_signalPositioning contentDifferentiates brand against specific competitors

You never choose a mode. Since 2026-07-26 the mode is a property of the content type, declared once in the content-type registry (app/services/content_types.py) and applied everywhere — the dispatcher, the planner, and the Create page alike. Picking News means trend_scan; picking Article means product_topic. Content type and writing angle used to be two separate dropdowns, one of them hidden under Advanced options and sharing a name with a content type; that was the most confusing part of the model. competitor_signal has no content type of its own and remains available as an explicit override.


Decisions

A Decision is created for every Track 2 post. It sits in the Decision Inbox until a human acts.

  • Approve — marks post as approved, unlocks the Publish button
  • Reject — removes from queue; post stays as ai_draft

Decisions can be actioned from the Command Center inbox (inline, no navigation) or the Decisions page (full list with AI Guidance).


API Keys — Per Brand, Not Global

All API keys live in the database per-brand — never in environment variables. Configure in Settings → API Keys.

KeyUsed for
Claude / DeepSeek / MoonshotLLM content generation
Resend API keyEmail broadcasts
Resend webhook secretDelivery event webhooks
Tavily API keyLive web search for trend_scan mode
Ingest public key + webhook secretPer-brand audience capture (widget / API / connectors), rotatable in Settings → Ingestion

Scheduler

APScheduler polls every 15 minutes. On each tick it dispatches brands whose effective dispatch time (fixed, or learned from engagement in auto mode) falls within ±7 minutes of the current time. Each brand has its own independent dispatch time. Idempotent — brands already dispatched today are skipped unless ?force=true.

Around the dispatch loop, a set of background jobs keeps the engine self-sustaining: a nightly metrics refresh (04:00 UTC) pulls engagement for recent posts and feeds it back into planning and timing; weekly planning (Mon 05:00) fills the calendar; a daily top-up (05:15) re-plans any non-manual brand with an empty 3-day window; evergreen recycling (Wed 05:30, opt-in) re-queues proven winners; the autonomy check (Mon 05:45) proposes auto-publish upgrades; and the approval digest (06:30) emails pending decisions with one-click approve links. The full timetable is in the Admin Guide.


Glossary

TermDefinition
BrandTop-level workspace. All content belongs to a brand.
Calendar EntryA scheduled content idea: topic + type + platforms + date.
PostGenerated content artifact for one platform.
DecisionPending approval request for a Track 2 post.
DispatchRunning the ContentDispatcher: reads calendar, generates, routes.
Track 1Auto-publish — no human review.
Track 2Approval — human reviews before publishing.
ReadinessPre-dispatch prerequisite check (6 blocking criteria).
Quick-StartAI fills all 4 brand profile fields from 3 plain-text inputs.
Auto-FillAI-generated weekly calendar entry preview ("Plan this week ✦").
OwnerPerson whose voice the AI replicates.
CredentialOAuth token for a social platform, stored per brand.
Agent RunLogged execution of one AI agent.
ContactA captured audience member in the unified store (stage, score, consent, source).
StageLifecycle position: subscriber → engaged → hot → converted.
ScoreBehavioral score from engagement events (opens +1, clicks +3).
IngestionHow audience flows in from product sites: widget, API/webhook, or connectors.
Nurture SequenceOrdered AI-drafted steps that move a contact along the funnel.
Autopilot LevelPer-brand supervision dial: manual / review / auto-guardrails.
PlannerAgent that proposes a whole-funnel weekly plan as one approvable Decision.
SegmentA filtered slice of contacts (by stage/score/tags/source), saveable on the People page and targeted by newsletters.
People PageThe unified day-to-day audience view: subscribers, leads, and contacts merged by email, with CSV import and segments.
Engagement ScorePer-post metric from real platform data: likes + 2×comments + 3×shares, refreshed nightly.
Evergreen RecyclingOpt-in weekly job that re-queues top-performing posts verbatim after a cool-down period.
Earned AutonomyAn auto-publish grant a content type earns via ≥95% unedited approvals over 20+ reviews; proposed as a 🎓 Decision.
Approval DigestDaily 06:30 UTC email of pending decisions with one-click approve links.
Calendar Top-upDaily safety net that re-plans any non-manual brand with nothing scheduled in the next 3 days.
Best Time (auto dispatch)Dispatch mode that posts at the hour with the highest historical engagement (needs ≥10 measured posts).
PlanSubscription tier (free/starter/pro) → monthly budget + seat limits.
Proof LibraryManaged trust assets (testimonials, case studies, metrics, credentials) the AI cites — never invents.
Social ProofA content type/mode that builds a post around a proof asset.
Distribution StackThe five adoption layers (Audience, Trust, Workflow Access, Education, Habit), scored 0–100 on the Command Center.