Skip to main content
Over engineered complexity

Why the Best Website Is the One You Can Actually Keep Updated

The Love of Building Websites

Over the years, I’ve built and rebuilt my website more times than I can count. I love experimenting with new coding languages and tools, and there’s nothing quite like the satisfaction of creating something from scratch.

Honestly, I’ve lost track of how many times I’ve rebuilt my website. The first version was a fully custom WordPress theme I built from the ground up. Many of my client sites still run on WordPress because it allows them to update content easily without needing to code. For those projects, I design and develop themes entirely from scratch, ensuring they are fully integrated with the CMS while remaining lightweight and optimized for performance. It’s a fantastic solution for non-technical users.

But for someone like me—who thrives on learning and exploring new technologies—I’ve gone far beyond WordPress. I’ve rebuilt my website using various frameworks and databases, including Ghost CMS and Rust, while also experimenting with different backend architectures.

My last website was powered by Python and Flask. Since I work extensively with Python—including Flask and FastAPI—using Flask for my personal website was an obvious choice.

Flask

A minimalist web framework for Python that simplifies building web applications. It provides essential tools without unnecessary complexity, making it a great choice for developers who want control and flexibility.

The Flask CMS: A Technical Marvel (That I Rarely Updated)

From a technical perspective, my Flask-based website was a masterpiece of over-engineering (and I mean that in the best possible way). I built a completely custom Content Management System (CMS) that gave me absolute control over every aspect of my website. Let me paint you a picture of what this system could do:

The Technical Stack

I created a containerized Flask application using Docker, with Nginx serving as the reverse proxy. Every component was carefully orchestrated using Docker Compose, ensuring the entire system could be spun up consistently across any environment.

Features That Made It Special

  • Dynamic Content Management: A fully custom-built authentication system and admin interface that allowed me to edit content directly through the browser.

  • EditorJS Integration: Modified to work with JSON data structures, giving me block-based editing capabilities that were ahead of their time.

  • SQLite Backend: Ensuring everything remained lightning-fast and portable.

Automated Asset Pipeline

One of my favorite features was the automated asset management system:

  • Automatic Tailwind CSS rebuilding whenever I updated content.

  • JavaScript bundling and optimization on the fly.

  • A sophisticated media library that would:

    • Automatically optimize uploaded images.

    • Generate multiple sizes for responsive design.

    • Create WebP versions for modern browsers.

    • Upload images to cloud storage and a CDN for faster delivery.

    • Manage alt text and metadata for SEO.

Custom built Python/Flask Media Library on my previous website
Lightbox image

SEO and Performance Optimizations

Everything was built with performance in mind:

  • Server-side rendering for optimal SEO.

  • Automated sitemap generation.

  • Custom meta tag management.

  • Built-in schema markup generation.

  • Critical CSS generation to improve load times.

Why It Wasn’t Sustainable

Here’s where the story takes a turn. My website was a technical achievement, but it became a victim of its own sophistication. The problems weren’t with the features or capabilities—it was with maintenance:

  • Dependency Nightmare: My containers required Node.js and many dependencies for asset building. Over time, dependencies needed updates, breaking the build.

  • Time Investment: Every few months, something needed fixing or updating. What started as “I’ll just update a few packages” would turn into “Why is the image optimization breaking?” or “Why isn’t Tailwind CSS building?”

  • The Tinkerer’s Trap: Whenever I found time to work on my site, I spent it fixing and improving the CMS rather than writing content. It felt like maintaining a project car—spending more time under the hood than actually driving it.

  • The Content Paradox: The CMS was so powerful that it became intimidating. Writing a new blog post meant dealing with image optimization, SEO settings, and ensuring all custom components were functioning properly.

The Ironic Realization

I built this incredible system to make content management easier, but its complexity meant I was posting less frequently than ever. It was like having a Formula 1 car for my daily commute—impressive, but not practical.

Lightbox image

This experience taught me an important lesson:

The best website isn’t just about technology—it’s about impact. It should make it easy to share your message, strengthen your brand, and connect with the people who matter most.

The Solution: A Return to Simplicity

In one of my most recent projects, I built a website for my client Ace Towing & Transport using Astro.

Astro

A modern JavaScript web framework that allows the creation of lightning-fast websites by shipping zero JavaScript by default. It combines the best parts of static sites with dynamic features when needed.

I had experimented with Astro about a year earlier and fell in love with its power and simplicity.

The modern build tools in Astro made setting up TailwindCSS, image optimization, SEO tools, and accessibility features incredibly easy.

The experience of optimizing Ace Towing’s website was seamless, and I realized this was exactly what I needed for my own site.

Why Astro Became the Right Choice

  • Optimized Performance: Static site generation with ultra-fast load times.

  • Content in Markdown: I could write my blog posts with ease, using tools I was already comfortable with.

  • Seamless Developer Experience: The ecosystem provided flexibility while eliminating unnecessary complexity.

  • A Focus on Content, Not Maintenance: Unlike my Flask setup, Astro allowed me to focus on publishing instead of debugging build issues.

After seeing the benefits firsthand with Ace Towing’s website, the decision was clear—Astro was the next step for me.

Not only did it provide the performance benefits I needed, but it also simplified my writing process. Since I’ve worked with Markdown tools for years, platforms like Notion make it incredibly easy to draft content, copy it into a Markdown file, add a few metadata fields, and publish instantly.

Perfect Lighthouse Scores for the Skipper Innovations Home Page
Lightbox image

What’s Next?

Take a look around! I’m actively expanding the Portfolio section, highlighting featured clients and projects—with much more to come. I’ve also revamped the About The Skippers page, sharing our full story in greater detail (and yes, there are plenty of photos!).

In addition, I’ve removed outdated content that no longer aligns with my work and vision. Moving forward, I plan to create tutorials, share insights, and update the blog far more frequently—now that publishing is finally effortless!

Stay tuned for more content, and if you have any thoughts or questions, feel free to reach out. I’d love to hear from you!

Tennessee-Powered Innovation