
Single Source, Multi-Platform → Makefile as Publishing Engine The Problem I...
I write in one place. Readers are everywhere.
I update content. Old versions live forever on different platforms.
I publish manually. Time dies with each copy-paste.
My content lives in Git. That's the single source of truth.
GitBook reads from Git. dev.to can read from Git. Medium can read from Git. Everything can read from Git.
So why am I copy-pasting?
Git (Source of Truth)
↓
GitHub (Version Control)
↓
GitBook (Primary Interface)
↓
Makefile (Publishing Engine)
├-> dev.to
├-> Medium
├-> Hashnode
└-> Anywhere
One source. Infinite destinations.
# .clarity/devto-articles.json
{
"article-name": "2829234", # dev.to article ID
"another-one": "2829233"
}
# .clarity/devto-checksums.json
{
"article-name": "a3f5b2c8d9e1f4g6", # MD5 hash
"another-one": "b4g6c3d0e2f5a7h8"
}
No database. Just JSON files. Git tracks them. Simple.
CURRENT_CHECKSUM=$(md5 -q article.md)
SAVED_CHECKSUM=$(jq -r '.article' .clarity/devto-checksums.json)
if [ "$CURRENT_CHECKSUM" = "$SAVED_CHECKSUM" ]; then
echo "[OK] No changes, skipping"
else
# Update only what changed
fi
MD5 hash comparison. File changed? Update. File same? Skip.
GitBook uses `` tags. dev.to doesn't understand them.
Solution? Strip them during publish:
CONTENT=$(cat article.md | sed 's///g')
Each platform has its reality. Adapt, don't fight.
make sync-devtoOne command. All platforms synced.
# Write locally
code docs/claude-ai-vibe-coding/new-article.md
# Push to Git
git add . && git commit -m "new article" && git push
# Sync everywhere
make sync-devto # Updates or creates as needed
# Edit locally
code existing-article.md
# System detects changes via MD5
make sync-devto
# Output: [OK] Article Name - No changes, skipping
# or
# Output: -> Updating: Article Name (ID: 2829234)
if [ "$HTTP_CODE" = "429" ]; then
echo "Rate limit. Waiting 35 seconds..."
sleep 35
$(MAKE) retry
fi
Patience as code. Not error handling, feature implementation.
I used GitHub Actions. Then I woke up.
GitHub Actions = Their computer, their rules, their time. Makefile = My computer, my rules, my time.
# This runs on MY machine
publish:
@echo "I control this"
# This runs on THEIR machine
# .github/workflows/publish.yml
# I wait, I hope, I pray
Control matters more than convenience.
Single Source of Truth: Git. Not Notion, not Google Docs. Git.
Platform Agnostic: Write once, publish everywhere.
Automation Over Memory: I don't remember to update. Code remembers for me.
State Without Database: JSON files in .clarity/. Git tracks them. Done.
Adapt, Don't Force: Each platform is different. Transform content to fit.
This isn't about blogging. It's about:
# Minimal viable publisher
sync:
@for article in docs/*.md; do \
if [ file_changed ]; then \
curl -X POST platform.com/api \
-d "$$(cat $$article)"
fi
done
Expand from here. Add state. Add checksums. Add platforms.
My blog is everywhere. My time is mine.
Stop logging into platforms. Stop copy-pasting. Stop remembering to update.
Write in Git. Let Makefile handle the rest.
Publishing isn't about platforms. It's about flow.
Git -> Makefile -> World.
That's it. That's the system.
Part of the Zero Documentation -> Living Code philosophy. See also: Git as Evolution Engine - how commits become learning.
Read the original: Single Source, Multi-Platform -> Makefile as Publishing Engine
cursorCursor Automations in 2026: wire event-triggered coding agents to Slack, CI, and...
aiThe specs exist. The AI just can't see them. I've always been the type who builds hobby...
amazonbedrockConnect Claude Code, Cursor and Codex to Amazon Bedrock's new console (2026) Summary. On 5...
aiThere is a weird uncanny valley with LLM-generated UI right now. The code functions perfectly, but if...
aiI went down a rabbit hole this morning reading the late-2025 Juejin AI roundups side by side, and the...
mcpInstall guide and config at curatedmcp.com Zendesk MCP: Let Claude Handle Your Support...
Workflows from the Neura Market marketplace related to this Cursor resource