Datapad - a simple CMS I’ve been working on

Written by

Datapad - a simple CMS I’ve been working on

If you’re in the website building or managing world, you know there’s no shortage of Content Management Systems out there that can cater to a variety of needs. An issue I run into when shopping around for a CMS is that they often are good for a lot of simple things, and not great for very specific things. They try to be a “glove fits all sizes” when often you need something that combines features from multiple options. So this is where you stop and just think “why not just build my own?”

Even just five years ago the idea of building my own CMS was such a daunting and debilitating task that I probably wouldn’t have bothered pursuing further than I have before if it weren’t for the advent of LLM’s like ChatGPT to help me along the way. Prior, I’ve had to rely on pre-built solutions and work from that with Googling the solution to a problem I wanted to solve when changing the code to the very barebones CMS I’ve tinkered with on some of my websites in the past. This very blog ran that tiny CMS that I worked hard to twist into what I wanted a simple blog to be. I learned a lot by doing that, but the project I turned it into became much more grand in scale and features.

About two years ago, I had been running the numbers on getting the CMS software that we use for JKHub all up to date. It’s a subscription-based software, and our community always relied on donations to help keep it afloat. In years past, when the old administrator of the website needed money, he’d make a post asking for donations. After I took over, I was a lot more squeamish about asking for money. It’s not something I enjoy doing, especially since the community was shrinking in activity over time and the amount of features our website offered was being cut down in turn. However, we eventually ran out of all money in our donation reserves, so I had been fronting the cost completely out of pocket for about a year or so, which was not ideal for me at all and my financial state. The huge cost we have is the Invision Community software that JKHub runs on, so my idea was to just create my own version of Invision as simple as possible so we can run completely free and even bake in our own features we’ve been wanting. So I started with my tiny blog CMS and started growing it from there, and Datapad was born.

Datapad CMS

Initially, the idea for this website was to be a complete rebrand of the website and to begin incorporating more games than just the old Jedi Knight series games like we were doing before, but over time the idea seemed to be fighting with the entire reason we were doing this. If we were trying to scale back costs and be more stripped down in features, we can’t also be taking on more game communities and scaling up our resources and demand. At that point, it would be smarter to rely on an established platform like Invision and dive into morphing that to the new mission statement. The new site was going to be branded “RetroDatapad” and cover all retro Star Wars games, not just the Jedi Knight games. After deciding against that route, I decided to take the CMS that was in progress, and change it a bit to be more modular and customizable out of the box so it could be used for more than just JKHub. Part of this decision was due to me already using versions of the CMS on various other website projects like DeltaStyles, which uses an early version of it and was a huge testbed for a huge community to test drive it. This blog uses a version of it as well.

The key feature that I started with on Datapad was the files section. JKHub’s main feature is the user-uploaded and sharing feature where a user can upload their mod file for the game that they created, and have a dedicated download page for others to check out and download if they’d like to. The entire first year was dedicated to making that feature as polished as possible, and that happens to also be the core function of DeltaStyles, so you can see it in action over there. From there it was developing the users’ pages, and the index that shows all of the recent files, then the search function, the private messaging, etc. But the most daunting feature of all CMS’s is probably the Admin Control Panel: the place where admins go to control everything about the website. A lot of people don’t think about that needing to be built too, it doesn’t just appear. So it’s a huge process going from building the front-facing feature like submitting a file, so then letting the admins also see that file in a queue in the AdminCP and be able to approve it, delete it, edit it, etc. Or what about user management, or allowing users to report certain elements around the website and admins being able to take action on them. The entire comments section was a huge undertaking, and using it for not just file pages, but news posts and guides as well.

Datapad admin panel

The current feature that is constantly being touched is the notifications system, which is extremely complicated, because it needs to be written to with certain actions for both the action-taker and the recipient of said action. Getting that to be a consistent experience and thinking of all of the types of notifications is pretty bonkers: someone liked your post, someone replied to your post, someone send you a DM, the staff approved your file submission, someone liked your comment, someone commented on your file page, etc. The list goes on and on. Very complex stuff.

When I mention this project to someone that doesn’t do web development, they are shocked at how complicated it gets because they never think about it from the builder’s perspective. But when I mention this project to web developers, they normally ask why I bothered doing it in pure PHP/HTML/JS/CSS and it’s a very valid question. I went into this project intending to at least learn Laravel and Mithril because I wanted to hook into the Flarum project as a plugin for it, or at least just in similar function. But it all just felt very foreign to me, and often I feel like big frameworks like that are overly complicated. PHP and JS make sense to me, and if I were to be developing this on my own, I’d rather understand it extremely well for future support and development, rather than learning something completely new. I already have had to learn a lot while doing this, but not nearly as much as learning new languages and frameworks.

Developing Datapad after the scope focus has given me a new purpose for the project and progress has been really great. I’ve learned so much during the entire project about coding in PHP and JavaScript, but also just the concept of a CMS and the many, many endpoints and actions that a user expects when using software. Websites have grown so much from just a simple page or collection of pages to a huge user experience, that so much thought has to go into every inch of it and it’s been overwhelming but also extremely rewarding. I will spend an entire Saturday from 9am working on a specific feature until I get it done to my liking and sometimes don’t go to bed until midnight. But I feel so good about accomplishing what I set out to do. It’s been one of my favorite projects I’ve ever worked on. It may not be the most perfect or polished or modern CMS out there, but it’s mine and I’m proud of how it’s turned out so far.