From Manual Markdown to Automated Jekyll: Streamlining Blog Development
This transformation was accomplished in a single Claude Code session
My personal website started simple - maybe too simple. Raw Markdown files, manual everything, and a workflow that had slowly become my nemesis. Here’s how I turned that around in one productive afternoon with some AI assistance.
The Reality Check
It happened again. I’d sit down to write a blog post and immediately get bogged down in the tedious manual process. My website started as the simplest possible setup: raw Markdown files in a blog/
directory with manual index updates.
While this got me writing initially, the development workflow had slowly become painful:
Previous Process (30-45 minutes):
- Create new
.md
file inblog/
directory (~2 minutes) - Write content with proper formatting (~20-30 minutes)
- Manually update
index.md
with new post link (~2 minutes) - Test changes by pushing to GitHub and waiting for Pages deployment (~5-10 minutes)
- Fix any formatting issues and repeat cycle (~5+ minutes)
The biggest pain points were the usual suspects:
- No local preview - Had to push to GitHub just to see if things looked right
- Manual index maintenance - Easy to forget, easier to mess up
- Inconsistent styling - No templates, no consistency
- Slow feedback loop - Wait for GitHub Pages deployment every time
I knew what needed fixing, but the thought of setting up Jekyll properly, configuring Docker, writing automation scripts… it felt like a weekend project I’d never get around to.
Enter Claude Code
Then I had an idea. What if I could just talk through the whole setup with an AI? Using Claude Code, I transformed the entire development workflow in a single interactive session.
My 20 years of software development experience helped me know which pain points to tackle and what good tooling looks like. But the AI handled all the complex implementation details that would have taken me days of research, configuration, and troubleshooting.
Key Improvements
1. Proper Jekyll Structure
- Moved posts to
_posts/
directory with proper naming - Added front matter to all posts for metadata
- Created
_layouts/
with consistent templates - Automated post listing with Jekyll’s post loop
2. Local Development Environment
- Docker-based Jekyll setup for consistency
- Custom Dockerfile with pre-installed dependencies
- Make commands for one-click development
- Live reload for instant preview
3. Streamlined Commands
make serve # Start local server + open browser
make build # Build site
make create-issue # GitHub issue creation
New Process (2-3 minutes)
Creating a new post now:
- Run
make serve
(starts local server, opens browser automatically) - Create
_posts/YYYY-MM-DD-title.md
with front matter - Write content with instant preview
- Commit and push when ready
That’s it. No more manual index updates, no more style inconsistencies, no more waiting around for deployments to see if I broke something.
Claude Code Development Process
The AI-driven development session tackled complex integration challenges seamlessly:
Conversational Problem-Solving:
- Analyzed existing codebase structure and pain points
- Proposed Jekyll migration strategy with minimal disruption
- Iteratively refined Docker configuration for optimal performance
- Debugged URL length limits in GitHub integration
Intelligent Automation:
- Generated proper Jekyll front matter for 9 existing blog posts
- Created responsive HTML layouts with clean styling
- Built complex Makefile automation with error handling
- Developed Python scripts for GitHub integration
Real-Time Adaptation:
- Adjusted approach when Docker layer caching issues emerged
- Refactored PR generation when URL limits were hit
- Refined impact analysis to focus on value over technical details
Technical Implementation
What Claude Code delivered in one session:
Jekyll Configuration:
_config.yml
with GitHub Pages compatibility- Automated post discovery and listing
- Proper permalink structure
Docker Setup:
- Custom image with dependencies pre-installed
- Volume mounting for live file editing
- Optimized layer caching to avoid repeated installs
Makefile Automation:
- One-command local development
- Browser auto-opening
- GitHub integration helpers
Content Migration:
- Moved 9 blog posts from
blog/
to_posts/
- Added proper front matter to all posts
- Removed duplicate titles (layout handles display)
Results: 15x Faster Iteration
The workflow improvements created dramatic time savings:
Task | Before | After | Improvement |
---|---|---|---|
Start development | Push to GitHub (~5-10 min) | make serve (~30 sec) |
10-20x faster |
See changes | Wait for deployment (~5-10 min) | Instant with live reload | Immediate |
Add new post | Manual index update (~2 min) | Automatic | Eliminated |
Fix styling issues | Multiple deploy cycles (~15+ min) | Instant local preview | 15x+ faster |
Total time to publish: Down from 30-45 minutes to 2-3 minutes.
Key Learnings
-
Experience guides automation priorities - 20 years of working with various repositories taught me which manual steps become the biggest bottlenecks over time.
-
Start simple, evolve thoughtfully - The basic Markdown approach got me writing, then I added tooling when pain points became clear.
-
Local development is essential - Years of debugging deployment-only feedback loops taught me this lesson the hard way.
-
Automation eliminates errors - Having maintained many CLI tools, I knew which manual processes inevitably lead to mistakes.
-
Docker makes environments predictable - Experience with environment inconsistencies across teams made this an obvious choice.
-
Make is still relevant - Despite newer alternatives, Make’s universality makes it ideal for simple project commands.
-
AI accelerates experienced judgment - Claude Code didn’t replace my architectural decisions, but eliminated the implementation grunt work.
Advanced Workflow Features
After establishing the core Jekyll setup, we added sophisticated development tools:
GitHub Integration:
make create-issue
- Opens browser with pre-filled issue templatesmake create-pr
- Intelligent PR creation with impact analysis
Smart PR Generation: The PR automation analyzes your branch changes and generates compelling descriptions with:
- Categorized impact summary (Jekyll/Content, Development Environment, etc.)
- Before/after workflow comparison with time metrics
- Quantified improvements (15x faster, 93% time reduction)
- Quality assurance checklists
URL Length Handling: GitHub has URL limits (~8KB), so the script intelligently truncates content while preserving the most valuable impact information.
Development Workflow Evolution
Session 1: Basic static site
Session 2: Jekyll transformation
Session 3: Docker optimization
Session 4: Advanced tooling and PR automation
Each iteration built upon the previous improvements, demonstrating how to evolve a codebase thoughtfully without losing simplicity.
The Meta Moment
This blog post itself demonstrates the new workflow in action. Created and updated multiple times during the development session:
- Used
make serve
for instant preview - Iteratively improved content with live reload
- Added new sections as features were completed
- No manual index updates needed
These improvements were developed through an iterative process with Claude Code, focusing on practical developer experience enhancements.
Time Investment Analysis
Claude Code Session: ~4 hours total
- Codebase analysis and planning: ~30 minutes
- Jekyll migration and setup: ~90 minutes
- Docker optimization and tooling: ~60 minutes
- Advanced GitHub integration: ~40 minutes
Manual Implementation Estimate: 2-3 days
- Research Jekyll best practices: ~4 hours
- Trial-and-error Docker configuration: ~6 hours
- Writing and debugging automation scripts: ~4 hours
- GitHub API integration and testing: ~3 hours
- Documentation and refinement: ~2 hours
AI Advantage: 6-8x faster development with higher quality
The key insight: Experience told me what to automate, but AI handled how to implement it efficiently.
The Mind-Bending Part
Here’s what really hit me afterward: I used AI to automate my automation workflows. Let that sink in for a second.
- AI built
make create-issue
to streamline future feature requests - AI built
make create-pr
to accelerate future code reviews - AI built
make serve
to eliminate friction from future development sessions - AI literally wrote the automation for automating AI-assisted development
It’s not just using a tool - it’s using AI to build better tools for working with AI. Each command becomes a force multiplier for the next development session.
Here’s my philosophy: Every manual step is friction. Every context switch pulls you out of the flow. Every repeated task is creativity wasted on busywork.
The goal isn’t just efficiency - it’s creating space for the actual creative work. The thinking, the writing, the problem-solving that actually matters.
Quantified Results
Ongoing Development Time:
- Blog post creation: 30-45 min → 2-3 min (15x improvement)
- Local preview: 5-10 min deploy → Instant (Immediate feedback)
- Issue creation: Manual typing → One command with templates
- PR creation: Manual description → Automated impact analysis
Error Reduction:
- Index maintenance: Manual → Automated (zero errors)
- Styling inconsistencies: Manual → Template-based consistency
- Deployment feedback: Delayed → Real-time local preview
Quality Improvements:
- Professional layouts and styling
- Consistent front matter and metadata
- Comprehensive automation with error handling
- Smart GitHub integration with impact analysis
What’s Next
This foundation opens up some interesting possibilities:
- Better CLI tools (which I can now track easily with
make create-issue
) - Enhanced PR analysis that goes beyond just file counts
- Maybe applying this same approach to other projects
- Templates for automating automation (meta-meta-automation?)
The ultimate goal? Eliminate every piece of friction between idea and implementation.
Final Thoughts
Sometimes the best way to improve your writing is to eliminate everything that makes writing harder.
And sometimes the best way to improve your development process is to let AI automate the automation itself.
This blog post? Created using the exact workflow it describes. Meta enough for you?