Ask HN: What is the best development stack for custom CMS applications?

6 points by mertemin ↗ HN
I am a freelancer developer. I have a slowly growing list of Web applications that I developed for my customers.

Most of the applications are custom content management systems that are easy to use without requiring any technical knowledge, specifically built based on customers needs and requests. Existing systems like WordPress, Joomla etc are too complex for them with a lot of options/configurations. There are alternative simpler ones, but still the requirements per customer generally do not align with what is provided. So I develop custom simple apps with which they can simply login to dashboard and add something, remove something, edit something etc. If the content of the website tends to stay the same for a long time, I go with pure HTML and CSS with small improvements with JS. These applications/websites has varying traffic loads from 10s of users to 1000s of users.

I simply use LAMP stack, specifically CodeIgniter for custom application development, because I had a dedicated server back in time and CodeIgniter seemed simple, and easy to use and develop (I took a look at others, and tried some of them such as yii, but as I said I needed something simple). The cost for all is around 100$/year, which is cheap.

However, these days with new platforms/solutions like heroku, AWS, Azure, docker, I feel like there may be a better approach. I use ruby (Sinatra) and python (flask) for small side projects, but when it comes a content management I think they fall short. I know there are options like Rails, Django, but I am NOT developing full-fledged systems.

And the free option for heroku draws my attention recently, but the database could grow more than what they provide you for free. DigitalOcean could be another interesting alternative to my current development stack.

What are you guys using? Do you have any suggestions?

8 comments

[ 2.7 ms ] story [ 28.2 ms ] thread
tl;dr Go with what you know and are comfortable with.

Any of those you mentioned could be used. Personally, I prefer a more hands off framework such as Express (Node.js) or Bottle (Python) compared to something like Rails.

Where do you see Sinatra or Flask fall short? That may help us in answering your question.

Depending on the client, I usually use either:

- A customized Django admin interface (https://docs.djangoproject.com/en/1.7/ref/contrib/admin/). Yes it's not ideal but it's often good enough.

- A fully custom admin UI built from scratch (Python/Django).

I don't know why you don't think Rails/Django is an option when developing "full-fledged systems".

For hosting, deploying with Ansible to a Digital Ocean VM has worked very well. A $5/mo droplet is more than enough for light - moderate traffic.

I had a typing mistake. Indeed, Rails/Django is for developing full-fledged systems, but what I am building is really lightweight and simpler than those.
I also use Django for very small/lightweight/simple websites. Django is very good about staying out of your way if you don't want to make use of its built-in magic. If you ignore the "batteries included" parts of Django (ORM, class based views, forms, auth, caching, etc), it's still a good/easy/structured way of routing URLs to a python function, which seems to be the appeal of Flask. The function takes in a request object, and returns a string for output. Can't really be more simple than that.
I've usually found that more opinionated frameworks are better at making lightweight and simple applications. When working in Python, I will only reach for Flask or Bottle when I know that my problem is complex enough that Django will get in the way.
Most CMS's tend to be simple to moderately complex CRUD apps, i.e., exactly what Rails and Django excel at.

It sounds like you enjoy working in PHP, so maybe try Laravel (Rails in PHP) or Symfony (Django in PHP). Symfony even comes in a CMS-skeleton flavor called Symfony CMF.

Have you tried http://buildwithcraft.com/ as an alternative CMS. I use it for all my client sites. The ability to make client specific fields on a "page" basis and a templating system that stays out of our way it is the best CMS I have worked with.
You should stick with what you know. If you are comfortable with LAMP stack then you should keep using that. I am assuming that a good chunk of your work comes from maintaining what you wrote for a previous client and for these type of jobs it is best if you follow a standard (which you define). That way you won't have to think (as much) about your code before you start to make any changes to it.

A vps provider like digital ocean or linode can certainly be a good choice, if you also take care of hosting. With them you could set up a proxy server (I prefer nginx) in front of the apps for your clients and serve them all from a single vps. The traffic of 10-1000 of users is not too big but if you feel that performance of an app is degrading you can always migrate it to a managed hosting service like heroku. That way you can also charge different fees from your clients based on how you are managing their applications.