I don't "love" Obsidian yet. I'm barely a beginner.
I definitely don't "love" Webflow. It feels like overkill for a simple blog.
But I have been stuck in a loop of "Over Optimization" for months. I wanted to build this website in public, but the friction of just getting a thought online was stopping me.
So, instead of learning to code from scratch, I "vibe coded" a solution with Cursor (using Claude Sonnet 4.5 and Gemini 3.0 Pro).
This post? It's my "Hello, World!" — except instead of printing to a terminal, I'm publishing to the web.
This is the inaugural post of the Over Optimized build log.
* Time to Build: ~4 hours (including debugging terminal configs and API versions).
* Goal: Create a "zero-friction" publishing button.
* Status: Success.
I needed a way to draft a thought in my local notes, hit one button, and see it live on my site.
Here is the surprisingly simple architecture we built:
graph LR
A[📝 Obsidian<br/>Markdown + Frontmatter] --> B[🐍 Python Script<br/>publish.py]
B --> C{Status: live?}
C -->|Yes| D[🔄 Convert to HTML]
C -->|No| E[⏭️ Skip]
D --> F[📊 Generate Schema.org]
F --> G[🚀 Webflow CMS API]
G --> H[🌐 Live Site]
style A fill:#e3f2fd
style D fill:#fff3e0
style G fill:#e8f5e9
style H fill:#f3e5f5
Notes) where I drop my thoughts.| Tool | Cost | Setup Time | Purpose |
|---|---|---|---|
| Obsidian | Free | 5 min | Local note-taking |
| Python 3.8+ | Free | Pre-installed | Run the script |
| Cursor Pro | $20/mo | 15 min | AI code editor |
| Claude Sonnet 4.5 | (via Cursor) | — | Code generation |
| Gemini 3.0 Pro | Free tier | — | Additional AI assist |
| Webflow CMS | $16/mo | 10 min | CMS hosting |
Total Setup: ~30 minutes
Monthly Cost: ~$36 (Cursor Pro + Webflow CMS)
Note: While free alternatives exist, the paid tools significantly reduce debugging time and iteration cycles.
The workflow is designed to be brain-dead simple so I can't procrastinate:
Create a markdown file in your designated folder.
At the top of your note, add frontmatter to control publishing:
---
headline: "Your Post Title"
slug: "your-url-slug"
status: "live"
description: "SEO description for search results"
---
Run the script from your terminal:
python publish.py
The script scans your folder, grabs notes marked status: live, converts Markdown to HTML, and pushes them to Webflow via API.
The Real Insight: This isn't about building the perfect system. It's about building any system that removes the friction between "I have a thought" and "It's live."
I am not a coder. I've been using the Cursor[4] editor for a few months, but building a custom API integration like this would have taken me weeks on my own. With Claude Sonnet 4.5[5] (via Cursor) and Gemini 3.0 Pro[6], we built, debugged, and launched it in one session.
This isn't about the tech. It's about breaking the paralysis. Now that the "pipeline" is built, I have no excuse. I can just write.
Is it truly "Zero Friction"? No. I still have to run a script. It might break. But it is infinitely better than the copy-paste formatting hell I was in before.
What's Working:
- [x] Local Markdown workflow in Obsidian
- [x] One-command publishing via Python script
- [x] Automatic HTML conversion
- [x] Webflow CMS integration via API
- [x] SEO metadata control through frontmatter
Time to First Publish: 4 hours (including learning and debugging)
Now that the pipeline works, the natural progression:
Dynamic Variable Injection: Add support for {{ variable }} syntax to inject live data from JSON files into posts at publish time. Perfect for dashboards and data-driven content.
Google Search Console Integration: Connect GSC data to see which posts actually get traffic and what queries bring people in. Close the feedback loop.
Permanent Ownership Layer: Archive published content to Arweave or IPFS so I have a cryptographically-verified, permanent record of my work — even if Webflow disappears tomorrow.
Scheduled Publishing: Move the script to a cron job or serverless function so updates can publish automatically without manual intervention.
But for now, I have a "Publish" command. And it works.
By Tree. Edited with assistance from Claude Sonnet 4.5 and Gemini 3.0 Pro via Cursor AI. Publishing script coded in Cursor AI with assistance from the same.