Ask HN:Which is the simplest CMS to Integrate?

30 points by hval ↗ HN
Consider I m a front developer ( ReactJS or similar ) who is building a custom portfolio website for my client, I need to provide him with an interface to update his upcoming projects/works, etc. Which CMS would you suggest? - Easy integration - Affordable - Less code - Framework agnostic - Headless Preferred

28 comments

[ 2.4 ms ] story [ 62.4 ms ] thread
sanity.io hands down, they have starter kits for most of the big JS libraries/frameworks, super easy to customise and a generous free/metered tier
Check out https://getkirby.com. I have been working exclusively with it for 6 years and still love it.

You are in total control of the frontend since the core doesn't output any HTML. You can use it with plain PHP templates (easiest) or headless. The admin panel is clean and totally customizable via an YAML configuration file. Content is stored in files, no DB needed.

I would avoid a support nightmare if you can't sell a maintenance/support contract for the backend part and try to avoid deploying a CMS at all.

I would suggest you look at CaaS solution like Contentful, Prismic.io or similar which would provide the editing interface as a service and simply expose the content through an API for your front-end code to use.

No issue with having to update and maintain the CMS, no issue with scaling, less security concerns, etc... If you are not in the business of hosting CMS, it's clearly the best solution for you.

I have good experience with Strapi.
I'm a big fan of GraphCMS since it integrates with all the graphql tooling available for React. I've used it with projects using Next and Gatsby. Their free plan is generous enough I haven't upgraded a single project of mine.
I love wagtail.github.io, it's clean, easy to customize, and integrates well. But you do need to know python, which can be a deal breaker.
I love Wagtail too. It's really nice and polished, well-supported, and idiot-proof for the end user.

But for this use case it sounds like something hosted by a third party (Contentful, etc.) would be better.

I’ve used Netlify CMS, it’s pretty nice and free. The data stays in GitHub and it’s compatible with a number of different SSRs. I used it with Gatsby before, it worked well.

https://www.netlifycms.org/

If your client wants a low-code CMS where they maintain their own content... why are you building a custom site in the first place?

Without some solid requirements that dictate the need for custom code, I'd just point them at Wordpress and call it good.

Wordpress is low-code in the sense that somebody else wrote most of the code already, but it's incredibly high-maintenance. At some point some plugin is going to break or the cache is going to be stale in some obscure way and you're going to have to debug it, and chances are the client added some of their own plugins (if you allowed them) and they all interact in some wonky way leading to a cascade of bugs that only manifest in a perfect storm. Ugh.

