I spent some time tonight working on the next version of Grazie!, which will be 0.7. Following my redefined roadmap, the major change is the update from Remix to React Router 7. That is mostly complete. I've also done some bug fixes and added some missing features: added delete functionality for Posts and Pages; fixed a bug where editing a Post didn't display the categories list; Pages now display status, if they are a draft, and an edit button; the Tumbleweed Snapshots feature has had a few display fixes and its feeds (RSS, Atom, & JSON) now also list the latest snapshot.
Some of the features I'd planned for 0.8 may come in 0.7 instead. This is mostly because 0.8 will, hopefully, use Rsbuild, and that looks like more of an undertaking than I initially expected. Rsbuild is working on a react-router-plugin, so that will be a lot of help, but it's not released yet. My intention is to fork that plugin to become a zulu-plugin, but Grazie! doesn't necessarily need to be running on Zulu for 0.8. I'd rather build up Zulu on the side and switch to it once it has matured some.
With that in mind, I'll probably do a few more fixes and update the main branch to 0.7, then build onto it a few incremental versions, on the way to 0.8. I would like to improve the Notes and there's also the Theme system updates and a Blocks system planned. The latter two will be transformational, as they add some very convenient features. I also want to add an RSS reader, image galleries, and auto-save.
Zulu is a server-side rendered framework for React. What makes Zulu different from other frameworks is it uses Rsbuild for its build tool/support libraries, Biome for linting and formatting, and the React Router 7 framework for routing, and it doesn't use Vite. Initially it will use Mantine for UI, for my own purposes, but I plan to provide templates, or at least a barebones version, people to choose their UI.
I personally feel this combination of tools provides a lot of functionality, so Zulu itself is actually very small, as it relies mostly on its core dependencies. It also provides a fairly straight forward migration from Remix 2 and React Router 7 framework. This is by design, as I use Remix for my personal and professional projects. The main difference between Zulu and React Router 7 framework is it doesn't use Vite and it uses a custom server built on node:http. I plan to experiment with other server options, but so far node:http has been more than adequate.
The real powerhouse behind Zulu is Rsbuild, which is blazing fast, and just very good all around. I really don't understand why more projects aren't using Rsbuild. In fact, Rsbuild was the initial step that got me to build Zulu in the first place. It's just not being used that much and it's almost silly how fast and flexible it is. A friend of mine, who generally uses SPAs, seemed quite impressed with the build speeds we are seeing in Zulu.
You can already fine Zulu in my public github repositories, if you want to take a peek. It's very much experimental and will probably be unstable until I can build up some decently sized test cases. I'm currently using it to replace React Router 7 framework (Vite) in the dev branch of Grazie!.
The purpose of Grazie! is to have a CMS that can be used on multiple web sites, without having to start from scratch each time. It's still moving in that direction, it's not perfect for that yet, but that's where I want to get. The goal is to have Grazie that provides a reusable, stable base, and then you can extend that or override it.
Remix has been ok for the CMS piece. Unfortunately, everything I've tried with the Vite Dev server in the later versions of Remix 2 or React Router 7 has been atrocious. It's unusable as a dev server, as far as this code base goes. The production server is fine in React Router 7, but I've put too much time trying to figure out the dev server and I'm not doing it anymore. I'd rather do something else that may or may not work, either one still feels more productive.
So here's the new and amended plan:
I want to use rsbuild as my build tool.
I want to use Express server for production and rsbuild for my dev server.
I'm willing to use React Router 7 as the router, but it's losing it's luster for me.
I'll consider using Tanstack router, if it checks all of the boxes.
That's it for now. I think that's doable and then I can carry on with the more important stuff from there.
I've updated this site to the "latest" version of Grazie. It's now caught up with the main branch, which I'm calling 0.6. The actual latest is 0.7, which is the React Router 7 migration, but it's not ready yet. That branch isn't in the repo yet. I'll probably tag 0.6.0, as it is the last Remix 2 build, and 0.8.0, as it will be the first beta. 0.7 will be the beginning of a new dev branch in the repo.
I can't remember if I'd mentioned it before, but I've built a parser and page to track Tumbleweed snapshots. It'll be in the next site update, which should be sometime this week, I think. There will also be feeds for other sites to use. The Tumbleweed page will display what snapshot you are on, if you are using Tumbleweed, and there's a diff viewer to show package changes between the current snapshot and the past snapshots.
I haven't updated the Grazie versions in a while, so when I merge the React Router changes, I'll call it 0.7.x. Version 0.8 will have the new theme system updates, which will be a pretty big shift, and then 0.9.x will be betas and RCs.
I am not at all happy with the way the react-router dev server works, which is just vite dev. It is very slow and is basically only useful for error messages. I've put in a stop gap with nodemon and the production build/serve, which is much better, but not entirely useful as a dev server. I'm still trying to get it figured out. Unfortunately, it's the reason I hadn't migrated much sooner, even to newer Remix versions, because the dev server is just terrible.
I still have a few updates to do in the react router migration, mostly dealing with how route components changed from Remix 2, and tweaking the routing in general. It runs really well on the production server, I just want to get those few things cleaned up.
I'm not sure how much time I'll have to work on it this week, but I'd like to get this site updated with the last Remix 2 version of Grazie. I'm trying to decide if I want to launch ProfoundGrace.org with the Remix 2 version or wait and merge the React Router version into it first. It may be easiest to wait for the changes planned for 0.8.0.
Speaking of 0.8.0, my plan for it is to add a site folder outside of app, but I'm still trying to decide on the exact structure. The idea is to have the core Grazie app and then site specific stuff in the site folder, like theme, routes, and components. This makes it easier to build different sites which Grazie and makes merging upstream changes easier. I'm also thinking about dropping PostgreSQL support. Allora will have a better database alternative to SQLite, so I don't really see the point in having PG in Grazie!. It's not changing for now, but is a possibility.
I had planned to stay on Remix 2, without Vite, for a little longer, but some initial tests went well. I've rebuilt Grazie! to run on React Router 7 Framework, which is the equivalent of what would have been Remix 3. This means we get React 19 support and Vite. The latter, I'm not super impressed with. I kinda hate the Vite Dev server. It's super slow, compared to the Remix Dev server. I've tried a few things to speed it up, but I can't believe it wants to download every package file as a chunk on every refresh. That just doesn't make sense, plus it's non-responsive for a good 10 seconds after a restart. It has to be, something, not entirely correct, but I haven't figured out what, if that is the case.
The good news is the production server runs fine, so I've decided to press on. The big changes planned for February are, obviously, the RR 7/Vite migration, and then I plan to restructure the way themes and overrides work. Currently, you can override a page/layout, based on the loader value for that page, in your theme. I plan to add route and component overrides as well, but I haven't decided if those should be in the theme yet.
The goal is to build something that can be deployed and built onto for different purposes, without causing a lot of issues merging upstream changes. Th current structure is almost there, but I feel like it needs another layer between Grazie! and site specific changes. It needs a better core and customization separation, basically. That's what I hope to solve in February.
In addition to the package/framework migration, I'm also adding password resets and email support. The email support is kinda needed for the password reset. This change is driven by me moving away from bcrypt to the Node.js crypto module for password hashing. If a current user has a bcrypt hashed password, it will trigger a password reset workflow, when they try to log in.
If I get everything done, that I want to, in February, then we may be close to a beta for March. There are a few additional things I want to fix or add, but it wouldn't hurt for them to come later.
Today I merged the new RSS, Atom, and JSON feeds into Grazie!. The feeds are currently only for latest posts (up to 25 items), I plan to add feeds for categories in the future. I've decided to take a step back from the work I had done for theme component overrides. I think the block system is more important and may make component overrides unnecessary. I also worked on a page that processed Tumbleweed snapshots. That's mostly a personal thing for me, but it could be useful as an RSS feed, which I plan to add as well.
It's been sitting for a while (20250103 branch), so I went ahead and reviewed/merged the early January updates into Grazie!. It's mostly just the Notes functionality (although not complete) and some bug fixes. I've been working on theme overrides for route components/loaders. I'd like to get that finished for some other projects I'm working on using Grazie!. Either way I'll likely upgrade this site sometime this week just for the Notes functionality. I've also been working on RSS support for Posts, some RSS reader features, and a content block system, which will likely be part of the February updates.
In the evenings I've been working on the reboot of ProfoundGrace.org (PFG), which is being built on top of Grazie!. I have the Bible feature working fairly well, with some additional features it didn't have before. PFG will have it's own theme, named Rock, based loosely on it's existing color scheme. The work has driven some fixes and improvements to Grazie! as well. I found some bugs in the pager and content lists: the pager currently overwrites query params external to the pager itself; the posts listing page doesn't display correctly for privileged users when there are no posts. There have also been a few little fixes here and there.
In Grazie!, I've been working on the Notes feature, which will later merge into PFG and kinda be specialized for that use case. Notes in Grazie! are mostly a feature for me or any user that registers here; they are private notes and lists, so you can only see the ones you create. I also plan to add website Bookmarks to Grazie!, but I don't know yet if they will be public or private (or both).
Just so you know, I've forked Grazie! (my own project) and created a version that supports SurrealDB, named Allora. So far it's a 1 to 1 port, with just changes related to SurrealDB and dropping SQLite/PostgreSQL support. It's taken a lot longer to find time to work on it than I hoped. It will be the platform BeSquishy will be built on and will be open sourced eventually, along with the SurrealDB tools developed for it.
Fixed some bugs:
Pages now display titles as set in site settings
Improved SEO support
Posts category pages no longer show 404 when not logged in
Home page now shows even number of posts and columns
Error pages have better theme/color scheme support
My next focus will be on finishing Notes and then I'll probably be expanding Pages to support Categories and some more advanced options.
Update: I disabled the color scheme change transition, due to a bug. It was kind of a novelty anyway, I'll try to fix it and bring it back later.
I decided to go ahead and update to the latest development version of Grazie! CMS. There are lots of theme fixes/updates and little enhancements here and there. I decided to go with a darker dark color scheme and I've tried to make title colors/sizes more consistent across the site. There is also a new color scheme toggle on the bottom right corner of the page and I'll have some social links there (once I update the settings). The light color scheme also has a lot of fixes and clean up, but it's quite where I want it. You can check out my previous Grazie blog to see the whole list and some of the things I'm working on.
I spent some time this afternoon working on Grazie! (the CMS that runs this site). I haven't updated here in a quite a while, so I'll have to check some older changes, but here are some from today:
Various bug fixes
Fixed an issue that hadn't come up, previously unused, regarding fetching and caching settings stored as objects
Fixed an issue where some settings didn't fall back to their grazie.config settings
Fixed some keys that were based on old data properties (which meant they weren't unique)
Fixed some Typescript types
grazie.config.default.js is now the default config
override it with a grazie.config.js file
Added a SocialIcons component, so the icons in the footer can be functional
Added support for footer.social setting for twitter, github, instagram, etc
Favorite theme now uses SocialIcons in Footer component
Added an SEO component to generate meta() function arrays
The SQLite data.db file now defaults to the /data folder (previously in the /prisma folder)
Favorite theme is moving to a cyan color scheme
Working toward migrating all titles to be more easily themed universally
Updated all packages to latest versions
Today I bumped the version up to 0.5.0. It may get bumped again before I update here. I have a few more things to add, but I'm liking the cyan color scheme, so I may go ahead and update here if I don't have time to get to all of it. Here are a few things on my TODO list:
Finish Notes app
Finish Categories page
Finish refactoring titles to be more easily themed
Refactor all colors to use --mantine- variables
Fix light mode color scheme (mostly depends on the above)
Make dark mode darker
Add a theme editor to make most of them customizable
Add ability to have a dropdown in the navlinks (uses settings to be dynamic)
Add a settings preset, to allow reverting settings to default or knowing which settings to add (read are supported)
Add ability to upload and set site logo and favicon
Those are a few of what's on my list. There are quite a few others, but I need to build up to those and I feel the above are more important at the moment. I need to utilize the built-in features in Mantine better. I also want to add some help features, for both user and admin, and more image/upload features. I plan to build a Grazie! website soon, so some new features will come with that. Part of that will probably be updating to use the latest Remix recommended Vite features and adding a fastify server for serving an API or whatever you want.
More to come. You'll definitely know when I update again, the new theme updates make the current one here look pretty bland.