Hello World: Vibe Coding This Blog with Gemini
How this entire Django + Wagtail blog was built through "vibe coding" — describing the architecture I wanted and letting an AI agent write the code, run the commands, and bootstrap the database.
Instead of hand-writing every Django ORM model, Wagtail StreamField definition, and management command, I worked with an AI coding agent as a pair programmer. I described the architecture: a Wagtail CMS with blog posts using structured StreamField blocks (headings, paragraphs, code snippets, Mermaid diagrams), a project portfolio, category-based filtering, dark mode, and a responsive Brutalist design. The agent wrote the code, created the database migrations, and bootstrapped all the initial content you're reading right now. This is a massive shift in how we create software.
The Tech Stack Under the HoodUnder the hood: Django 5 as the web framework, Wagtail CMS for the admin interface and content modeling, SQLite for simplicity (this is a personal blog, not a distributed system), and vanilla CSS with a custom Brutalist design system. The blog posts use Wagtail's StreamField with custom blocks for code syntax highlighting (via Prism.js) and Mermaid diagram rendering. Everything runs on a single manage.py runserver during development, delivering an extremely clean dev loop.
# The command that bootstraps everything you see
python manage.py populate_initial_sample_data
# Yes, even this blog post was created by this command.
# It's management commands all the way down.
The best infrastructure is the kind you don't have to think about. For a personal blog, that means Django + Wagtail + SQLite — zero ops overhead, maximum writing focus.Lessons Learned: Agentic Loop Safety
A major gotcha when working with agentic AI coding tools is context preservation. If you let an agent edit files blindly without verifying syntax or checking previous database states, it can accidentally overwrite working migrations or break Wagtail relationships. The lesson: always pair the agent with strict programmatic validation checks (like Python AST syntax parsers and manual review steps) to act as guardrails. This guarantees that AI-driven development remains rapid, clean, and highly secure.