I have seen various posts referencing a CMS for Elements, so I thought I would share that over the last month or so I have been working with ChatGPT (OpenAI) and Le Chat (Mistral AI) to create a Foundry 3 Alloy replacement that I will be able to use in Elements.
As Alloy is a significant part of my Rapidweaver / Stacks/ Foundry 3 website that I want to move to Elements, getting a blog sorted was a priority. Without a replacement, I wouldn’t be able to migrate to Elements. I have a lot of blog posts, so one prerequisite was that my new version could read and show all the existing ‘Alloy’ blog posts.
At this stage, I haven’t attempted to replicate everything available in Alloy but I have added some new functionality that I was looking for.
I use Sitelok by @vibralogix and one of the bugbears I have with Alloy is that it has a roll-your-own security which only allows two user credentials to edit the blog. I wanted to be able to use Sitelok to control access so that all my security is one place. This means there is no inbuilt security in my new version as it will be controlled by Sitelok.
With progress so far I can display the existing posts in any of the six layouts available in Alloy (this can probably be easily extended). An enhanced function is that you can have a specific layout on the first page and a different (or the same) layout on subsequent pages. You can display blog pages before a date or after a date in ascending or descending order. This is useful if you want to setup blogs for say events happening in the future.
If a User is allowed to edit posts, then he is presented with an ‘Enable Editing’ button while browsing the blog and after clicking on this button (changes to ‘Disable Editing’), each post has three additional buttons (in addition to the ‘Read More’ button) to ‘Add’, ‘Duplicate’ or ‘Edit’ a post. All the posts use markdown (as Alloy does) and all the meta-data is used from existing Alloy blog posts, although it is reformatted into a new structure. It uses EasyMDE to edit the posts. This means that editing blog posts is done from the normal blog display as opposed to having a separate function.
Another addition is that there is an automatic ‘autosave’ of a the work-in-progress of the posts as you edit them (configurable but defaulted to 30 seconds) plus there is a manual autosave button for work-in-progress. This autosave doesn’t alter the original post being edited. This only gets updated when you click ‘Apply’ (you can continue editing) or ‘Save & Exit’.
When in editing mode, the body background colour is changed (default light green). There is a blog search facility, when a search is active it changes the body background colour (default light blue) so you know there is a search in progress when paging through the blog pages. Likewise when you edit a post and it is a draft (i.e. not published) the body background is changed from the default edit-mode colour to a draft mode colour (default light orange). When viewing the blog posts, there is a filter to show all posts (including drafts) or just draft (non-published) posts. Any draft post is identified by an overlay on the image (see example in first image).
It is largely working but I am still working with my AI colleagues on resolving some outstanding edge case bugs.
So this has all been written using standalone PHP (non-Elements) code. Once I have sorted out the last few bugs and stopped adding new features , I am intending to implement it into an Elements DevPack so I can drop it in as a component into my Elements Project.
I have primarily written this for my own use but with a view to making it generalised so it could be used by other Elements users.
Realistically it will be another month or so before the first ‘alpha’ of the Elements DevPack version is available for others to try.
Anyway, I thought I would share this update on where I have got to with this. I wouldn’t have dreamed of doing this without having Elements as the end destination and the help of AI.
PS. The steampunk themed images of Bengal cats have been created using (ChatGPT, Le Chat & Grok)