(not trying to be snarky here... we're moving away from a LAMP stack just because after deployment it tends to be like 95% devops just to keep the website up and running as plugins get outdated and core deprecates things. It's a drain on dev time. Some Wordpress hosts use screenshot-based autoupdates and compare before & afters, and that helps, but isn't perfect.)

I've been running Wordpress blogs and helping people with theirs for a long time, and simply never had that much maintenance to deal with. Sure, if you let them go nuts with plugins it will go wonky, so don't. If they install a plugin that breaks everything, uninstall it and help them figure out a better solution.

Wordpress out-of-the-box just works. Stick to the basics, and you'll be fine. And for the use case of OP, that is exactly what they seem to be talking about - a basic portfolio site. If you need more than the basics, that is when you leave Wordpress. It sounds like you might be getting into trouble because you are pushing Wordpress way past its core use case.

I've never seen a Wordpress site meeting only its "bare use case" that wouldn't have been better served by Wordpress.com itself (the hosted managed service) or Squarespace. The clients who've hired me did so explicitly to push Wordpress past its defaults, whether through the use of something like a page editor (WPBakery/Elementor/etc.) or an events plugin or another or some contact form... those are all basic, common usages that still require maintenance.

If their use was basic blogging, I try to steer them away from needing to hire a dev at all (why spend the money?).

I have tried Strapi and the upgrade and schema-migration path for self-hosted versions left me feeling uneasy. I could not see how rollbacks work and had a few hiccups while testing it locally. Take that with a grain of salt since i did not use it in production. Their community was nice and helpful though.
Google Sheets via Sheets API

https://developers.google.com/sheets/api

- free

- framework agnostic

- easy to integrate (IMO relatively easier than parsing a WP API, setting up proper taxonomy, etc)

- your user is probably already familiar with Google Sheets

- not ideal for sensitive info, that's ok because this is a portfolio site for public info

- not ideal for large datasets, that's ok because your user will have a relatively small, static dataset

Here's the sample frontend: https://developers.google.com/sheets/api/quickstart/js

If it was for a big client needing a business solution, sure I'd say you need to choose Wordpress as it is industry standard. But because it sounds like your client is an individual who hired you for their own personal needs, IMO Wordpress is overkill here.

Better yet, just hook up a YAML flat file, show them where it is in Github, and give them collaboration permissions :D

I have made this mistake several times. If you are doing it for a client, Wordpress is the best answer.

It's far from sexy, but you know it will still be stable in 9 months and the client has other avenues for self support.

Hey, we're in a similar situation and we just evaluated a bunch of different options. Just wanted to share some findings.

One, in terms of integration, if you're considering headless you probably already are thinking of a decoupled solution (meaning frontend and CMS are separate anyhow). In that case, it might help to think about the CMS as just another generic API that your frontend has to speak to instead of "integrating" with via bespoke SDKs.

These days, many vendors offer GraphQL output for their content delivery APIs, and that's really easy for Gatsby or Next.js or graphql-request or node-fetch to consume. The resulting shape (object schema) you get back as a response is easy to map into component trees and iterables. Many (most?) headless vendors offer GraphQL endpoints now, and while it's not perfect, for most pages it'll be easier than having to join together multiple REST calls (like one call for posts, another for authors, a third for tags, a fourth for related items). GraphQL makes that all one API call returned as a nested JSON.

Among headless options, there were initially 20+ vendors to choose from (this site has a list: https://cms-comparison.io/). As the primary dev, I did a first pass and eliminated a few right off the bat that I didn't think would fit our needs. Then we asked the other stakeholders to participate in a pretty exhaustive weighted features comparison (https://airtable.com/shrDPlmk7R3B4ddO1), having each stakeholder compare features across each CMS, then weighing each feature by their importance to our project. While we didn't choose the final winner this way, it did help narrow our initial list of 20+ options down to a more doable 2-4 finalists. We built functional prototypes (choosing a complex enough page to showcase the CMS's capabilities) and demoed them to the stakeholders and began contract negotiations.

We learned a lot from that process for our own needs, and I'd encourage you to pick a few and run a similar analysis just for yourself and your client, based on their needs. For example, will they require deeply nested content models (like a page that contains a section that contains an accordion that contains a WYSIWYG that contains a paragraph with a CTA button that opens up a modal that they can define in the CMS).

Some of the options are better at handling that sort of thing (GraphCMS, Contentful), but that comes with tradeoffs in other parts of the editor experience. It seemed in our evaluation that the CMSes that were the most flexible in terms of nestable content models were also the ones that didn't offer as good a page composition experience, as in being able to visually drag and drop things around a page (move the accordion above the hero) in an intuitive way. The market is still trying to figure out how to best do their UIs and UXes. Some of them treat every field and model as equivalent primitives, meaning you build everything up from the deepest nested layer (usually something like a "button" or "image with caption") then add containers within containers on top of that. But that quickly becomes visually and mentally overwhelming for the editors, who usually think about pages not in terms of nested schemas but the functionality that they want to add. Some of the other options, then, purposely avoid the "everything is a model" design and break things down into pages, posts, blocks, etc. (DatoCMS, Storyblok, ButterCMS). In any case, it's worth poking around a few of them and trying to model a complex page or two in their schema builder (model editor) to see if the resulting page would be easy enough for a non-dev editor to use and edit.

Among open source packages, to my overwhelming surprise, Wordpress with Advanced Custom Fields (

I use ACF but I can't tell what makes it significantly different from any other headless CMS schema modeling systems in Strapi and etc. Can you say more?
In terms of modeling, it handles nesting extremely well (repeater fields, Flexible Content Field). It has powerful conditionals (show X button if Y field = Z).

In terms of layout, it can present a layout of fields like this sample (https://www.advancedcustomfields.com/wp-content/themes/acf/a...) whereas most headless CMS just show fields one after another in one long list, or at most inside a collapsible accordion.

The combination of nestable, reusable blocks + conditional fields means that you can really make the editor experience streamlined if you put in the time to design a good layout.

The other CMSes don't really give you that choice; you're bound by their editor frontend's limitations (as in you can't rearrange fields, can't group them together logically, can't put them into tables or columns or rows).

It's the kind of stuff that doesn't matter to devs much (it's all JSON once it gets to us) but can make the editor experience more intuitive.

Edit: Also, coupled with custom Wordpress taxonomy plugins, it allows you to model things that aren't necessarily pages (menus, products, quotations/testimonials, events, etc.). Many of the other FOSS CMSes use file-based models in which every model has to be a file/page. You can often work around that but it's not very intuitive, like if you wanted to nest a testimonial inside an accordion on a product page, how do you model that? It's pretty easy in ACF or the DB-based headless CMSes, not so easy in the file-based ones.

I’m using markdown files and plain images on dropbox. Non-techies love it.
Many people in the comments recommended using WordPress, and for good reason. Your client can manage their content on their own, and WP will be around for the foreseeable future.

If you want to use WP as usual and get a headless output in one click that even your client can generate, check out Strattic: https://www.strattic.com (Disclosure: I'm from Strattic).