Skip to main content

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:

filecovers
social-content/README.mdlayout, the mapping rule from articles to posts
social-content/VOICE.mdstyle rules, the anti-AI-tell list, truncation test
social-content/PUBLISH.mdthe publish protocol and its state machine
social-content/VIDEOS.mdterminal videos, per-platform requirements
social-content/EXPERIMENTS.mdwhat'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.

serviceaccountwhat goes there
LinkedInThomas Ronestext, hook cards, carousels, square video
YouTubeThomas Ronesvertical video (Shorts)
TikTokvar_undecidedvertical video
Twittervar_undecidedunused 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 LinkedIn document asset. 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.

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!