A client asks: "Is this thing secure?" You freeze. You vibe coded the site with an AI agent and rarely thought about security at all. You are a marketer, not a security engineer, and you do not have a good answer ready. So you mumble something about HTTPS and hope they move on.
You do not need to do that. Slim Minima is built on the same security foundations the big platforms use, and the way it is built actually gives you a few honest advantages to talk about. This article gives you the plain-language version of how the security works, what you can truthfully tell a client, and the handful of limits you should be upfront about rather than oversell.
You can read this start to finish, or skip to the checklist at the bottom and use it as a script.
What "CMS security" actually means
When a client asks if your CMS is secure, they are really asking four things, even if they cannot phrase them:
- Can someone break into the admin and deface or steal the site?
- If the database is ever exposed, what does an attacker actually get?
- Can a stranger on the internet feed the site bad data and make it misbehave?
- Is my site sharing a server with strangers who could spill into mine?
Every answer below maps to one of those worries. The good news is that the most common ways a CMS gets hacked are closed off by how Slim Minima is built, not by something you have to remember to switch on.
The biggest risk in most CMSs is plugins, and there are none here
Ask anyone who runs a WordPress site and they tell you the same story: the platform itself is rarely the problem. The plugins are. Every plugin is code written by a stranger, given deep access to your site, and updated, or abandoned, on their schedule. One neglected plugin with a hole in it is all an attacker needs.
The more plugins a site collects, the wider that attack surface grows, and most of it is code nobody on your side ever reads.
Slim Minima takes that risk off the table by not having a plugin system at all. Everything it gives you out of the box, the page builder, the blog, the media library, the contact forms, the menus, the SEO, the AI connector, is built in natively. It is one codebase, written and reviewed as a whole, not a pile of third-party add-ons bolted together.
There is no marketplace of unknown code to install, so there is no neglected plugin waiting to be exploited.
There are exactly two pieces that live outside that codebase, and both belong to you, not to a stranger:
- Your media storage. By default this is Cloudinary, connected to an account you own. Cloudinary is an industry-standard media platform trusted by major companies worldwide, with its own enterprise-grade security and compliance behind it. If a client would rather keep media in-house, that connection can be pointed at internal or self-hosted storage instead.
- Your database. By default this is a Neon Postgres database you own. Neon is a modern, industry-grade managed Postgres provider built to enterprise security standards, and Postgres itself is one of the most battle-tested, trusted databases in the world. It can be switched to any other Postgres database you control, on whatever host or infrastructure the client requires.
Both swaps happen at the code level, and because Slim Minima is built to be worked on by an AI coding agent like Claude Code, making either change is a straightforward, guided edit rather than a research project. The point for a client is simple: nothing about your site depends on third-party plugin code you cannot see, and the two external connections that do exist are yours to place wherever you trust.
Passwords are never stored, so they cannot be stolen
This is the one most people get wrong, and it is the one clients fear most.
There is a user record in the database, but it does not hold the password. When someone sets a password, it is run through bcrypt, a one-way scrambler, and only the scrambled result, called a hash, is saved. The hash is a fingerprint of the password, not the password itself, and there is no way to turn it back into the original, not even for you.
What this means in plain terms: even in the worst case, where someone gets a full copy of the database, they still cannot read a single password. Compare that to the breaches you read about in the news, where millions of plain passwords leak at once. That cannot happen here by design.
Getting in requires a signed pass that cannot be forged
After a correct login, the user is handed a signed session token. Think of it as a wristband at an event: the door staff can check it is genuine at a glance, and nobody can counterfeit one without the secret stamp.
That secret stamp lives only on your server. Without it, a forged login is mathematically out of reach. Every admin page checks for a valid wristband before it shows anything, and the system knows the difference between an admin (full control) and an editor (content only), so an editor cannot reach settings or user management they should not touch.
The login also enforces a minimum password length and blocks after repeated wrong attempts, both per IP address and per account. Ten attempts per IP and five per account within a ten-minute window triggers a hard lockout with a clear message. Nobody can sit there running through a password list.
The database cannot be tricked into running attacks
The single most common way content sites get hacked is called SQL injection: an attacker types something clever into a form or a web address, and a sloppily built site treats that input as a command and runs it.
Slim Minima does not build database commands by gluing text together, which is what makes that attack possible. It uses a query layer that keeps your data and its commands strictly separate, and it validates the shape of incoming data before acting on it. The most common front-door for CMS hacks is simply not there to walk through.
This is worth stressing to a client, because it is exactly the class of bug that bites older platforms over and over.
The robot and AI doors use hashed keys, not passwords
Slim Minima can be driven by its REST API and connected to AI assistants through its built-in connector. Both require a key to get in.
Those keys are stored the same careful way passwords are: scrambled, never in plain text. So even the keys that let software talk to your site cannot be read straight out of the database and reused. A leaked backup does not hand someone a working set of keys.
Media goes straight to your own encrypted storage
Your images and files do not sit on any drive of ours. Slim Minima is a CMS, not a hosting company, so there is no shared storage in the middle. Files go to a storage account that belongs to you. By default that is Cloudinary, and the account is a specific instance you set up yourself, holding only your site's media. You hold the keys to it.
Here is the part worth understanding, because it is better than most people expect. When an editor uploads a file, the file does not pass through the site's own backend at all. It travels straight from the editor's browser to Cloudinary's servers over an encrypted HTTPS connection, so it cannot be read in transit.
The site's backend only issues a short-lived, signed permission slip first, then steps out of the way.
That design matters for two reasons:
- Your account's master secret stays on your own deployment. It is never sent to a browser, never embedded in a page, never exposed to a visitor. The browser only ever receives a one-time signature that is timestamped, so it cannot be hoarded and reused later.
- A random visitor cannot abuse your storage. Only a logged-in editor can request a signature, and only with one can anything be uploaded. A stranger cannot dump files into your account, run up your bill, or plant a malicious file, because they never get a valid permission slip in the first place.
Cloudinary then serves those files back to your visitors over HTTPS as well, so the encrypted connection holds on the way out, not just the way in.
And you are not locked into Cloudinary. This whole upload step is one self-contained piece of the code. If a client requires their media to live somewhere specific, on Amazon S3, on Cloudflare R2, on their own servers, or anywhere else, that single module can be swapped for a different storage provider without touching the rest of the system.
The security pattern stays the same: your deployment signs, the browser uploads directly over HTTPS, the secret never leaks.
The contact form resists spam and tampering
Contact forms are a classic weak point: bots flood them, and attackers try to rewire them to send mail somewhere else. Slim Minima's form is built against both.
- A hidden trap field catches bots. Real people never see it; automated spammers fill it in and get quietly turned away.
- There are hard limits on how many fields and how much text a single submission can carry, so nobody can stuff the form to overload it.
- The address that receives the form is locked with a signed token. A submission cannot point your form at a different inbox, because the real recipient is never taken from what the form posts.
Your site is yours alone, not a flat shared with strangers
This is the structural advantage, and it is the easiest one to sell.
Slim Minima is self-hosted and single-tenant. Each site runs on its own database, its own media account, and its own hosting. There is no big shared server where hundreds of sites sit side by side and one break-in can spill into the next.
"Nothing is hosted by us, and your site does not share space with anyone else's" is a genuine security statement, not marketing fluff. A breach somewhere else cannot reach a client whose site stands on its own.
What ultimately matters most: where you host it
Strip everything else away and a couple of things decide how secure a site really is. The biggest of them is your hosting environment. It is the single most exposed part of any site, because it is the front door the whole internet can knock on. The CMS can be built well, but it still runs somewhere, and that somewhere sets the real ceiling on your security.
The good news is you get to choose how much control you want, and Slim Minima runs the same either way.
The easy path: managed platforms that deploy from GitHub. Off-the-shelf, Slim Minima drops straight onto Git-connected hosts that build and deploy your code automatically every time you push. A few common ones: Vercel, Netlify, Cloudflare Pages, and Render. You connect your GitHub repository once, and from then on every change you push goes live on its own.
These platforms handle HTTPS, patching, and scaling for you, which for most sites is exactly what you want and is plenty secure.
The controlled path: your own server for a tighter environment. If a client needs everything inside infrastructure they own and govern, you can host Slim Minima on a server you control, on DigitalOcean, AWS, or similar. To keep the same easy push-to-deploy experience on your own machine, install a self-hosting tool like Coolify.
It gives you the convenience of the managed platforms while the server, the network, and the data all stay firmly under the client's roof.
Either way the point holds: the CMS does not lock you into one host. You match the hosting environment to how much control and isolation the client needs.
What about security updates?
A fair question, and Slim Minima handles it right inside the CMS.
When a security fix is released, your admin notices on its own. It checks for security releases and, when one exists, shows a notice in Settings, a badge in the sidebar, and a banner across the admin, with a plain-language summary of exactly what the fix addresses. Nobody has to go hunting; the CMS tells you.
Applying it is one button, and here is the part that keeps it safe. The Update button does not let the live site rewrite itself, which would be its own risk. It opens a pull request that changes only Slim Minima's security files and nothing else: not your blocks, not your theme, not your content.
You review the change and approve it, and the site redeploys the way it normally does. A security update physically cannot break a layout, because it never touches the layout.
And just as important, only security updates flow through this channel. Feature and design changes stay where they belong, in the developer's own hands on GitHub. So the CMS update path is narrow and predictable: security only, clearly described, applied with a click and a review.
Compare that to the usual mess, waiting on a dozen separate plugin vendors to each ship a fix, which is the exact situation that leaves most sites exposed. Here there are no plugins, one clean codebase, and a security channel built into the admin.
So the honest answer to a client: the CMS watches for security updates, tells you the moment one lands, shows you what it fixes, and applies it with a single reviewed step that cannot disturb your site's design.
The honest limits
Overselling security is how you lose a client's trust the first time something goes wrong. So here is the straight version of where the framework ends and good operating habits begin. None of these are flaws in the build. They are the normal edges of any self-hosted system.
- There is no two-factor login yet. Good teams can compensate with strong, unique passwords. Some larger clients will still ask for two-factor, so know that going in.
- Security rests on keeping the secret keys secret. The site's master key, the database address, and the API keys live in your hosting settings. Every protection above assumes those are not leaked. Keeping them safe, and not pasting them into chats or emails, is part of the deal.
- Staying current is ongoing. "Secure" is not a finish line. Keeping the underlying software updated is a routine maintenance task, the same as it is for any platform, including the ones your client is leaving.
Saying these out loud does not weaken your pitch. It makes the strong parts more believable, because the client can tell you are not hiding anything.
It is also worth knowing that none of these are permanent gaps. Slim Minima is a codebase you own, and in the vibe coding age any of these features can be added with a coding agent in a session or two. Two-factor authentication is the most common ask, and it is not included by default because it requires connecting an external authentication API, which is not a dependency every site needs.
But if a client wants it, pointing an agent like Claude Code at the codebase and describing what you need is a practical path. The foundation is already secure; these are extensions, not repairs.
How to answer the question in one breath
When a client asks "is it secure," you can now say, truthfully:
"Yes. Passwords are stored in a form nobody can reverse, logins use signed tokens that cannot be forged, and the database is built so the usual injection attacks do not work. Your site runs on its own database and hosting, not shared with anyone else, so no one else's breach can reach you. The few things that are on us as operators, like keeping the keys safe and the software updated, we handle as part of maintenance."
That is honest, specific, and it covers the four worries the client actually has.
Frequently asked questions
Does Slim Minima store passwords in the database? Not in a readable form. Passwords are run through bcrypt before saving, which produces a one-way hash. There is no way to reverse a bcrypt hash back to the original password, not even for the site owner.
What if the database is leaked or stolen? An attacker gets only bcrypt hashes, not passwords. They cannot log in with a hash. This is the same protection used by major platforms, and it is the reason you do not read about Slim Minima passwords leaking in breach databases.
Does Slim Minima need a security plugin? No. Security is built into the core: parameterized queries, signed session tokens, hashed credentials, bot-resistant contact forms. There is no plugin marketplace and no add-on required to get these protections.
Can someone inject malicious code through a contact form or URL? No. Slim Minima uses parameterized queries, which keep user input and database commands strictly separate. It also validates the shape of incoming data. SQL injection, the most common CMS attack, does not work against this design.
Can a breach on another site hosted by the same provider affect mine? Not through Slim Minima. Each site runs on its own database and its own media account. There is no shared data layer between sites. A breach at another tenant cannot reach yours.
The short checklist
Use this as your script, or as a one-page note you hand over.
- No third-party plugins. Everything is built in natively, so there is no stranger's add-on code to be exploited. The only external pieces, media storage and the database, are both yours and both swappable.
- Passwords are hashed with bcrypt and can never be read, even from a stolen database.
- Logins use signed session tokens that cannot be forged, with separate admin and editor roles. The login enforces a minimum password length and blocks after repeated wrong attempts: 10 per IP and 5 per account within any 10-minute window.
- The database uses parameterized queries and input validation, so SQL injection does not work.
- API and AI keys are stored hashed, never in plain text.
- Media uploads go straight from the browser to your own encrypted storage account over HTTPS; the storage secret never reaches the browser, and the provider can be swapped from Cloudinary to another if a client requires it.
- The contact form has a bot trap, size limits, and a locked recipient address.
- The site is single-tenant, on its own database and hosting, isolated from every other site.
- The honest extras to handle as an operator: keep the secret keys safe and keep the software updated.
Related reading
- Why WordPress does not work well in the AI age
- Why I built Slim Minima
- If the code is public, can someone hack it?
My verdict
Security is not a thing you bolt on at the end. In Slim Minima most of it is already in the foundation, which means your job is mostly to explain it clearly and stay honest about the edges. Do that and the question stops being something you dread and becomes something you answer with confidence.

