Audit · 2026-05-13

Automation.

What I can post automatically, what's partial, what's blocked - plus a tight list of what I still need from you to ship draft-creation for every brand. Nothing publishes without your explicit approval per asset.

Last audit: 2026-05-13 · Run by Claude · Auto-rerun weekly Mondays
8
Channels live
2
Partial / scoped
4
Blocked on input
5
Asks for you
3
Skipped (your call)

01Channels I can draft to right now

Every entry below has working credentials and an existing or new script. All create DRAFTS - none publish live. Each links to its draft surface for your manual review and scheduling.

jayowenlive.com blog post Jay
Reads jay/anchor-essay.md + the rendered blog-cover.png, inserts a new BlogPost entry into artifacts/jay-owen/src/data/blog.ts (file-based blog), copies cover image, and creates a draft/blog-<slug> git branch. NOT pushed - you merge to main when ready, Replit auto-deploys.
script: scripts/publish/publish_jayowenlive.py · repo: github.com/jayowen/Jay-Owen-Live
Live Draft branch + merge
businessbldrs.com blog BB
Direct Neon Postgres write to blog_articles. Bypasses the Next.js admin auth wrapper entirely — same outcome (row in DB), no admin login needed. Always inserts with is_published=false so the post is invisible to the public site until Jay flips the flag in the admin UI. Schema verified live 2026-05-13: 419 articles, 307 published.
script: scripts/publish/publish_businessbldrs.py · DB: Neon Postgres (us-west-2)
Live Draft row (is_published=false)
HubSpot marketing email Jay's BB list
Verified live: Hub 485253. Creates a draft marketing email using the proven distribute.py patterns. Subject + preview + body all wire correctly. Appears in HubSpot's email list for your manual review + scheduling.
script: scripts/publish/publish_hubspot_email.py (wraps bb-marketing-ops/scripts/distribute.py)
Live Draft
HubSpot social broadcasts LinkedIn · FB · X/Twitter
distribute.py already supports 5 broadcast channels via HubSpot Social: LinkedIn Jay personal, LinkedIn BB Company, Facebook Jay, Facebook BB, X/Twitter. Schedules with date offsets - all default to "queued" state, you approve each one. Twitter [link] expansion math is handled.
script: bb-marketing-ops/scripts/distribute.py queue --package <week>/
Live Queue (manual approve)
Future Focused Leaders Circle FFL
Admin v2 API access confirmed. Token + base URL documented in project docs. Posts created with is_published=false so they appear as drafts in Circle admin UI. Supports tiptap_body for rich content.
script: scripts/publish/publish_circle.py --brand ffl · base: community.futurefocusedevents.com
Token must be exported as FFL_CIRCLE_API_TOKEN env var before run (it's only in project docs, not in shared .env yet)
Live Unpublished draft
Agency Builders Circle AB
Admin v2 API access live in post-call-workflow/.env. Same draft-only pattern as FFL. Used today by the /post-call workflow.
script: scripts/publish/publish_circle.py --brand ab · base: community.agencybuilders.com
Live Unpublished draft
Slack message drafts Any channel
Slack MCP available. I can write drafts to any channel I'm in (or DM-to-self as a draft surface). Useful for #jay-engine status updates, "ready for review" pings, scheduled-job notifications. No bot token setup required - rides on your Slack login.
tool: mcp__claude_ai_Slack__slack_send_message_draft
Pick a channel for engine notifications (e.g. #jay-engine) - I'll only post drafts there until you say "Send"
Live Draft message
Gmail email drafts Any recipient
Gmail MCP creates email drafts in your inbox. Useful for follow-up emails after stage events, personal outreach drafts, etc. Drafts only - never sends.
tool: mcp__claude_ai_Gmail__create_draft
Live Gmail draft

02Partial - works with one missing piece

These channels have most of the wiring but need one specific input from you. Listed in priority order by how often you'd use them weekly.

YouTube upload (Short / long-form) Jay channel
Env vars stubbed in bb-marketing-ops/.env (YOUTUBE_CLIENT_ID, YOUTUBE_CLIENT_SECRET) but not populated. Needs OAuth playground run once to capture a refresh token.
stub: bb-marketing-ops/.env
Run the YouTube Data API OAuth flow once with your @jayowenlive Google account, paste refresh token into .env
Partial Needs OAuth setup
Instagram direct posting Jay · BB · AB · FFL
Currently routes through HubSpot Social (Facebook Business → Instagram link). That works for the BB and Jay accounts. For IG-direct via Meta Graph API (needed if you ever leave HubSpot for IG), needs a Meta Business Suite + IG Graph API connection.
today: via HubSpot Social · future: Meta Graph API
No action - works today through HubSpot for BB + Jay. AB + FFL would need their own Meta Business connections if going direct.
Partial Works via HubSpot

03Blocked - missing input from you

Channels I can't draft to yet. Each is listed with exactly what's needed to unblock.

agencybuilders.com blog AB
The redesign repo (agencybuilders-redesign) doesn't have a Blog page yet. Pages exist for Home, Webinars, Community, Glossary, Events, etc. but no /blog route.
repo: agencybuilders-redesign
Decision: skip AB blog (route through AB Circle only) OR I add a /blog route to the redesign? AB content has Circle + LinkedIn + email already - blog is optional.
Blocked Needs decision
LinkedIn direct (non-HubSpot) Jay · BB · AB
Currently posts go through HubSpot Social, which works. Direct LinkedIn API would let us post carousels (which HubSpot Social doesn't support natively) and gives finer control. Stubs exist in .env but never set up.
stub: bb-marketing-ops/.env · today: via HubSpot
Only worth setting up if you want native carousel posts. Most channels work today via HubSpot.
Blocked Nice to have
TikTok direct posting @jayowenlive
Yes, possible. TikTok has a Content Posting API. Two modes: (a) Inbox/Draft mode — video uploads to your TikTok app drafts, you finish caption/hashtags/cover in the app and hit Publish. No production review required, sandbox works for your own account. (b) Direct Post mode — video goes live immediately but requires app review from TikTok (1-4 weeks). Recommend Inbox mode for us.
api: developers.tiktok.com Content Posting API · scope: video.upload
Sign up at developers.tiktok.com → create app under "Content Posting API" → I capture client_key + secret → OAuth your @jayowenlive TikTok account once → done
Blocked Needs TikTok app
X.com direct posting (native threads) @jayowenlive · @bbldrs
Yes, possible, $0/mo. X API v2 Free tier = 1500 posts/month write-only (we'd use ~40/mo). What it unlocks vs. HubSpot Social: native threads (reply-to-self chains), quote-tweets, finer scheduling, in-thread media. HubSpot Social only posts single tweets. Setup is instant approval.
api: developer.x.com Free tier · scope: tweet.write
Sign up at developer.x.com → create Free-tier app → I capture client_id + secret → OAuth 2.0 PKCE flow once → done
Blocked Needs X developer app

03bSkipped — your call

Channels you explicitly chose not to set up. Listed for completeness so the picture stays honest.

Threads All brands
Skipped 2026-05-13. Re-evaluate if Threads becomes a strategic priority.
Skipped
Bluesky All brands
Skipped 2026-05-13. Re-evaluate if Bluesky becomes a strategic priority.
Skipped
Buffer / Hootsuite All brands
Skipped 2026-05-13. HubSpot Social covers the void. Re-evaluate if AB or FFL adds native social channels HubSpot can't reach.
Skipped

04What I need from you

Ranked by impact. Top three would unblock 90% of weekly automation. Anything below #3 is optional polish.

businessbldrs.com blog publish Resolved · 2026-05-13
You gave me direct Neon Postgres access. Built publish_businessbldrs.py that inserts drafts (is_published=false) — bypasses the Next.js admin auth wrapper entirely. Schema verified, dry-run tested. Ready for first live test draft when you say go.
Approve "yes do a live test draft" → I'll insert one labeled "claude-test-..." you can delete from admin UI
BB blog test draft Resolved · 2026-05-13
Test draft published + deleted. End-to-end flow verified: markdown → Postgres INSERT → live BB site at /resources/articles/<slug> → DELETE back to clean. Cover image cross-origins fine. Ready for real publishes in the weekly cycle.
TikTok developer app High · 10 min
Direct TikTok posting is possible via Content Posting API. Recommend Inbox/Draft mode — videos upload as drafts to your TikTok app, you finish caption/cover and publish manually. No production review required.
developers.tiktok.com → create app → "Content Posting API" → paste client_key + secret to me → OAuth your @jayowenlive once
X.com developer app High · 5 min
Free tier = 1500 posts/mo. Unlocks native threads, quote-tweets, in-thread media — HubSpot Social only does single tweets. Instant approval.
developer.x.com → Free tier → create project + app → paste client_id + secret to me → OAuth 2.0 PKCE flow once
#jay-engine Slack channel High · 2 min
Create a dedicated channel for engine notifications. I'll drop daily status messages there (Mon anchor scan, Wed cascade ready, Fri metrics digest, anything stuck). All as drafts - I never send without your "Send" approval.
Create channel, invite me/the Claude bot, then tell me "use #jay-engine"
AB blog decision Medium · 1 min
agencybuilders.com has no blog page. AB content currently goes to Circle + LinkedIn + email. Two options: (a) skip blog, route everything to Circle (which the AB audience uses heavily), (b) I add a /blog route to the AB redesign.
Just say "skip" or "add blog route"
FFL Circle token in shared .env Medium · 1 min
Token exists at ~/Documents/Claude/Projects/Future Focused Leaders Community/circle-api-access.md but isn't in a shared .env. I'd like to put it in jay-content-engine/.env (gitignored) so publish_circle.py picks it up automatically.
Approve "yes copy FFL_CIRCLE_API_TOKEN into jay-content-engine/.env" - I'll do it
YouTube OAuth refresh token Optional · 10 min
Only needed if you want me to auto-upload the weekly YouTube short as a private/unlisted draft. Manual upload via Opus Clip is fine for now. Worth setting up if you start shipping more than one short per week.
Run the YouTube Data API OAuth playground once with @jayowenlive, paste refresh token
Confirm IG posting routing Optional · 1 min
Currently Jay personal IG and BB IG both flow through HubSpot Social → Meta Business → IG link. Confirm those links are still active in HubSpot. If yes, no action needed. AB + FFL would need their own connections if/when those accounts go live.
Just confirm "yes still active" or "broken"

05The approval flow

Once unblocked, every weekly asset follows the same draft-only path. Nothing posts without your explicit per-asset "Send" / "Y".

1 → Mon — I source anchor candidates from Granola/Fathom, propose 3-5 in /anchor-inbox
2 → Tue — You record/write the anchor (your voice only)
3 → Wed — I cascade to 4 brands, render carousels + covers, fill week portal
4 → Wed PM — You verdict each asset in the portal (Ship / Rework / Kill)
5 → Thu — For each "Ship": I run the matching publish_*.py script → creates a draft in HubSpot/Circle/Jay-Owen-Live/Slack/Gmail
6 → Thu PM — You review each draft in its native UI (HubSpot inbox, Circle admin, Git diff, etc.)
7 → Fri — You hit publish/send/merge in each native UI. Nothing ever auto-publishes.
8 → Sun — FFL members-first drop fires (manually by you, draft pre-built by me)

06Publish scripts

All draft-creators live under jay-content-engine/scripts/publish/. Each takes the week folder (or single markdown path) and creates a draft in the destination.

publish_businessbldrs.py New · 2026-05-13
Direct Neon Postgres INSERT into blog_articles with is_published=false. Conflict-guard: skips if slug already exists. Cover image references jay-content-engine.pages.dev/covers/<weekId>/bb.png. Markdown → HTML conversion built in (paragraphs, headings, lists, bold, italic, links).
publish_jayowenlive.py New
Inserts anchor essay into Jay-Owen-Live blog.ts, copies cover image, creates draft/blog-<slug> branch. Doesn't push - you merge to main when ready.
publish_circle.py --brand <ab|ffl> New
Creates an unpublished post in the relevant Circle community. is_published=false ensures it appears as a draft in Circle's admin UI.
publish_hubspot_email.py New
Single-asset wrapper around distribute.py's create_email_draft. Creates a HubSpot marketing email draft from one markdown file.
bb-marketing-ops/scripts/distribute.py Existing · proven
Full-week queue mode: HubSpot email + 5 social broadcasts at scheduled offsets. Already shipped, already used. Just point it at a week folder.
post-call-workflow/circle_client.py Existing
Underlying Circle Admin v2 client (list_spaces, upload_file, create_post with tiptap_body). Reused by publish_circle.py with env override.