Escaping the Optimization Trap: My Automated Publishing Setup

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.

Building in Public: Post #001

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.

The Goal

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
  1. The Source: A simple folder in my Obsidian[1] vault (Notes) where I drop my thoughts.
  2. The Engine: A custom Python[2] script (written entirely by AI) that converts my Markdown to HTML.
  3. The Destination: The Webflow[3] CMS API, which receives the clean content.

What You'll Need

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.

How to Automate Obsidian to Webflow (Step-by-Step)

The workflow is designed to be brain-dead simple so I can't procrastinate:

Step 1: Write your note

Create a markdown file in your designated folder.

Step 2: Add control metadata

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"
---

Step 3: Add Dynamic Variable Injection (Optional)

For posts with live data, create a data.json file:

{
  "star_wars": {
    "death_star": { "completion": "98.3%", "weakness": "thermal exhaust port" }
  },
  "star_trek": {
    "enterprise": { "warp_capability": 9.6, "crew_count": 1012 }
  }
}

Now write 98.3% in your Markdown, and the script injects the value at publish time. Perfect for dashboards or data-driven posts. "That's no moon..."

Step 4: Publish

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."

Why Vibe Coding with Cursor Changes the Game

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.

Current Status

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)

What's Next?

Now that the pipeline works, the natural progression:

  1. Google Search Console Integration: Connect GSC data to see which posts actually get traffic and what queries bring people in. Close the feedback loop.

  2. 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.

  3. 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.

---

Appendix

The sections below provide citations and technical documentation for reference.

References

[1] Obsidian - Markdown-based note-taking app
[2] Python 3.12 - Scripting language
[3] Webflow CMS - Headless CMS platform
[4] Cursor - AI-powered code editor
[5] Claude Sonnet 4.5 - Code generation (via Cursor)
[6] Gemini 3.0 Pro - AI assistance for editing and iteration

Technical Documentation

APIs Used:
- Webflow CMS API v2 - Publishing automation
- Schema.org HowTo - Structured data markup

Python Libraries:
- python-frontmatter - YAML parsing
- markdown - HTML conversion with tables and fenced_code extensions
- requests - HTTP client

Tools:
- Google Rich Results Test - Schema validation
- Git - Version control


Version History

Version Date Changes
1.0 2025-12-08 Initial publication with SEO-optimized structure, requirements table, and step-by-step guide

This article is version controlled for transparency. Content hash, license, and provenance data available in page metadata.


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.