It's here! The long-awaited total revamp of my website! I call it Concordance. I'm stoked. Most of the changes are, in fact, on the back-end, but they enable me to much more easily maintain my website, and in particular, they enable me to drastically expand it. Most notable for returning viewers is not only the new coat of paint, but also the new navigation bar. It's now a proper tree, with nodes and leafs, which can be as deep as I want it to be. And every page has a canonical URL which is totally separate from its position in the tree, so if I want to re-arrange things in the tree, I can do that without fear of breaking links.
Also new is the sticky breadcrumbs at the top for easily identifying where you are in the tree, which I'm very happy with.
The Library page (formerly Books) has been heavily reworked, now having lots more ways to browse, sort, and filter, thanks to a complete rethinking of how to structure the relations in the database. Without going too much into the details, it involved a lot of normalization and the creation of some junction tables which really should have been there from the beginning (like the separation of author from contributor, and contributor from role), and the implementation of sound keys (particularly foreign keys) to ensure data integrity.
There are many small changes here and there (mostly to do with navigation and styling), but no new content per se. I did finally integrate the two Off-site pages Llamaphobia and USN, which were formerly just their own sub-domains.
For those interested, here's a list of technical things that have changed:
- I made a home-brewed front-loader to resolve URLs and load in proper content, instead of loading
headerandfootertemplates into every static page. This means I have full control over what can be reached by a naked URL by putting stuff in apublicvs.privatesection in my web hotel (if I ever change my mind about which section something should be in, I can simply move it). This also means I can make custom plugin helper functions for specific pages that use more advanced routing (like the new Library page, formerly Books). An.htaccesfile directs legacy URLs to my new front-loader, which handles legacy links, so no old links should be broken. (If they are, please let me know.) - I now consistently use PHP's PDO (PHP Data Objects) to handle all database interactions, in addition to prepared statements. This is technically not necessary since all database calls that are public-facing (like Search features) are for fetching only, but this is a new layer of security that I didn't have before. (Though the old system did use
mysqli::real_escape_string, which was better than nothing, but now with prepared statements, I don't even have to think about it.) - I use
cocur/slugify(with some tweaks) extensively for all URLs, especially for the Library page. For instance, the URLs for all the detail pages of individual books are now in the form{slugged-title-in-kebab-case}--{author-last-name}instead of the old{book_id}. So e.g.78now becomesthe-caves-of-steel--asimovwhich is much more readable. - I upgraded from MathJax v2 to v4 (I skipped v3). There's a lot of new features in v4 that I eventually want to take advantage of, to be explored more thoroughly when I write more math-heavy pages, which is coming.
All this makes me incredibly happy, mainly because I don't have to maintain two separate codebases (a headache), but also because I've streamlined so many janitorial tasks that I previously had to do manually, that I'm free to spend my programming energy on more fun things, like new content!