January 3, 2026 · 8 min read★ Featured
Building a portfolio with separated frontend and backend isn't just about following trends, it's about choosing the right architecture for your goals. Here's what I learned.
In my last post, I talked about choosing Django + Wagtail over templates. What I didn't mention was another crucial decision: keeping the frontend completely separate from the backend.
This wasn't about following the latest architectural trend. It was a deliberate choice that came with real trade-offs. Let me share why I did it—and when you probably shouldn't.
Before diving in, let's clarify what we're talking about.
Traditional (Coupled) Architecture:
Decoupled Architecture:
Think of it like this: in a traditional setup, the kitchen and dining room are in the same building. In a decoupled setup, they're in different buildings, connected by a delivery service (the API).
The decision came down to three main reasons, each tied to specific goals for this project.
With a decoupled setup, I can experiment with the frontend without touching the backend.
Want to try a new component library? Go ahead. Rebuild the entire UI? No backend changes needed. Switch frameworks entirely? Backend doesn't care.
This separation means I can iterate on the user experience independently. When inspiration strikes for a UI redesign, I don't need to worry about Django templates or Wagtail's rendering pipeline.
Real example from my project: I rebuilt the homepage layout three times during development. Each time, the backend API stayed identical. Zero migrations, zero backend deployments, zero risk of breaking content management.
I wanted to understand modern frontend tooling deeply:
Building a decoupled frontend forced me to learn these properly. No shortcuts, no Django template magic to fall back on.
This wasn't just about this project—these skills transfer to any modern web application. Whether it's a startup dashboard or a client project, I now understand how frontend applications actually work.
One backend, multiple frontends. That's the promise of decoupled architecture.
Today: Web application Tomorrow: Mobile app (React Native, Flutter) Next month: Desktop app (Electron) Future: Voice interface, smart TV app, whatever comes next
All consuming the same API. One source of truth for content, many ways to present it.
For a portfolio that might evolve into a platform or a SaaS product, this flexibility matters.
Here's the part most blog posts skip: decoupling makes things harder.
Before (Coupled):
After (Decoupled):
You're not just building one thing anymore—you're building two things that need to work together.
Coupled development:
Decoupled development:
The feedback loop is longer. Setting up your development environment takes more steps. Getting started is harder.
Let me be direct: most projects don't need a decoupled architecture. Here's when you should stick with traditional Django templates:
Keep it coupled if:
Django's template system is excellent. Wagtail's page models work beautifully with it. There's no shame in using the framework as designed.
If you can't articulate three specific benefits of decoupling for YOUR project, stay coupled.
On the flip side, decouple when:
You have clear reasons:
You accept the costs:
For my portfolio, I had specific goals that justified the complexity:
Learn modern frontend development
Keep options open for future platforms
Gain full control over the user experience
For many projects, these goals wouldn't justify the added complexity. But for a portfolio that's also a learning platform, they did.
For transparency, here's what I built:
Backend:
Frontend:
The Flow:
This gives me the flexibility I wanted while maintaining good performance and SEO.
Now that it's built and running, here's what I've learned:
Worth it:
Harder than expected:
Unexpected benefits:
Would I do it again? For this project, yes. For every project? Absolutely not.
If you're facing this choice, ask yourself:
Question 1: What specific problems does decoupling solve for my project?
Question 2: Do I have time to manage the added complexity?
Question 3: What's my team's expertise?
Question 4: How will this decision affect maintenance?
Question 5: Am I decoupling because it's trendy or because I need it?
For me, decoupling was the right choice because my goals aligned: learn modern development, optimize performance, keep future options open. The added complexity was an acceptable trade-off.
Your goals might be different. And that's perfectly fine.
This is just the beginning of the story. In upcoming posts, I'll explore:
The journey continues. Each architectural decision opens up new questions, new challenges, and new learning opportunities. If you're navigating similar decisions or have questions about decoupled architectures, I'd love to hear from you.
Building in public means sharing not just successes, but the reasoning behind every technical decision—including the ones that make life harder before they make it better.
Reach out via the contact form or connect on Linkedin!