A CMS That Lives in Git

Smashing Magazine's move to a Jamstack architecture in 2019 brought a 6× improvement in page speed, but it came at a cost: the team lost the editorial tooling that WordPress provided. Writing meant working in Markdown files or exporting from third-party collaborative editors like Dropbox Paper. Now, with TinaCMS integrated into the stack, the team gets the performance benefits of static files alongside a proper editing interface.

TinaCMS is an open-source, Git-based CMS that saves content as Markdown, MDX, YML, or JSON files. It wraps those files in a GraphQL content API, and since everything connects to a GitHub repository, the team owns and controls every hard file. That architecture differs meaningfully from a database-backed CMS: content lives in a repo the team can see, search, and version, rather than in a SQL database on some server.

Two Writing Paths, Now One

Before TinaCMS, Smashing Magazine followed two writing routes depending on author preference. Some contributors wrote Markdown directly in a code editor and pushed to GitHub. Others preferred collaborative tools like Dropbox Paper or Google Docs, which required exporting and cleaning up the content before it could be committed to the repo. Either way, an editor reviewed the final draft, formatting was applied for pull quotes and related articles, and a pull request triggered a rebuild and deploy on merge.

The new process collapses those steps. Authors can write directly in the TinaCMS editor, preview their work, and publish without leaving the interface. But the tool doesn't force anyone to change habits—team members who prefer writing Markdown in a code editor on a local Git branch can still do so, and the article appears in TinaCMS once pushed to GitHub.

What's notable isn't the feature set itself—these are capabilities WordPress had years ago—but that they now exist within a Jamstack architecture:

  • Readers get faster page loads.
  • The team owns hard content files in a repo.
  • Editors and authors get a CMS that supports long-form writing, editing, and collaboration.

The Editing Interface

The editor environment resembles a classic CMS workflow. Most full-featured CMSs support custom fields, and Tina is no exception. The Smashing team maps content into structured fields that are exposed through the content API and can be queried to populate the front end. This enables true visual editing in a static-site context, producing hard Markdown files that get committed directly to the repository with each save.

It looks like (classic) WordPress, smells like (classic) WordPress, but produces hard files that get committed directly to our repo.

A screenshot of the Tina content editor
It’s your typical content editor, complete with a clean interface. (Large preview)

Branch Workflows and Previews

Because TinaCMS integrates fully with GitHub, the team can switch branches directly from the editing UI. A preview button connects to branch deployments from services like Netlify or Vercel. That means an article under review can be shared with authors for a final pass without ever reaching production readers.

A screenshot of the Tina brunch selector
Clicking the “master” button opens a modal with a branch selector pulled from our GitHub repository. (Large preview)

The team can also choose to work locally rather than directly in production. Running a local version of the site provides a sandboxed environment that prevents accidental publishes. From there, the workflow follows a clear path: create a branch, write to it, get a live preview, merge the branch, and the site rebuilds and deploys automatically. TinaCMS also protects the repo's main branch by default, reducing the risk of accidental writes to production.

Overview screen with site URLs for local and production
Overview screen with site URLs for local and production. (Large preview)

A screenshot of the modal displaying when changes are made to a protected branch and promoting to switch branches
Modal displays when changes are made to a protected branch, promoting to switch branches. (Large preview)

Media Handling

Media management is often a friction point in Jamstack setups. TinaCMS can commit media assets directly to a repository, but a site of Smashing Magazine's scale would quickly make that repo unmanageable. Instead, the team uses Tina's integration with DigitalOcean Spaces. Uploaded images land in the Spaces account, and after the site rebuilds, the images are optimized and sent to Cloudinary, which converts them into multiple formats and sizes and serves the best version based on device and network conditions.

A screenshot of the Tina media manager layout with articles folders
We create a folder that contains the content and assets for each article, so everything is together. (Large preview)

A screenshot of the Tina Media Manager with the uploaded images
The source file is formatted as a PNG, but it is sent to and transformed by Cloudinary to serve an efficient version of it. (Large preview)

The Editorial Workflow Layer

The features described here are part of TinaCMS's "Editor Workflow," introduced on July 10. For a fresh release of this scope, the workflow runs smoothly through writing, review, approval, and post-publish updates. The Editor Workflow is currently implemented as a plugin for Business plans and up, rather than baked into the core product—an approach that keeps the CMS lightweight and lets teams extend it with specific functionality as needed.

What's Next

Smashing Magazine is still adapting, but the integration already fits the existing team culture. TinaCMS is under active development, with a self-hosted version now available and more items on the roadmap in the coming months. For a team that writes long-form content and values owning its files, the setup reconciles two priorities that often conflict: the speed and control of static assets with the editorial experience of a proper CMS.