Setting up a 10-page marketing site
Count the tools. You reach for Next.js or Astro. You run npm init. There's a bundler config. PostCSS for Tailwind. A Netlify account. A GitHub repository. Environment variables for the CMS token. A build hook URL from Netlify, pasted into the CMS webhook settings so content publishes trigger a rebuild. Maybe a CI configuration file.
For a 10-page marketing site.
The honest question: does a 10-page marketing site need any of this? For most content-focused sites, the answer is no.
How we got here
The JAMstack movement was right about the fundamentals. Pre-generated static HTML served from a CDN is faster, cheaper, and more secure than server-side rendering at request time. Netlify and Vercel made this genuinely accessible. The developer tooling that emerged around it was designed well.
The problem is that the tooling was designed for applications — large JavaScript codebases with complex component trees, client-side routing, and sophisticated build requirements. It's good tooling for that use case. It became the default for everything, including content sites that have no more complexity than a Markdown file and a CSS stylesheet.
When the tool doesn't fit the problem, you inherit the cost of the tool without the benefit.
What the build pipeline actually costs
Setup time. Getting a new project from blank to deployed with a modern build pipeline takes a few hours if you know the stack, longer if you're making decisions. Framework version, bundler config, PostCSS, Tailwind setup, environment variable management, deploy configuration. That's before you've written a single line of page-specific code.
Maintenance surface. Every dependency is something that can break. Node version compatibility, framework major version upgrades, bundler updates, plugin compatibility matrices. A project set up in 2022 may require non-trivial work to update in 2026. For a client site, that maintenance either falls on your agency or accumulates as technical debt.
Knowledge transfer. When someone takes over the project — a new developer, an agency handoff, a client who hired a different maintainer — the build pipeline is the first thing they have to understand. For a content site, this is overhead with no corresponding upside.
Build failures. Build-time failures are a category of problem that doesn't exist if there's no build. A content editor publishes a page update. The build fails because a dependency was updated. The content doesn't go live. Now someone has to debug a build system to publish a headline change.
The cognitive tax. Even when everything is working, the build pipeline occupies mental space. "Did the last deploy succeed?" is a question that content sites shouldn't need to ask.
What a content site actually needs
Strip it back. What does a content site need that a build pipeline provides?
- HTML generated from content and templates
- CSS applied to those templates
- JavaScript for any interactive elements
- Image optimization
- A CDN to serve the output
- A mechanism to rebuild when content changes
A build pipeline is one way to get all of these. It is not the only way — and for a content site, it is often the most complex way.
SleekCMS's answer
The SleekCMS site builder generates static HTML from EJS templates and your content models. The output is standard static HTML, CSS, and JS — compatible with any hosting provider.
What you don't configure:
- No
package.jsonor dependency management - No bundler configuration
- No PostCSS config
- No CI/CD pipeline
- No build hooks or webhook plumbing
- No deploy configuration
What's handled automatically:
Tailwind CSS. Create /css/tailwind.css in your workspace. It compiles automatically on every save. No tailwind.config.js, no PostCSS, no @tailwind directives to remember.
Image optimization. Every uploaded image gets a transform URL. Append ?w=800&fmt=webp&q=85 and you get a resized, converted, optimised image. No separate image CDN, no <Image> component, no next.config.js entry.
Forms. Add data-sleekcms="contact" to any form element. Submissions are captured, stored, and trigger email notifications. No backend, no Formspree account, no serverless function to maintain.
Preview. Page and full-site preview run in the cloud. No local dev server, no port to remember.
Deploy. To SleekCMS hosting, Netlify, Vercel, or download as a ZIP. No repository required.
Local workflow for developers
The developer who will immediately ask: "but what about local development?"
The cms-cli provides local editing — real files, your editor, AI assistance — without a local build tooling stack:
npx @sleekcms/cli --token YOUR_AUTH_TOKEN
File saved in VS Code → watcher → SleekCMS API → rebuilt in the cloud → preview updated. You get the local development experience without running a local build.
This is the key distinction from a traditional pipeline: the sync is to the SleekCMS API. The build happens on their infrastructure. Your machine doesn't need Node, Vite, or a dev server running.
When you do need a build pipeline
This argument is not that build pipelines are never the right choice. They are, in specific contexts.
You probably do need a build pipeline if:
- You're building a React or Vue SPA where client-side interactivity is the core product — not the delivery mechanism for content, but the product itself
- You have a large team with PR-based review workflows where per-PR preview environments are valuable
- You need complex custom build steps: code splitting, service workers, advanced asset optimization, custom Webpack plugins
- You're integrating with a deployment platform that has a required CI/CD workflow
These are real cases. They're not the 80% of content sites that have a build pipeline by default because that's what developers reach for.
The build pipeline is a great tool for the problems it was designed to solve. A 10-page marketing site is usually not one of those problems. If the site is going to be updated by a content editor and serve static pages to visitors, the overhead of a build pipeline is a cost with no corresponding benefit.
SleekCMS's site builder is the alternative: the same structured content, the same static output, without the pipeline between them.