I believe this is what we call an impasse.
My first forays online were in direct proportion to me learning how to code. I crafted my website in HTML, by hand, on GeoCities, for upwards of three years. Then I learned PHP, and MySQL, and from there the sky was the limit. For a long time, I loved coding for the web.
This website is currently running a Frankensteined combination of frameworks. this blog is custom-built in Flask, a Python framework. You can learn more about this in a post I wrote back when I switched over to it from the previous software. The rest of the site sits on top of the PHP framework Symphony CMS (not to be confused with Symfony, another framework).
I really like Symphony CMS. It does so much right, in my amateur’s opinion, as a framework, and it has an active and passionate community of developers. But I have two reasons I want to migrate my site away from it.
Firstly, my interest in hacking in PHP has dropped to nearly zero over the past several years. The language itself is evolving at a healthy clip, although detractors would point out that it’s actually just playing catch-up to more mature and better-structured languages. To be honest, though, I just haven’t had time to keep up with it. I’ve watched tutorials for things like Laravel and Symfony, and all these massive frameworks look boss—but I don’t really want to invest the small chunks of free time I have into using these. They’re great for professional devs looking to engineer sites that sustain massive traffic. But for someone building a hobby, personal site, it’s overkill (unless you’re into it).
Secondly, and more importantly, I want to unify my site and my blog. You’ll notice that the site and blog have similar but not identical designs—I could work to unify them even more, but I’d rather unify the backends first. I’ve come to the conclusion I really have three features I want on my site: blog posts, reviews, and lists of my reviews. All three are technically implemented right now, across the two platforms, although reviews don’t actually get dedicated pages at the moment. The other parts of my site might survive in one form or another, but there’s very little additional, regular content I’m interested in adding directly to the site these days.
Going Full Python
To achieve this unification, I’ve been expanding the Flask app that runs my blog into a site-wide app. This has begun with redoing the backend interface and design, because I’m not happy with how that turned out. I am the only person who has to deal with it—but that means my opinion has 100% of the weight, and it is not a happy one. I am slightly happier with the redesign, but it’s slow going. As with PHP, front-end web dev has seen an explosion in structure and tools and workflow tools, and it’s all a little overwhelming for a semi-dinosaur amateur like me. I’ve embraced Sass, because it’s pretty awesome, but I’m shaking my cane at Grunt, Gulp, webpack, etc. Get off my Sublime Text lawn already!
I’ve reached a point, however, where I have almost zero interest in coding/designing any more.
Part of it is time. I don’t have hours a day to devote to these projects, and if I don’t work on them for weeks at a time, picking them up becomes very difficult.
Part of it is, as I mentioned above, the fatigue of trying to keep up with the ever-changing landscape of web dev and design.
Part of it is simply my distaste for the design side of things. I can’t pick good colours, can’t make elements look good—but I also hate using pre-made stuff (more on that in a bit).
So the end result is simple: nothing gets done. I don’t tweak the existing site, because I tell myself I am “working on a better one”—but I’m not actually doing that, except very sparingly on and (mostly) off.
For as long as I’ve had a website, I have resisted using a CMS that takes too much out of my hands. I never wanted to use WordPress. I like Symphony CMS precisely because of how much control it leaves in the developer’s hands. Yet, as I lose interest in coding, I am seriously toying with the idea of giving up that control. At least for now. If I ever have more time in the future want to go back to hacking on my Flask app, I can always do that—data is portable!
So I’ve looked into alternatives. This is fun! I like looking at potential platforms and deciding what they might offer me. I’m largely looking at the Python ecosystem right now, because I really like Python. I know that PHP has a greater diversity of frameworks, but the less I have to worry about managing PHP-based installations, the better.
(If you suggest I look at a Ruby on Rails framework or CMS, I will cut you. It took me long enough to get Sass working, thank you very much.)
I’ve looked at Wagtail, a CMS based on Django. It’s very slick. It has more features out of the box than a framework like Flask, but it still leaves most of the control in the hands of the developer. If I were developing a more complex site, I’d probably go with this. It’s basically as close as I can get to Symphony CMS in Python, in my opinion. Still, it’s too much at the moment—it would take too much time and effort for me to port my features into it.
OK, so what about the opposite end? What about a static site generator, like Pelican? I’m really into Git-based and command-line workflows right now. Why should I have a backend user interface at all? If it’s just me editing this site, why not do everything through Git and text files?
The actual platform is not the problem. I love developing with Flask. The part that bogs me down right now is designing/developing the backend UI. While I’ve looked into ways of making that easier—i.e., by using a largely pre-made frontend framework like Bootstrap or Foundation—I haven’t found a solution that satisfies me. A lot of the frontend frameworks are too big/cumbersome for my liking, or they impose design or markup decisions on me that I don’t care for.
I Shall Not Pass?
So this is my impasse. I don’t like designing UI, but I don’t like giving control over my UI to a framework. I’m stuck.
I’d be content, at least for a while, to simply give up on the notion of a backend UI and work around it somehow. Alternatively, I’d love to find a less painful way to create and manage my backend UI.
But I’m not there yet. This post is mostly to help me put my situation in writing and organize my thoughts. I’d also be interested in any advice or ideas, though. Maybe I’m overthinking it. Maybe I’m lazy. Maybe I’m holding out for a perfect solution (I know there never is one). This is the thing about being an amateur web developer—I have so much unfettered freedom to do things on my own terms, but I don’t necessarily have the time or inclination to use that freedom.