I was told not to make a CMS, so I made a CMS framework.

Ryan Susana
4 min readMar 24, 2019

A different approach to Content Management Systems.

Google’s search is a cold place for me, sometimes.

You see, I’m a freelancer and my main focuses are web, mobile and desktop applications.

One of the most annoying job requests I get are small businesses with some sort of unique business model. These business models vary and tools like WordPress, Joomla, or some sort of Headless CMS rarely ever cut it. Sometimes I needed it to expose an API, sometimes I needed really custom interactions, sometimes I wanted plugins that actually worked.

The other solution is to build these content management systems from scratch. Making mundane CRUD screens that take up way too much of my time, with me ending up with yet another uninteresting project on my résumé.

This is frustrating, because I only freelance part-time(as I am also finishing up my CS degree). And because I essentially live as a student, these jobs are easy and can really help me out month-to-month, as I can find them pretty easily. These jobs just suck, but they pay.

So I took another approach.

I made Elepy, a Headless CMS framework for Java.

I was so fed up with these basic CMS applications, that I started to work towards a solution that could streamline the process of making a content management solution so much, that I could make Content Management Systems in my sleep.

After months of architecting, designing, implementing and failing; I did it. I started pumping out websites and apps like it was nobody’s business. And as the requirements per project changed, the feature-set of the framework grew. For example: One client didn’t want MongoDB, because he heard PostgreSQL was better, so I had to make it work with SQL. I had to make the framework as extendable, customizable and replaceable as possible(to keep up with these weird requirements).

But how is it different to any other Headless CMS?

Well, I’m still programming, not drag-and-dropping. My code defines exactly what I want to do, without the boilerplate. All the layers (database access, business-logic and presentation) get effortlessly generated for you after you define what your domain is. And if you ever want to change any(or just a part of a) layer, you can do so pretty easily. Here’s an example of the code for a basic product CMS:

This is what gets generated for me:

Includes things like pagination, searching and sorting. The whole database layer and business layer is effortlessly generated.

How it works now is that whenever I have to implement a custom feature that only applies to a specific business model, the framework literally gets out of the way and provides support for writing the custom functionality.

Read more about that here: https://elepy.com/docs/overriding-elepy

I’m happy with it!

It was a success! My personal website, 15+ websites/apps for clients, the Elepy documentation(with GitHub integration) and part of my DevOps automation all run successfully on Elepy. Things that usually take a month, now take around a day. I can now say that I focus much more on domain problems, rather than wanting to slam my laptop into the ground, because the WordPress plugin that I bought didn’t have a certain feature.

And because it essentially pays for itself in development time, I decided to open-source the framework and make it available to all the programmers who were once as frustrated as I was!

Here it is:

Feel free to 👏 if you enjoyed the post and are willing to hear more about Elepy in the future. You can applaud up to 50 times :). Happy coding!