That’s a templating engine, and I’ve not come across an implementation for it for the BEAM yet?
Wouldn’t the implementation be similar to the haml one?
No clue? I’ve not ever looked at haml so I don’t know if it’s sandboxed “safe” or not. Plus it’s not really standardized enough to be useful for a CMS, where something like ReST would be far more common (or really just use HTML templates if security isn’t an issue).
And is someone might want to add dynamic parts? with functions like the well known wordpress loop?
`<?php ` `if` `( have_posts() ) : ` ` ` `while` `( have_posts() ) : the_post(); ` ` ` `the_title( ` `'<h2>'` `, ` `'</h2>'` `); ` ` ` `the_post_thumbnail(); ` ` ` `the_excerpt();` ` ` `endwhile` `; ` `else` `: ` ` ` `_e( ` `'Sorry, no posts matched your criteria.'` `, ` `'textdomain'` `); ` `endif` `; ` `?>`
Maybe eex is not bad idea for the start to keep everything simple
Keep it pluggable at the very least, then you could implement any, starting with the unsafe but fast eex. ^.^
For templating I’d suggest look at:
- Solid which is a port of liquid which is what Shopify uses
- Mustache which is compatible with handlebars that Ghost uses
These are both non-evaling template engines so “safe”.
Some other thoughts (since I’ve been thinking about this too).
A monolithic publishing platform doesn’t feel right on the BEAM (or on the Internet). I’m probably heading down the ActivityPub federated path - even for my personal projects.
Instead of traditional plugins which load into the BEAM I’m planning to be more event-oriented and “plugins” can listen for and subscribe to events that can transform content. I don’t want to go the traditional route of loading modules because:
Doesn’t fit well with a distributed platform where there may be multiple nodes running the code
Risks the VM and I want to be long-running
Inherently less secure
Definitely going to support many languages and cultures as first-class citizens (as you plan)
Makes use of a new image library I’m writing based upon libvips since photography is a big thing for me
Will aim to statically publish as much content as possible (automatically)
Will have a configurable workflow along the lines of IFTTT
Given how my brain works I’m building from the bottom up while I think about architectural issues some more. Internationalization mostly done (where did those three years go?). Image processing is under way. Workflow engine (not just for publishing) is being designed. I’m also going to bite the bullet and build an OpenID compliant privacy-oriented authentication platform (because why not).
You can imagine this isn’t shipping next week but more than happy to be part of the conversation. I think Elixir and the BEAM can make for a very good next-gen publishing platform that learns from the good things places like Medium brings without the many business model and platform issues that come with it.
First of all, you should decide who your users are, before you can decide how to build it. If you require highly technical users who can deal with advanced server setups, distributed apps, setting up Docker or Kubernetes, etc., you will never reach the common WordPress user and then your system is already dead from the beginning.
What made WordPress so popular is how easy it is to use it. Almost everyone can use the installer to install it on shared hosting and after that, no real server maintenance is required (doesn’t mean there should no).
From what I experience, most developers don’t know how to build user friendly software (hell, look at the k8s config mess) and I burned myself discussing some CMS related topics in this forum already. Most developers seem to want to create their superior dream architecture and don’t think about how that influences the experience for the not so technical person.
Just to chip in with our experience building an internal CMS in Elixir. We are actively thinking about releasing it as a hex package, but as with most things at startups, no one has the time to clean it up and make it actually installable, but watch this space over the next 6 months or so
Anyway, here’s what we needed and quick version of what we’ve done: This is what powers https://www.stitched.co.uk/ We’re a D2C e-commerce company and we need to be able to produce varied content pages quickly. I should add as well, we outsourced image and video asset management to Cloudinary, because we just couldn’t be bothered with it.
Anyway, what we’ve built is a simple module which stores pages as rows in a PG DB with a
content JSONB attribute. This object is essentially a series of Ecto embedded structs, defining the data structure for the page, which are a series of Blocks. A block is just an Ecto struct which knows how to present itself. So, rendering pages is 1 row DB fetch, then pass the stored data through a few functions which produce an HTML document.
This has meant, for us, that’s it’s been easy for users to customise pages, change the layout of blocks, edit etc., but the constraint is that the tech team has to build the new blocks. For our org this is fine, as creating a new block is as simple as defining a struct and writing an HTML template. It’s also trivial to turn this into JSON - not a requirement for us currently as we’re heavy users of LiveView.
Happy to answer more questions, and if there’s some interest, look at seeing if we can’t progress putting a package out.
@Phillipp, I agree with you, a lot of developers are building very complex and amazing things but don’t think about the end users.
That might not be tech gurus. So my idea was to build for everyone and offer options to satisfy both camps the: tech masters and the non technical user.
that in Phoenix, Elixir we don’t have any automatic package installer, it would be cool to have
mix add pacakage_name@latestjust like npm or yarn.
also the ability to solve package problems through an mix task
Thanks for your ideas suggestions and the point of view over the user usage of the CMS, really appreciated.
Thanks @kip for posting your thoughts and also for the links on a path to develop a CMS, they are incredible and very useful.
I have one question how can the libvips library be used with phoenix and absinthe?
Ahhhh, I am (very slowly) writing a NIF wrapper for it
I understand thanks for the quick update.
Also just wanted to say that it looks amazing on how much supported types and libraries it has incorporated, it could really become a game changer in the image manipulation world.
Awesome thanks for the support and also the experience you shared by building your own CMS.
Do you have a lot relationship between entities in your schemas?
Ex: User likes User followers User Comments User Favorites?
What do you think about it, could it be a better options to keep with the new web standards?(because i can’t figure it out why mozzila would build there own template engine)
Also https://www.w3.org/TR/2018/REC-activitypub-20180123/ looks a lot like json schemas(with messages attached to each node), so implementing them in a phoenix project requires a json api or a genserver?
I will start working on the new CMS under the name
WolfPress to simlar to Wordpress better yet
WolfCMS, easy to remember.
I also wnat to implement the following versions if I will have time a liveview version a svelte version and a vue version(in vue i plan to support a SSR framework). But will see how things go.
My main goal for this project will be to create my own website with it and a blog comparable with WordPress. The official announcement I will make it when i have MVP(Minimal Viable Product).
If anyone is interested to help you can send me a private message on the forum.
The CMS will be dveloped using the TDD method so all the features will have to be built one by one with end to end testing, this is the goal.
Thanks everyone for the help on this thread and also here Multilanguge CMS database schema, ideas, opinions for all the ideas suggestions and support.
Nah we don’t have any part of the CMS for user input, it’s just a publishing platform. We are looking at how to map entity relationships between pieces of content though, but that’s for recommendations.
Like the name too. Though I wouldn’t bother with using JS, make it elxir native and just use LiveView for the interactive bits.
There will be a Liveview version but i want first to build a SSR version using https://quasar.dev/.
Quasar makes it possible to build for all platfroms linux mac windows ios android using one app.
Also i have a lot of interest in PWA’s.
Thanks for the suggestion.
Moved everything regarding WolfCMS here WolfCMS thread suggestions and help and discussions
Be very sure there’s an interest, and that’s way beyond ElixirForum as well. This is a very under-served area that’s ripe for disruption and has been for like 5 years at least now.
Building good WordPress sites with actual functionality is messy, error-prone, tough, and almost always non-deterministic. If you guys can pull a good CMS that’s easy for non-tech users you might even start eating from WP’s cake.
Do consider it!