Marketing
Correcting the 2025 version of this page
This page used to say I hadn't started using a social management tool because "LinkedIn doesn't have external APIs for personal posts."
That was wrong, and it cost about a year of not automating any of this. Buffer publishes to a personal LinkedIn profile through its own integration, and it does the same for YouTube and TikTok. Everything below is running now.
The pipeline
social-content/ at the repo root. One directory per post, post.md holding
frontmatter plus the exact text to publish.
post.md ──► build assets ──► S3 + CloudFront ──► Buffer ──► platform
Docs, in reading order:
| file | covers |
|---|---|
social-content/README.md | layout, the mapping rule from articles to posts |
social-content/VOICE.md | style rules, the anti-AI-tell list, truncation test |
social-content/PUBLISH.md | the publish protocol and its state machine |
social-content/VIDEOS.md | terminal videos, per-platform requirements |
social-content/EXPERIMENTS.md | what's being tested and how it's measured |
.claude/skills/publish-social/ | the skill that runs the whole sequence |
Channels
Buffer org My Organization. All four connected, none disconnected.
| service | account | what goes there |
|---|---|---|
| Thomas Rones | text, hook cards, carousels, square video | |
| YouTube | Thomas Rones | vertical video (Shorts) |
| TikTok | var_undecided | vertical video |
| var_undecided | unused so far |
Publish directly, never by reminder. schedulingType: automatic on all
three. notification means Buffer sends a phone nudge and you post by hand.
Both YouTube and TikTok report metadata.defaultToReminders: false, so direct
API publishing is available — check that field rather than assuming a platform
requires reminders.
Asset types
- Hook card — 1200x1200 PNG from a
hook_card:block.lib/build_cards.sh. - Carousel — multi-page PDF from a
carousel:block, attached as a LinkedIndocumentasset.lib/build_carousel.sh. LinkedIn only. - Terminal video — 1080x1080 and 1080x1920 from a
video:block, both cut from one tape.lib/build_video.sh.
All hosted on a private S3 bucket behind CloudFront — see marketing-cdn.yaml
and marketing-cdn.md at the repo root. Keys are content-hashed, so a rebuilt
asset is a new URL and no invalidation is ever needed.
Imgur was the original host and is no longer possible: new API application registration is closed, and there's no create-application control left in account settings. Don't spend time re-testing it.
Links still get deprioritized
The 2025 note stands: LinkedIn suppresses reach on posts with an outbound link
in the body. Default is link_placement: first_comment — the body ends with a
plain pointer and the URL goes in a comment.
That comment is automated. It isn't exposed by Buffer's MCP tools, but
LinkedInPostMetadataInput.firstComment exists in the GraphQL schema, so it
goes through execute_mutation. Confirmed stored 2026-08-04.
Still unproven: whether LinkedIn actually delivers a Buffer-scheduled first comment on a personal profile. Several posts have published with it set — check one and settle it.
What the API can't do
Polls. Absent from every input type, enum, and metadata object; PostType
has no poll member. Polls are staged as Buffer ideas and posted by hand in
LinkedIn's composer.
Post series
The 2025 list still holds as subject areas — book reviews, proto products,
language summaries, technical opinions, business philosophies. What changed is
that the mapping is deliberately not 1:1 with articles. One article can
produce several posts; each post has exactly one source_article so traffic
stays traceable.
The "maybe an LLM could autogenerate series from my markdown" idea from 2025 is what the pipeline now is.
Comments
No comments yet. Be the first!