TL;DR: Map of every platform I tested for programmatic publishing in 2026: which give you a clean REST API, which need Chrome DevTools Protocol (CDP) automation, and which actively block both. Based on 50+ articles published over 60 days.
Three categories
| Category | Platforms | Best approach |
|---|---|---|
| Clean REST API | dev.to, Substack (write API limited), Gumroad (limited), Mastodon, GitHub | API + auth header |
| CDP-friendly editors | Substack (TipTap), Gumroad UI, ASC web, WeChat 公众号 (cookie-bound) | Playwright connect_over_cdp |
| Blocked by anti-bot | Reddit, Indie Hackers, Twitter/X (Lexical), Hacker News, Zhihu, Xiaohongshu | Manual paste only |
Why CDP, not Selenium/Puppeteer?
Selenium and headless Puppeteer get fingerprinted instantly. CDP (--remote-debugging-port=9222 --user-data-dir=...) attaches to a real Chrome you already opened with a real session.
Setup:
chrome.exe --remote-debugging-port=9222 ^
--remote-allow-origins=* ^
--user-data-dir="C:\Users\you\AppData\Local\Google\Chrome\User Data\AutomationProfile"
Then in Python:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp("http://127.0.0.1:9222")
page = browser.contexts[0].pages[0]
page.goto("https://your-target.com/editor")
The browser sees your real cookies, real fingerprint, real user-agent. No bot signal.
Editor difficulty rankings (1=easy, 5=blocked)
| Editor | Used by | Difficulty | Notes |
|---|---|---|---|
Plain <textarea>
|
dev.to drafts, basic CMS | 1 |
page.fill() works |
| TipTap | Substack, Notion-likes | 2 | Click into ProseMirror, then Ctrl+V clipboard paste |
| Slate | Reddit (some), older Medium | 3 | Selection-based; needs careful focus management |
| Lexical (Meta's) | Reddit comments, IH posts, Twitter | 5 | Anti-bot detects synthetic events; only manual works |
| ProseMirror w/ Lexical input | Twitter post composer 2026 | 5 | Same as above |
What worked: Substack TipTap CDP flow
After 6 failed attempts on Substack (frontmatter leakage, body cut off, publish button not firing), this 5-step flow now publishes reliably:
- Goto
/publish/posts?type=newsletter→ click 新規投稿 button - Fill title via
page.fill('textarea[aria-label="title"]', title) - Click into editor (
div.ProseMirror), set clipboard with body, dispatchCtrl+V - Wait for "下書き保存しました" (autosave indicator)
- Click 続ける → 今すぐ全員に送信 → confirm → URL changes to
/p/<slug>
Total time per issue: ~45 seconds. 100% reliable across 4 issues.
What failed: Reddit Lexical
Tried 8 different approaches:
-
page.fill()on Lexical contenteditable → ignored -
page.evaluate()to set innerHTML → reverted on focus - Clipboard paste via Ctrl+V → blocked by
beforepastelistener - Synthetic
InputEvent('beforeinput', {data:'...'})→ ignored - Direct DOM mutation → reverted by Lexical reconciler
- Chrome accessibility API typing → flagged as bot
- Per-character
keyboard.press→ rate-limited after 10 chars - CDP
Input.dispatchKeyEvent→ ignored
Reddit actively detects synthetic input on Lexical. Same for IH (Lexical) and Twitter post composer (Lexical-derived).
Conclusion: For Lexical platforms, paste-ready files + 30-second human paste is the only path.
What I built: paste-ready content pipeline
Since Lexical platforms are blocked, I built a unified pipeline:
- CC writes paste-ready files with YAML frontmatter
- Dashboard reads frontmatter, renders preview
- Dashboard "Copy to clipboard" button copies body
- User clicks dashboard "Open editor" → 30-second paste
This converts 4 manual platforms (Reddit/IH/Twitter/Zhihu) to:
- 4 × 30 sec = 2 minutes user time per content piece
- vs 4 × 5 min manual writing each = 20 minutes
10× speedup on the human side, even though I can't fully automate.
The 2026 reality: hybrid is the answer
For indie hackers in 2026 publishing across 8+ channels:
- Pure API: dev.to (4 hours of automated batch publishing)
- CDP: Substack, Gumroad, ASC (all editor-driven)
- Paste-ready: Reddit, IH, Twitter, Zhihu (anti-bot — never going to fully automate)
Stop trying to fully automate Lexical. Build a paste-ready pipeline instead.
Source
Full automation code (Python + Playwright + dev.to API client):
AutoApp Dashboard ($39) includes:
- Substack TipTap CDP publish flow (working)
- dev.to batch API publisher
- Gumroad SKU CDP creator
- ASC API JWT helper
- Paste-ready manifest validator
If you've built CDP automation that bypasses Lexical, leave it in comments. I haven't found anyone who's solved it cleanly.
Top comments (0)