December 29, 2025 · 5 min read★ Featured
After weeks of reflection and vibe coding, I chose Django + Wagtail over templates. Here's the reasoning behind taking the harder path.
Last week, I shared my journey of getting back into some coding and experimenting with modern technologies and slowly building a personal website from scratch. What I didn't mention was the moment of temptation that almost puzzled everything for a while: the siren call of beautiful portfolio templates.
You know the ones. Sleek, professional designs ready in minutes. Drag-and-drop builders that promise "no coding required." Those beautifully polished templates that look like they took a design agency months to create. One click, one payment, and you're live with something that at a first glance looks more professional than anything you could build yourself.
So why didn't I just use a template? Here's the real story.
When building a portfolio website in 2025, you essentially have three options, each with its own trade-offs.
📦 Template Builders (Wix, Squarespace, WordPress themes)
Pros: Live in hours, professional polish, no coding required
Cons: Limited customization, vendor lock-in, monthly costs add up
⚡ Static Site Generators (Next.js, Gatsby, Hugo)
Pros: Modern tools, blazing fast, great for blogs and portfolios
Cons: Rebuilds required for every update, less flexible for dynamic content
🔧 Custom CMS (Django + Wagtail)
Pros: Full control, infinitely extensible, learn modern patterns
Cons: Steep learning curve, longer development time, deployment complexity
The decision came down to what I wanted this portfolio to become and not just what it needed to be on day one.
Let's be honest about the costs.
Time Investment:
Some weeks in the spare time and and a marathon over the holidays of development vs. three hours with a template and a recurring credit card payment. But those three weeks taught me more about modern web architecture than any tutorial could. Always better to feel the complexity and define a strategic incremental solution than a quick win without control.
Deployment Complexity:
Managing a Python server vs. drag-and-drop deployment. The upside? I now understand containerization, database migrations, and production configurations. Without mentioning the frontend which is decoupled from the backed. But that would be for another post.
Initial Polish:
My site started simpler than premium templates. But it's evolving based on what I actually need, not what a designer thought most people might want. You will see many subtle details looking around which are part of my passion for minimalistic but pixel-perfect views.
If you need a portfolio tomorrow for a job application, use a template. This approach is for when the journey matters as much as the destination, when building the thing teaches you skills you may use for other scopes.
“Sometimes the harder path is the better path not because it's easier, but because of what you become along the way.”
1. Content Flexibility That Actually Scales
Wagtail's StreamField architecture lets me build content with modular blocks-markdown, images, galleries, callouts, code snippets. Today it's a blog. Tomorrow it could be case studies, technical documentation, or client projects. The architecture doesn't fight me when requirements change.
body = StreamField([
("markdown", MarkdownBlock()),
("callout", CalloutBlock()),
("gallery", GalleryBlock()),
("code", blocks.TextBlock()),
])2. Learning Modern Python Patterns
Building this forced me to understand modern Django patterns, content modeling, API design, and deployment workflows. These aren't portfolio-specific skills but they're transferable to any Python web project coming across in the near future.
3. Built-in Features That Templates Charge Extra For
I implemented:
Most template platforms either don't offer these features or charge a large premium tiers for them.
4. Future-Proofing Without Vendor Lock-In
My code, my database, my deployment. If I want to move hosting providers, add a payment system, or integrate with external APIs-I'm not waiting for a platform to support it. The architecture is mine to extend and control which can be beneficial in the long run.
Not necessarily. Here's a possible framework to evaluate which option to pick:
Choose Custom CMS if:
Choose Templates if:
Choose Static Generators if:
This portfolio is live and evolving. In upcoming posts, I may dive deeper into some of these topics, not yet decided since there are way too many stories to tell in this journey.
The code is evolving, the site is growing, and the learning continues. If you're on a similar journey or have questions about building custom portfolio sites, I'd love to hear from you.
Reach out via the contact form or connect on Linkedin!