This is the
open machine’s actual output — not a demo. One brief in
content-index.json → the agent composes, renders, certifies, and ships every asset below.
See it run here;
run it yourself —
the whole engine is open source. Each card links back to its storyboard (the brief + the exact composition). Built by Dom Davis. Minus the hype.
social · cell · ⟁ Nuntius
Where AI actually pays
pending render
16:9 · YouTube (long-form)
cuts · 12LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel+ Email (Resend, owned list) · SMS / MMS (Twilio) · Blog (static .xyz + Duda .com) storyboard → brief + scenesemerging tech · cell · ⟁ Augur
Explore what is next
pending render
16:9 · YouTube (long-form)
cuts · 12LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel+ Email (Resend, owned list) · SMS / MMS (Twilio) · Blog (static .xyz + Duda .com)
storyboard → brief + scenesstrategic relations · cell · ⟁ Nexus
What survives the exit?
pending render
16:9 · YouTube (long-form)
cuts · 12LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel+ Email (Resend, owned list) · SMS / MMS (Twilio) · Blog (static .xyz + Duda .com)
storyboard → brief + scenesbrand · Email Hero GIF · ⟁ Signum
Emerging tech, minus the hype
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ Email (Resend, owned list)
storyboard → brief + scenesemerging tech · longform · ⟁ Augur
Twelve months of tested in public
pending render
16:9 · YouTube (long-form)
cuts · 2YouTube Shorts 9:16 · 60s · SceneReel+ Blog (static .xyz + Duda .com)
storyboard → brief + scenesmultimedia · Screenwriting · ⟁ Lumen
Structure is cheaper than footage
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesit dev · Cyber Security · ⟁ Faber
Security is a set of habits
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesperformance · Email · ⟁ Mensor
The only audience you own
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesmultimedia · Content Strategy · ⟁ Lumen
A strategy is a refusal list
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesEmail (Resend, owned list)
The day's note — EmailBlockStack · rendered at send
- header 600×300 [html/image] · logo + nav; links live; dark-mode safe
- hero 600×600 [gif/image/html-motion] · the week's 1:1 cut as a loop, first-frame poster fallback, alt text, hosted URL
- secondary 600×400 [html/image/gif] · the one promise in copy, single accent; optional
- tertiary 600×250 [html] · the DOOR - a bulletproof button to the segment's door with the UTM spine; never a generic 'learn more'
- footer 600×200 [html] · logo · links · unsubscribe · NAP
- From nameauthored the name the inbox shows BEFORE the subject, and the first thing a reader decides on. Keep it the same across sends — changing it costs the recognition that earns the open. Never 'noreply'.
- Subjectauthored ≤ 50 chars
- Preheaderauthored ≤ 90 chars; finishes the subject's sentence
- Bodyauthored the day's letter; reads-at-the-kitchen-table register
- CTA doorauthored a segment door id; the tertiary block renders it
- Hero assetauthored the hosted GIF URL + poster + alt text
- Plain-text twin derived from the body; every client gets one
rules · subject ≤ 50 · preheader ≤ 90 · from name set, and the same one as last send · dark mode tested · Outlook shows the poster (no GIF motion) · total HTML < 102 KB (Gmail clips) · plain-text twin present · list = contacts with a consent receipt only · send window = the recipient's morning in their zone, never one flat hour · List-Unsubscribe + List-Unsubscribe-Post on EVERY bulk send: `List-Unsubscribe: <https://…>, <mailto:…>` and `List-Unsubscribe-Post: List-Unsubscribe=One-Click`. Gmail and Yahoo have required one-click unsubscribe of bulk senders since February 2024; without the headers the mail is throttled or spam-foldered no matter how good the copy is. This is the HEADER, set at the send — NOT the same thing as the rule below, which is what happens after somebody clicks it. · unsubscribe honoured at the consent root · every link carries the UTM spine, not only the door — an untagged link in the body is a click the reporting never sees
test matrix · dark mode · Outlook desktop (poster) · Gmail mobile · Apple Mail (motion) · 102 KB clip check
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
Blog (static .xyz + Duda .com)
The week's article — Article
- H1authored the episode's argument as a sentence; ≤ 70 chars
- Meta descriptionauthored ≤ 155 chars and UNIQUE across the blog — the line the search result shows, written as a promise, NOT the first 155 characters of the lede. Change it and the SERP snippet changes; leave it derived and two articles that open alike collide (the 2026-08-25 crawl reported description_duplicate on 8 URLs).
- Authorauthored the byline the page shows and the JSON-LD Person points at; must be a real person with a live author page (/blog/author/<slug>). An article with no named author is the E-E-A-T signal Google's quality guidance asks for and we do not send.
- Published dateauthored ISO date; renders as article:published_time and BlogPosting.datePublished, and orders the listing and the sitemap <lastmod>. Move it and the article moves in the feed.
- Updated dateauthored ISO date, only when the article actually changed; renders as BlogPosting.dateModified. Stamp it on an unchanged article and the freshness signal is a lie.
- OG image 1200×630 the chapter card; no typed name
- In-article hero 1600×900 optional
- 16:9 video embed the week's 16:9 cut, in-article
- Alt textauthored one line per in-article image, describing what the image SHOWS, not what it is called — the text a screen reader reads and the only thing an image search can read. An image authored with no alt text is not rendered.
- Headingsauthored one per chapter; the scan tells the story
- Canonical rel=canonical to the .xyz static page; syndication points back
- Internal linksauthored links to other articles or office pages, in the body, beyond the door CTA — a page nothing links to is an orphan and the crawler reports it as one (sitemap_orphan). Every link carries the UTM spine.
- Door linkauthored the segment door with the UTM spine, once, near the end
- Schema (JSON-LD) Organization + Person(author) + BlogPosting + BreadcrumbList, derived from the layers above. NO templated FAQPage/HowTo — those rich results were deprecated in May 2026 and FAQPage is only honest where a visible Q&A exists. Change the author, dates or description and this changes with them, because it reads them.
- Reading time derived
rules · h1 ≤ 70 · title UNIQUE across the blog (the ≤ 60-char SEO title, not just the h1 — two articles clamped to the same 60 characters are one page to a search engine) · meta description ≤ 155 and UNIQUE across the blog · author named, with a live author page · published date present; updated date only when the article changed · canonical present · one door link · at least one internal link in the body, beyond the door CTA · every image has alt text · JSON-LD present and derived from the authored layers (no hand-typed schema)
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by creative-lead
brand · Email Hero GIF · ⟁ Signum
Machine learning, when it pays
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ Email (Resend, owned list)
storyboard → brief + scenesperformance · longform · ⟁ Mensor
The signing surface
pending render
16:9 · YouTube (long-form)
cuts · 2YouTube Shorts 9:16 · 60s · SceneReel+ Blog (static .xyz + Duda .com)
storyboard → brief + scenesmultimedia · Interviews & Discussion · ⟁ Lumen
The question does the work
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesit dev · Accessibility · ⟁ Faber
Built for people you never met
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesperformance · SMS · ⟁ Mensor
A screen already in hand
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesmultimedia · Photography · ⟁ Lumen
Proof that you exist
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesmultimedia · Minus the Hype · ⟁ Lumen
One prompt, finished video
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesEmail (Resend, owned list)
The day's note — EmailBlockStack · rendered at send
- header 600×300 [html/image] · logo + nav; links live; dark-mode safe
- hero 600×600 [gif/image/html-motion] · the week's 1:1 cut as a loop, first-frame poster fallback, alt text, hosted URL
- secondary 600×400 [html/image/gif] · the one promise in copy, single accent; optional
- tertiary 600×250 [html] · the DOOR - a bulletproof button to the segment's door with the UTM spine; never a generic 'learn more'
- footer 600×200 [html] · logo · links · unsubscribe · NAP
- From nameauthored the name the inbox shows BEFORE the subject, and the first thing a reader decides on. Keep it the same across sends — changing it costs the recognition that earns the open. Never 'noreply'.
- Subjectauthored ≤ 50 chars
- Preheaderauthored ≤ 90 chars; finishes the subject's sentence
- Bodyauthored the day's letter; reads-at-the-kitchen-table register
- CTA doorauthored a segment door id; the tertiary block renders it
- Hero assetauthored the hosted GIF URL + poster + alt text
- Plain-text twin derived from the body; every client gets one
rules · subject ≤ 50 · preheader ≤ 90 · from name set, and the same one as last send · dark mode tested · Outlook shows the poster (no GIF motion) · total HTML < 102 KB (Gmail clips) · plain-text twin present · list = contacts with a consent receipt only · send window = the recipient's morning in their zone, never one flat hour · List-Unsubscribe + List-Unsubscribe-Post on EVERY bulk send: `List-Unsubscribe: <https://…>, <mailto:…>` and `List-Unsubscribe-Post: List-Unsubscribe=One-Click`. Gmail and Yahoo have required one-click unsubscribe of bulk senders since February 2024; without the headers the mail is throttled or spam-foldered no matter how good the copy is. This is the HEADER, set at the send — NOT the same thing as the rule below, which is what happens after somebody clicks it. · unsubscribe honoured at the consent root · every link carries the UTM spine, not only the door — an untagged link in the body is a click the reporting never sees
test matrix · dark mode · Outlook desktop (poster) · Gmail mobile · Apple Mail (motion) · 102 KB clip check
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
Blog (static .xyz + Duda .com)
The week's article — Article
- H1authored the episode's argument as a sentence; ≤ 70 chars
- Meta descriptionauthored ≤ 155 chars and UNIQUE across the blog — the line the search result shows, written as a promise, NOT the first 155 characters of the lede. Change it and the SERP snippet changes; leave it derived and two articles that open alike collide (the 2026-08-25 crawl reported description_duplicate on 8 URLs).
- Authorauthored the byline the page shows and the JSON-LD Person points at; must be a real person with a live author page (/blog/author/<slug>). An article with no named author is the E-E-A-T signal Google's quality guidance asks for and we do not send.
- Published dateauthored ISO date; renders as article:published_time and BlogPosting.datePublished, and orders the listing and the sitemap <lastmod>. Move it and the article moves in the feed.
- Updated dateauthored ISO date, only when the article actually changed; renders as BlogPosting.dateModified. Stamp it on an unchanged article and the freshness signal is a lie.
- OG image 1200×630 the chapter card; no typed name
- In-article hero 1600×900 optional
- 16:9 video embed the week's 16:9 cut, in-article
- Alt textauthored one line per in-article image, describing what the image SHOWS, not what it is called — the text a screen reader reads and the only thing an image search can read. An image authored with no alt text is not rendered.
- Headingsauthored one per chapter; the scan tells the story
- Canonical rel=canonical to the .xyz static page; syndication points back
- Internal linksauthored links to other articles or office pages, in the body, beyond the door CTA — a page nothing links to is an orphan and the crawler reports it as one (sitemap_orphan). Every link carries the UTM spine.
- Door linkauthored the segment door with the UTM spine, once, near the end
- Schema (JSON-LD) Organization + Person(author) + BlogPosting + BreadcrumbList, derived from the layers above. NO templated FAQPage/HowTo — those rich results were deprecated in May 2026 and FAQPage is only honest where a visible Q&A exists. Change the author, dates or description and this changes with them, because it reads them.
- Reading time derived
rules · h1 ≤ 70 · title UNIQUE across the blog (the ≤ 60-char SEO title, not just the h1 — two articles clamped to the same 60 characters are one page to a search engine) · meta description ≤ 155 and UNIQUE across the blog · author named, with a live author page · published date present; updated date only when the article changed · canonical present · one door link · at least one internal link in the body, beyond the door CTA · every image has alt text · JSON-LD present and derived from the authored layers (no hand-typed schema)
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by creative-lead
brand · Email Hero GIF · ⟁ Signum
Augmented reality, where it sells
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ Email (Resend, owned list)
storyboard → brief + scenesmultimedia · longform · ⟁ Lumen
Writing the finale
pending render
16:9 · YouTube (long-form)
cuts · 2YouTube Shorts 9:16 · 60s · SceneReel+ Blog (static .xyz + Duda .com)
storyboard → brief + scenesbrand · SMS GIF · ⟁ Signum
Emerging tech week is open
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ SMS / MMS (Twilio)
storyboard → brief + scenesmultimedia · Event Coverage · ⟁ Lumen
The event ends, the footage works
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesstaff training · Growth & Performance Marketing · ⟁ Magister
Train the team, not the agency
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesperformance · SEO · ⟁ Mensor
Search rewards the specific
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesit dev · Ask the Operator · ⟁ Faber
Do we need our own model?
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesbrand · The Stack · ⟁ Signum
Our video is React code
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesEmail (Resend, owned list)
The day's note — EmailBlockStack · rendered at send
- header 600×300 [html/image] · logo + nav; links live; dark-mode safe
- hero 600×600 [gif/image/html-motion] · the week's 1:1 cut as a loop, first-frame poster fallback, alt text, hosted URL
- secondary 600×400 [html/image/gif] · the one promise in copy, single accent; optional
- tertiary 600×250 [html] · the DOOR - a bulletproof button to the segment's door with the UTM spine; never a generic 'learn more'
- footer 600×200 [html] · logo · links · unsubscribe · NAP
- From nameauthored the name the inbox shows BEFORE the subject, and the first thing a reader decides on. Keep it the same across sends — changing it costs the recognition that earns the open. Never 'noreply'.
- Subjectauthored ≤ 50 chars
- Preheaderauthored ≤ 90 chars; finishes the subject's sentence
- Bodyauthored the day's letter; reads-at-the-kitchen-table register
- CTA doorauthored a segment door id; the tertiary block renders it
- Hero assetauthored the hosted GIF URL + poster + alt text
- Plain-text twin derived from the body; every client gets one
rules · subject ≤ 50 · preheader ≤ 90 · from name set, and the same one as last send · dark mode tested · Outlook shows the poster (no GIF motion) · total HTML < 102 KB (Gmail clips) · plain-text twin present · list = contacts with a consent receipt only · send window = the recipient's morning in their zone, never one flat hour · List-Unsubscribe + List-Unsubscribe-Post on EVERY bulk send: `List-Unsubscribe: <https://…>, <mailto:…>` and `List-Unsubscribe-Post: List-Unsubscribe=One-Click`. Gmail and Yahoo have required one-click unsubscribe of bulk senders since February 2024; without the headers the mail is throttled or spam-foldered no matter how good the copy is. This is the HEADER, set at the send — NOT the same thing as the rule below, which is what happens after somebody clicks it. · unsubscribe honoured at the consent root · every link carries the UTM spine, not only the door — an untagged link in the body is a click the reporting never sees
test matrix · dark mode · Outlook desktop (poster) · Gmail mobile · Apple Mail (motion) · 102 KB clip check
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
SMS / MMS (Twilio)
The day's text — SmsMms · rendered at send
- Bodyauthored ≤ 160 chars including the opt-out — but that is the GSM-7 limit. One emoji or one curly apostrophe flips the message to UCS-2 and the real limit is 70. One idea, one link.
- MMS loop 720×720 the 1:1 cut as a short loop; a still if the carrier strips motion
- Linkauthored one shortened link with the UTM spine, to a door
rules · body ≤ 160 incl. opt-out · encoding: GSM-7 → 160 in one message, 153 per segment when concatenated; UCS-2 → 70 and 67. One emoji or one curly apostrophe (’ “ ” — …) flips the whole message to UCS-2 and drops the limit 160 → 70 · segments: 1 — past the single-message limit for its encoding the message is billed as 2+ segments and any carrier that does not reassemble truncates it · HELP and STOP both answered — US carriers (CTIA messaging principles) require the HELP keyword alongside opt-out, not STOP alone · quiet hours (recipient zone) · sender id registered · 2 per week (Tue · Fri) · list = receipts only
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
Blog (static .xyz + Duda .com)
The week's article — Article
- H1authored the episode's argument as a sentence; ≤ 70 chars
- Meta descriptionauthored ≤ 155 chars and UNIQUE across the blog — the line the search result shows, written as a promise, NOT the first 155 characters of the lede. Change it and the SERP snippet changes; leave it derived and two articles that open alike collide (the 2026-08-25 crawl reported description_duplicate on 8 URLs).
- Authorauthored the byline the page shows and the JSON-LD Person points at; must be a real person with a live author page (/blog/author/<slug>). An article with no named author is the E-E-A-T signal Google's quality guidance asks for and we do not send.
- Published dateauthored ISO date; renders as article:published_time and BlogPosting.datePublished, and orders the listing and the sitemap <lastmod>. Move it and the article moves in the feed.
- Updated dateauthored ISO date, only when the article actually changed; renders as BlogPosting.dateModified. Stamp it on an unchanged article and the freshness signal is a lie.
- OG image 1200×630 the chapter card; no typed name
- In-article hero 1600×900 optional
- 16:9 video embed the week's 16:9 cut, in-article
- Alt textauthored one line per in-article image, describing what the image SHOWS, not what it is called — the text a screen reader reads and the only thing an image search can read. An image authored with no alt text is not rendered.
- Headingsauthored one per chapter; the scan tells the story
- Canonical rel=canonical to the .xyz static page; syndication points back
- Internal linksauthored links to other articles or office pages, in the body, beyond the door CTA — a page nothing links to is an orphan and the crawler reports it as one (sitemap_orphan). Every link carries the UTM spine.
- Door linkauthored the segment door with the UTM spine, once, near the end
- Schema (JSON-LD) Organization + Person(author) + BlogPosting + BreadcrumbList, derived from the layers above. NO templated FAQPage/HowTo — those rich results were deprecated in May 2026 and FAQPage is only honest where a visible Q&A exists. Change the author, dates or description and this changes with them, because it reads them.
- Reading time derived
rules · h1 ≤ 70 · title UNIQUE across the blog (the ≤ 60-char SEO title, not just the h1 — two articles clamped to the same 60 characters are one page to a search engine) · meta description ≤ 155 and UNIQUE across the blog · author named, with a live author page · published date present; updated date only when the article changed · canonical present · one door link · at least one internal link in the body, beyond the door CTA · every image has alt text · JSON-LD present and derived from the authored layers (no hand-typed schema)
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by creative-lead
brand · Email Hero GIF · ⟁ Signum
Immersion, and digital ownership
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ Email (Resend, owned list)
storyboard → brief + scenesit dev · longform · ⟁ Faber
What owning the code proved, and what
pending render
16:9 · YouTube (long-form)
cuts · 2YouTube Shorts 9:16 · 60s · SceneReel+ Blog (static .xyz + Duda .com)
storyboard → brief + scenessocial · Social Strategy · ⟁ Nuntius
Strategy answers who and why
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesstaff training · Data & Analytics for Marketers · ⟁ Magister
Read the number, not the mood
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesperformance · Copywriting · ⟁ Mensor
Copy is not decoration
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesmultimedia · Interviews & Discussion · ⟁ Lumen
An interview needs a question
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesit dev · Build Log · ⟁ Faber
The copy kept disappearing
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesEmail (Resend, owned list)
The day's note — EmailBlockStack · rendered at send
- header 600×300 [html/image] · logo + nav; links live; dark-mode safe
- hero 600×600 [gif/image/html-motion] · the week's 1:1 cut as a loop, first-frame poster fallback, alt text, hosted URL
- secondary 600×400 [html/image/gif] · the one promise in copy, single accent; optional
- tertiary 600×250 [html] · the DOOR - a bulletproof button to the segment's door with the UTM spine; never a generic 'learn more'
- footer 600×200 [html] · logo · links · unsubscribe · NAP
- From nameauthored the name the inbox shows BEFORE the subject, and the first thing a reader decides on. Keep it the same across sends — changing it costs the recognition that earns the open. Never 'noreply'.
- Subjectauthored ≤ 50 chars
- Preheaderauthored ≤ 90 chars; finishes the subject's sentence
- Bodyauthored the day's letter; reads-at-the-kitchen-table register
- CTA doorauthored a segment door id; the tertiary block renders it
- Hero assetauthored the hosted GIF URL + poster + alt text
- Plain-text twin derived from the body; every client gets one
rules · subject ≤ 50 · preheader ≤ 90 · from name set, and the same one as last send · dark mode tested · Outlook shows the poster (no GIF motion) · total HTML < 102 KB (Gmail clips) · plain-text twin present · list = contacts with a consent receipt only · send window = the recipient's morning in their zone, never one flat hour · List-Unsubscribe + List-Unsubscribe-Post on EVERY bulk send: `List-Unsubscribe: <https://…>, <mailto:…>` and `List-Unsubscribe-Post: List-Unsubscribe=One-Click`. Gmail and Yahoo have required one-click unsubscribe of bulk senders since February 2024; without the headers the mail is throttled or spam-foldered no matter how good the copy is. This is the HEADER, set at the send — NOT the same thing as the rule below, which is what happens after somebody clicks it. · unsubscribe honoured at the consent root · every link carries the UTM spine, not only the door — an untagged link in the body is a click the reporting never sees
test matrix · dark mode · Outlook desktop (poster) · Gmail mobile · Apple Mail (motion) · 102 KB clip check
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
Blog (static .xyz + Duda .com)
The week's article — Article
- H1authored the episode's argument as a sentence; ≤ 70 chars
- Meta descriptionauthored ≤ 155 chars and UNIQUE across the blog — the line the search result shows, written as a promise, NOT the first 155 characters of the lede. Change it and the SERP snippet changes; leave it derived and two articles that open alike collide (the 2026-08-25 crawl reported description_duplicate on 8 URLs).
- Authorauthored the byline the page shows and the JSON-LD Person points at; must be a real person with a live author page (/blog/author/<slug>). An article with no named author is the E-E-A-T signal Google's quality guidance asks for and we do not send.
- Published dateauthored ISO date; renders as article:published_time and BlogPosting.datePublished, and orders the listing and the sitemap <lastmod>. Move it and the article moves in the feed.
- Updated dateauthored ISO date, only when the article actually changed; renders as BlogPosting.dateModified. Stamp it on an unchanged article and the freshness signal is a lie.
- OG image 1200×630 the chapter card; no typed name
- In-article hero 1600×900 optional
- 16:9 video embed the week's 16:9 cut, in-article
- Alt textauthored one line per in-article image, describing what the image SHOWS, not what it is called — the text a screen reader reads and the only thing an image search can read. An image authored with no alt text is not rendered.
- Headingsauthored one per chapter; the scan tells the story
- Canonical rel=canonical to the .xyz static page; syndication points back
- Internal linksauthored links to other articles or office pages, in the body, beyond the door CTA — a page nothing links to is an orphan and the crawler reports it as one (sitemap_orphan). Every link carries the UTM spine.
- Door linkauthored the segment door with the UTM spine, once, near the end
- Schema (JSON-LD) Organization + Person(author) + BlogPosting + BreadcrumbList, derived from the layers above. NO templated FAQPage/HowTo — those rich results were deprecated in May 2026 and FAQPage is only honest where a visible Q&A exists. Change the author, dates or description and this changes with them, because it reads them.
- Reading time derived
rules · h1 ≤ 70 · title UNIQUE across the blog (the ≤ 60-char SEO title, not just the h1 — two articles clamped to the same 60 characters are one page to a search engine) · meta description ≤ 155 and UNIQUE across the blog · author named, with a live author page · published date present; updated date only when the article changed · canonical present · one door link · at least one internal link in the body, beyond the door CTA · every image has alt text · JSON-LD present and derived from the authored layers (no hand-typed schema)
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by creative-lead
brand · Email Hero GIF · ⟁ Signum
Contracts, apps, and devices
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ Email (Resend, owned list)
storyboard → brief + scenesstrategic relations · longform · ⟁ Nexus
Unsendable by default
pending render
16:9 · YouTube (long-form)
cuts · 2YouTube Shorts 9:16 · 60s · SceneReel+ Blog (static .xyz + Duda .com)
storyboard → brief + scenessocial · Content Creation · ⟁ Nuntius
Ideas are cheap, reps are not
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesemerging tech · Artificial Intelligence · ⟁ Augur
Ask what it does, plainly
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesperformance · Influencer · ⟁ Mensor
Creator spend needs a control
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesmultimedia · Event Coverage · ⟁ Lumen
Coverage is planned, not caught
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenessocial · Minus the Hype · ⟁ Nuntius
Set the agent, walk away
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesEmail (Resend, owned list)
The day's note — EmailBlockStack · rendered at send
- header 600×300 [html/image] · logo + nav; links live; dark-mode safe
- hero 600×600 [gif/image/html-motion] · the week's 1:1 cut as a loop, first-frame poster fallback, alt text, hosted URL
- secondary 600×400 [html/image/gif] · the one promise in copy, single accent; optional
- tertiary 600×250 [html] · the DOOR - a bulletproof button to the segment's door with the UTM spine; never a generic 'learn more'
- footer 600×200 [html] · logo · links · unsubscribe · NAP
- From nameauthored the name the inbox shows BEFORE the subject, and the first thing a reader decides on. Keep it the same across sends — changing it costs the recognition that earns the open. Never 'noreply'.
- Subjectauthored ≤ 50 chars
- Preheaderauthored ≤ 90 chars; finishes the subject's sentence
- Bodyauthored the day's letter; reads-at-the-kitchen-table register
- CTA doorauthored a segment door id; the tertiary block renders it
- Hero assetauthored the hosted GIF URL + poster + alt text
- Plain-text twin derived from the body; every client gets one
rules · subject ≤ 50 · preheader ≤ 90 · from name set, and the same one as last send · dark mode tested · Outlook shows the poster (no GIF motion) · total HTML < 102 KB (Gmail clips) · plain-text twin present · list = contacts with a consent receipt only · send window = the recipient's morning in their zone, never one flat hour · List-Unsubscribe + List-Unsubscribe-Post on EVERY bulk send: `List-Unsubscribe: <https://…>, <mailto:…>` and `List-Unsubscribe-Post: List-Unsubscribe=One-Click`. Gmail and Yahoo have required one-click unsubscribe of bulk senders since February 2024; without the headers the mail is throttled or spam-foldered no matter how good the copy is. This is the HEADER, set at the send — NOT the same thing as the rule below, which is what happens after somebody clicks it. · unsubscribe honoured at the consent root · every link carries the UTM spine, not only the door — an untagged link in the body is a click the reporting never sees
test matrix · dark mode · Outlook desktop (poster) · Gmail mobile · Apple Mail (motion) · 102 KB clip check
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
Blog (static .xyz + Duda .com)
The week's article — Article
- H1authored the episode's argument as a sentence; ≤ 70 chars
- Meta descriptionauthored ≤ 155 chars and UNIQUE across the blog — the line the search result shows, written as a promise, NOT the first 155 characters of the lede. Change it and the SERP snippet changes; leave it derived and two articles that open alike collide (the 2026-08-25 crawl reported description_duplicate on 8 URLs).
- Authorauthored the byline the page shows and the JSON-LD Person points at; must be a real person with a live author page (/blog/author/<slug>). An article with no named author is the E-E-A-T signal Google's quality guidance asks for and we do not send.
- Published dateauthored ISO date; renders as article:published_time and BlogPosting.datePublished, and orders the listing and the sitemap <lastmod>. Move it and the article moves in the feed.
- Updated dateauthored ISO date, only when the article actually changed; renders as BlogPosting.dateModified. Stamp it on an unchanged article and the freshness signal is a lie.
- OG image 1200×630 the chapter card; no typed name
- In-article hero 1600×900 optional
- 16:9 video embed the week's 16:9 cut, in-article
- Alt textauthored one line per in-article image, describing what the image SHOWS, not what it is called — the text a screen reader reads and the only thing an image search can read. An image authored with no alt text is not rendered.
- Headingsauthored one per chapter; the scan tells the story
- Canonical rel=canonical to the .xyz static page; syndication points back
- Internal linksauthored links to other articles or office pages, in the body, beyond the door CTA — a page nothing links to is an orphan and the crawler reports it as one (sitemap_orphan). Every link carries the UTM spine.
- Door linkauthored the segment door with the UTM spine, once, near the end
- Schema (JSON-LD) Organization + Person(author) + BlogPosting + BreadcrumbList, derived from the layers above. NO templated FAQPage/HowTo — those rich results were deprecated in May 2026 and FAQPage is only honest where a visible Q&A exists. Change the author, dates or description and this changes with them, because it reads them.
- Reading time derived
rules · h1 ≤ 70 · title UNIQUE across the blog (the ≤ 60-char SEO title, not just the h1 — two articles clamped to the same 60 characters are one page to a search engine) · meta description ≤ 155 and UNIQUE across the blog · author named, with a live author page · published date present; updated date only when the article changed · canonical present · one door link · at least one internal link in the body, beyond the door CTA · every image has alt text · JSON-LD present and derived from the authored layers (no hand-typed schema)
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by creative-lead
brand · Email Hero GIF · ⟁ Signum
Eight technologies, one rule
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ Email (Resend, owned list)
storyboard → brief + scenesit dev · longform · ⟁ Faber
What the season proved, and what it
pending render
16:9 · YouTube (long-form)
cuts · 2YouTube Shorts 9:16 · 60s · SceneReel+ Blog (static .xyz + Duda .com)
storyboard → brief + scenesbrand · SMS GIF · ⟁ Signum
The edge is owned data
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ SMS / MMS (Twilio)
storyboard → brief + scenesstrategic relations · Public Relations · ⟁ Nexus
Coverage is not credibility
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesemerging tech · Machine Learning · ⟁ Augur
Pattern work, on your data
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesperformance · SaaS · ⟁ Mensor
Trials are not revenue
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenessocial · Social Media Management · ⟁ Nuntius
Posting is not managing
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesemerging tech · Receipts · ⟁ Augur
7.5 seconds to 10 milliseconds
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesEmail (Resend, owned list)
The day's note — EmailBlockStack · rendered at send
- header 600×300 [html/image] · logo + nav; links live; dark-mode safe
- hero 600×600 [gif/image/html-motion] · the week's 1:1 cut as a loop, first-frame poster fallback, alt text, hosted URL
- secondary 600×400 [html/image/gif] · the one promise in copy, single accent; optional
- tertiary 600×250 [html] · the DOOR - a bulletproof button to the segment's door with the UTM spine; never a generic 'learn more'
- footer 600×200 [html] · logo · links · unsubscribe · NAP
- From nameauthored the name the inbox shows BEFORE the subject, and the first thing a reader decides on. Keep it the same across sends — changing it costs the recognition that earns the open. Never 'noreply'.
- Subjectauthored ≤ 50 chars
- Preheaderauthored ≤ 90 chars; finishes the subject's sentence
- Bodyauthored the day's letter; reads-at-the-kitchen-table register
- CTA doorauthored a segment door id; the tertiary block renders it
- Hero assetauthored the hosted GIF URL + poster + alt text
- Plain-text twin derived from the body; every client gets one
rules · subject ≤ 50 · preheader ≤ 90 · from name set, and the same one as last send · dark mode tested · Outlook shows the poster (no GIF motion) · total HTML < 102 KB (Gmail clips) · plain-text twin present · list = contacts with a consent receipt only · send window = the recipient's morning in their zone, never one flat hour · List-Unsubscribe + List-Unsubscribe-Post on EVERY bulk send: `List-Unsubscribe: <https://…>, <mailto:…>` and `List-Unsubscribe-Post: List-Unsubscribe=One-Click`. Gmail and Yahoo have required one-click unsubscribe of bulk senders since February 2024; without the headers the mail is throttled or spam-foldered no matter how good the copy is. This is the HEADER, set at the send — NOT the same thing as the rule below, which is what happens after somebody clicks it. · unsubscribe honoured at the consent root · every link carries the UTM spine, not only the door — an untagged link in the body is a click the reporting never sees
test matrix · dark mode · Outlook desktop (poster) · Gmail mobile · Apple Mail (motion) · 102 KB clip check
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
SMS / MMS (Twilio)
The day's text — SmsMms · rendered at send
- Bodyauthored ≤ 160 chars including the opt-out — but that is the GSM-7 limit. One emoji or one curly apostrophe flips the message to UCS-2 and the real limit is 70. One idea, one link.
- MMS loop 720×720 the 1:1 cut as a short loop; a still if the carrier strips motion
- Linkauthored one shortened link with the UTM spine, to a door
rules · body ≤ 160 incl. opt-out · encoding: GSM-7 → 160 in one message, 153 per segment when concatenated; UCS-2 → 70 and 67. One emoji or one curly apostrophe (’ “ ” — …) flips the whole message to UCS-2 and drops the limit 160 → 70 · segments: 1 — past the single-message limit for its encoding the message is billed as 2+ segments and any carrier that does not reassemble truncates it · HELP and STOP both answered — US carriers (CTIA messaging principles) require the HELP keyword alongside opt-out, not STOP alone · quiet hours (recipient zone) · sender id registered · 2 per week (Tue · Fri) · list = receipts only
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
Blog (static .xyz + Duda .com)
The week's article — Article
- H1authored the episode's argument as a sentence; ≤ 70 chars
- Meta descriptionauthored ≤ 155 chars and UNIQUE across the blog — the line the search result shows, written as a promise, NOT the first 155 characters of the lede. Change it and the SERP snippet changes; leave it derived and two articles that open alike collide (the 2026-08-25 crawl reported description_duplicate on 8 URLs).
- Authorauthored the byline the page shows and the JSON-LD Person points at; must be a real person with a live author page (/blog/author/<slug>). An article with no named author is the E-E-A-T signal Google's quality guidance asks for and we do not send.
- Published dateauthored ISO date; renders as article:published_time and BlogPosting.datePublished, and orders the listing and the sitemap <lastmod>. Move it and the article moves in the feed.
- Updated dateauthored ISO date, only when the article actually changed; renders as BlogPosting.dateModified. Stamp it on an unchanged article and the freshness signal is a lie.
- OG image 1200×630 the chapter card; no typed name
- In-article hero 1600×900 optional
- 16:9 video embed the week's 16:9 cut, in-article
- Alt textauthored one line per in-article image, describing what the image SHOWS, not what it is called — the text a screen reader reads and the only thing an image search can read. An image authored with no alt text is not rendered.
- Headingsauthored one per chapter; the scan tells the story
- Canonical rel=canonical to the .xyz static page; syndication points back
- Internal linksauthored links to other articles or office pages, in the body, beyond the door CTA — a page nothing links to is an orphan and the crawler reports it as one (sitemap_orphan). Every link carries the UTM spine.
- Door linkauthored the segment door with the UTM spine, once, near the end
- Schema (JSON-LD) Organization + Person(author) + BlogPosting + BreadcrumbList, derived from the layers above. NO templated FAQPage/HowTo — those rich results were deprecated in May 2026 and FAQPage is only honest where a visible Q&A exists. Change the author, dates or description and this changes with them, because it reads them.
- Reading time derived
rules · h1 ≤ 70 · title UNIQUE across the blog (the ≤ 60-char SEO title, not just the h1 — two articles clamped to the same 60 characters are one page to a search engine) · meta description ≤ 155 and UNIQUE across the blog · author named, with a live author page · published date present; updated date only when the article changed · canonical present · one door link · at least one internal link in the body, beyond the door CTA · every image has alt text · JSON-LD present and derived from the authored layers (no hand-typed schema)
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by creative-lead
brand · Email Hero GIF · ⟁ Signum
Being right beats being first
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 1+ Email (Resend, owned list)
storyboard → brief + scenesperformance · longform · ⟁ Mensor
The reporting layer handed over, and year
pending render
16:9 · YouTube (long-form)
cuts · 2YouTube Shorts 9:16 · 60s · SceneReel+ Blog (static .xyz + Duda .com)
storyboard → brief + scenesstrategic relations · Publicist · ⟁ Nexus
You are hiring their phone
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesemerging tech · Virtual Reality · ⟁ Augur
Walk it before you build it
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesbrand · Logo Identity · ⟁ Signum
A mark is not an identity
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenessocial · Content Creation · ⟁ Nuntius
Volume is a systems problem
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenessocial · Field Notes · ⟁ Nuntius
The demo supplied your use case
pending render
9:16 · TikTok · Instagram Reels · YouTube Shorts · Facebook Reels · Stories · Threads · Pinterest
pending render
1:1 · Instagram feed · Facebook · X/Twitter · Bluesky · LinkedIn feed
pending render
16:9 · YouTube · X card · LinkedIn video · Blog (embed)
cuts · 9LinkedIn 1:1 · 120s · LinkedInDocX 1:1 · 120s · XThreadCardYouTube Shorts 9:16 · 60s · SceneReelInstagram (Reels · feed) 9:16 · 90s · StoryReelFacebook (Reels · feed) 9:16 · 90s · SceneReelThreads 1:1 · 90s · SceneReelTikTok 9:16 · 60s · TikTokNativePinterest 9:16 · 60s · PinterestPinBluesky 1:1 · 60s · SceneReel
storyboard → brief + scenesEmail (Resend, owned list)
The day's note — EmailBlockStack · rendered at send
- header 600×300 [html/image] · logo + nav; links live; dark-mode safe
- hero 600×600 [gif/image/html-motion] · the week's 1:1 cut as a loop, first-frame poster fallback, alt text, hosted URL
- secondary 600×400 [html/image/gif] · the one promise in copy, single accent; optional
- tertiary 600×250 [html] · the DOOR - a bulletproof button to the segment's door with the UTM spine; never a generic 'learn more'
- footer 600×200 [html] · logo · links · unsubscribe · NAP
- From nameauthored the name the inbox shows BEFORE the subject, and the first thing a reader decides on. Keep it the same across sends — changing it costs the recognition that earns the open. Never 'noreply'.
- Subjectauthored ≤ 50 chars
- Preheaderauthored ≤ 90 chars; finishes the subject's sentence
- Bodyauthored the day's letter; reads-at-the-kitchen-table register
- CTA doorauthored a segment door id; the tertiary block renders it
- Hero assetauthored the hosted GIF URL + poster + alt text
- Plain-text twin derived from the body; every client gets one
rules · subject ≤ 50 · preheader ≤ 90 · from name set, and the same one as last send · dark mode tested · Outlook shows the poster (no GIF motion) · total HTML < 102 KB (Gmail clips) · plain-text twin present · list = contacts with a consent receipt only · send window = the recipient's morning in their zone, never one flat hour · List-Unsubscribe + List-Unsubscribe-Post on EVERY bulk send: `List-Unsubscribe: <https://…>, <mailto:…>` and `List-Unsubscribe-Post: List-Unsubscribe=One-Click`. Gmail and Yahoo have required one-click unsubscribe of bulk senders since February 2024; without the headers the mail is throttled or spam-foldered no matter how good the copy is. This is the HEADER, set at the send — NOT the same thing as the rule below, which is what happens after somebody clicks it. · unsubscribe honoured at the consent root · every link carries the UTM spine, not only the door — an untagged link in the body is a click the reporting never sees
test matrix · dark mode · Outlook desktop (poster) · Gmail mobile · Apple Mail (motion) · 102 KB clip check
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by executive-manager
Blog (static .xyz + Duda .com)
The week's article — Article
- H1authored the episode's argument as a sentence; ≤ 70 chars
- Meta descriptionauthored ≤ 155 chars and UNIQUE across the blog — the line the search result shows, written as a promise, NOT the first 155 characters of the lede. Change it and the SERP snippet changes; leave it derived and two articles that open alike collide (the 2026-08-25 crawl reported description_duplicate on 8 URLs).
- Authorauthored the byline the page shows and the JSON-LD Person points at; must be a real person with a live author page (/blog/author/<slug>). An article with no named author is the E-E-A-T signal Google's quality guidance asks for and we do not send.
- Published dateauthored ISO date; renders as article:published_time and BlogPosting.datePublished, and orders the listing and the sitemap <lastmod>. Move it and the article moves in the feed.
- Updated dateauthored ISO date, only when the article actually changed; renders as BlogPosting.dateModified. Stamp it on an unchanged article and the freshness signal is a lie.
- OG image 1200×630 the chapter card; no typed name
- In-article hero 1600×900 optional
- 16:9 video embed the week's 16:9 cut, in-article
- Alt textauthored one line per in-article image, describing what the image SHOWS, not what it is called — the text a screen reader reads and the only thing an image search can read. An image authored with no alt text is not rendered.
- Headingsauthored one per chapter; the scan tells the story
- Canonical rel=canonical to the .xyz static page; syndication points back
- Internal linksauthored links to other articles or office pages, in the body, beyond the door CTA — a page nothing links to is an orphan and the crawler reports it as one (sitemap_orphan). Every link carries the UTM spine.
- Door linkauthored the segment door with the UTM spine, once, near the end
- Schema (JSON-LD) Organization + Person(author) + BlogPosting + BreadcrumbList, derived from the layers above. NO templated FAQPage/HowTo — those rich results were deprecated in May 2026 and FAQPage is only honest where a visible Q&A exists. Change the author, dates or description and this changes with them, because it reads them.
- Reading time derived
rules · h1 ≤ 70 · title UNIQUE across the blog (the ≤ 60-char SEO title, not just the h1 — two articles clamped to the same 60 characters are one page to a search engine) · meta description ≤ 155 and UNIQUE across the blog · author named, with a live author page · published date present; updated date only when the article changed · canonical present · one door link · at least one internal link in the body, beyond the door CTA · every image has alt text · JSON-LD present and derived from the authored layers (no hand-typed schema)
acceptance · gate verify_channel_specs.py#CHANNEL-SPECS PASS · review by creative-lead