Dynamic Content for AI-Built Small Business Websites

Research Summary

When you’ve built a clean, fast small business site using AI-assisted tools like Astro and Tailwind, adding dynamic content (a blog, an events calendar) doesn’t have to mean abandoning that approach. The ecosystem has matured significantly, and there are now well-established patterns for layering dynamic content onto static-first sites. This document maps the landscape and makes recommendations grounded in your Astro/Tailwind starting point.


Part 1: Adding a Blog

There are three broad tiers of solution, ranging from zero-infrastructure to full CMS.

Tier 1: Markdown Files (Built-In to Astro)

Astro has native support for content collections - structured groups of Markdown files that live right in the project’s source code. You define a schema (title, date, tags, etc.), drop .md files into a folder, and Astro generates blog pages at build time. There’s no database, no external service, and no ongoing cost.

This is the simplest path and preserves everything about the AI-assisted build approach. Claude (or any AI coding assistant) can generate new blog post files, and they deploy alongside the rest of the site. The limitation is obvious: the person writing blog posts needs to be comfortable editing Markdown files and triggering a deploy, which rules out most non-technical clients managing their own content.

Tier 2: Git-Based CMS (Best for “Client Can Edit” Scenarios)

This is the sweet spot for small business sites where the client wants to write their own posts. A Git-based CMS provides a visual editing interface on top of the same Markdown files Astro already uses. Content stays in the Git repository, version-controlled and portable.

Keystatic is the standout option for Astro specifically. It’s open source, built by the team behind Keystone.js, and has first-class Astro integration. It stores content as Markdown/Markdoc and JSON files directly in the repo. In development, it serves an admin UI at /keystatic where content editors can create and edit posts through a proper form-based interface - no Markdown knowledge required. For production, it can sync with GitHub so the client edits via a web dashboard, changes commit to the repo, and the site rebuilds automatically. Multiple real-world Astro sites (including small business templates) are shipping with Keystatic today. Setup involves adding the integration, defining a content schema in TypeScript, and pointing it at the existing content folder.

TinaCMS is the other strong contender. It offers live visual editing - the client sees a preview of the actual page while they type. It’s Git-backed like Keystatic, with content stored as Markdown/MDX/JSON. TinaCMS has a cloud offering (Tina Cloud) that handles authentication and provides a hosted editing experience, which simplifies deployment for less technical setups. The trade-off is slightly more complexity in the initial configuration compared to Keystatic.

Decap CMS (formerly Netlify CMS) is a simpler, lighter option. It’s a single-page React app that provides a basic content editing UI on top of a Git repo. It works with any static site generator including Astro. The editing experience is less polished than Keystatic or TinaCMS, but it’s mature, open source, and requires minimal setup.

Darkmatter is a newer, Astro-specific tool that generates a CMS interface directly from Astro’s content collection schemas. It’s less established but worth watching if you want something that stays tightly coupled to Astro’s own content model.

Tier 3: Headless CMS (API-Driven)

For sites that need more sophisticated content workflows, a headless CMS stores content externally and delivers it to Astro via API. Astro’s Content Layer API makes this straightforward - you define a loader that fetches from the CMS, and from that point on, the code treats the content identically to local Markdown files.

Ghost is purpose-built for blogging and publishing. It has a beautiful editor, built-in SEO tools, newsletter/membership features, and a clean REST API. It’s available as a managed service (Ghost Pro) or self-hosted. Ghost is particularly relevant if the client’s site is primarily a publishing operation, but it’s heavier than what most small business sites need.

Sanity, Strapi, Contentful, and Storyblok are the major headless CMS platforms. They’re powerful, flexible, and well-supported, but they introduce more moving parts: a separate hosted service, API keys, content modelling, and typically a paid tier as the site grows. For a small business site with a blog and maybe a few custom content types, these are generally overkill. They make more sense when the content model is complex or when content needs to feed multiple channels.

Recommendation for a Typical Small Business Site

Keystatic + Astro content collections is the most natural fit. It preserves the static-first, AI-friendly build approach, gives the client a proper editing interface, keeps everything in Git, costs nothing, and doesn’t introduce external dependencies. The content files remain plain Markdown, so if Claude is generating or editing content, it’s working with simple text files. If the client later outgrows Keystatic, Astro’s Content Layer API means swapping in a headless CMS requires changing only the loader configuration, not the page templates.


Part 2: Adding an Events Calendar

Events calendars break into two categories: embed-based (the calendar lives elsewhere, you display it on the site) and integrated (the calendar data is part of the site itself).

Approach A: Google Calendar Embed

The simplest and most client-friendly option. The client manages events in Google Calendar (which they probably already know how to use), and the site displays them via an embedded iframe or a styled widget.

Native Google embed: Google provides an embed code directly from Calendar settings. It’s free, automatically updates when the client adds events, and requires zero maintenance. The downside is limited visual customisation - it looks like Google Calendar, not like the rest of the site.

Styled Google Calendar widgets: Services like Elfsight, SociableKIT, and EventsCalendar.co sit between Google Calendar and the site, pulling events via the Google Calendar API and rendering them in customisable, brandable layouts. These typically have a free tier for basic use and paid tiers for advanced features. They embed via a JavaScript snippet, so they work on any site including Astro-built static sites. The client still manages events in Google Calendar; the widget handles display.

Approach B: Dedicated Event Calendar Services

Event Calendar App, AddEvent, Tockify, and Loxi (from The Events Calendar team) are purpose-built embeddable calendar products. They offer their own dashboard for managing events, plus embeddable widgets with various layouts (month view, list view, agenda). Some include ticketing, RSVP collection, and email reminders. Pricing starts around $8-20/month. These are a good fit when the client needs more than a simple list of dates - for instance, event categories, registration, or recurring events.

Embeddable is a newer AI-driven option where you describe the calendar you want in natural language and it generates a custom widget. It analyses the site’s branding and attempts to match colours and style automatically. Interesting for quick setup, though the long-term reliability of AI-generated widgets is less proven.

Approach C: CMS-Integrated Events

If the site is already using a Git-based CMS like Keystatic for the blog, events can be modelled as another content collection. Define an “events” schema (title, date, time, location, description), and the client manages events through the same admin interface they use for blog posts. Astro renders an events page at build time.

This approach gives full design control and keeps everything in one system. The trade-off is that updates require a site rebuild (typically a minute or two on platforms like Vercel or Netlify), so last-minute event changes aren’t instant. For most small businesses posting events days or weeks in advance, this is fine. For same-day updates, a rebuild-on-save webhook from the CMS to the hosting platform handles it automatically.

A hybrid approach also works well: manage events in the CMS for the main listing, but also embed a Google Calendar for real-time “what’s happening this week” display.

Recommendation for a Typical Small Business Site

For the quickest win: A styled Google Calendar widget (Elfsight or SociableKIT) lets the client manage events in a tool they already know, and the display updates in real time with no rebuilds. Embed it with a JavaScript snippet on the events page.

For full design control: Add an events content collection in Keystatic alongside the blog. The client manages both from the same interface, and the events page matches the site’s design perfectly. Set up automatic rebuilds on content change.

For the best of both: Use the CMS-integrated approach as the primary display, and offer a “Subscribe to our calendar” link that points to a public Google Calendar for clients who want it in their own calendar app.


Part 3: Keeping the AI-Assisted Build Approach

The good news: none of these options require abandoning the clean, fast, AI-coded approach.

Astro content collections remain the backbone. Whether content comes from local Markdown, Keystatic, or a headless CMS, Astro’s templating and build process stay the same. Claude can generate page templates, components, and styling just as easily with a CMS-backed content collection as with static files.

Git-based CMS tools are particularly AI-friendly. Because Keystatic, TinaCMS, and Decap all store content as files in the repo, an AI assistant can read, generate, and modify content directly. There’s no API to navigate, no authentication to manage for content creation - it’s just files.

The static output stays static. Adding a CMS layer doesn’t mean the site becomes a server-rendered application. Astro still builds to static HTML at deploy time. The CMS is only active during editing; visitors get the same fast, CDN-served static pages.

Embedded widgets (calendars, forms) are isolated. A JavaScript embed from Elfsight or Google Calendar loads in its own iframe or script context. It doesn’t interfere with the site’s build process, styling approach, or performance profile beyond its own footprint.


Quick-Reference Decision Table

NeedRecommended ToolClient Self-Service?CostComplexity
Blog (dev-managed)Astro Markdown filesNoFreeMinimal
Blog (client-managed)Keystatic + AstroYesFreeLow
Blog (visual editing)TinaCMS + AstroYesFree/PaidMedium
Blog (publishing-focused)Ghost (headless)Yes$9+/mo or self-hostMedium
Events (simplest)Google Calendar embedYes (via Google)FreeMinimal
Events (branded)Elfsight / SociableKIT widgetYes (via Google/dashboard)Free/PaidLow
Events (integrated)Keystatic events collectionYes (via CMS)FreeLow-Medium
Events (ticketing/RSVP)Event Calendar App / AddEventYes (via dashboard)$8-20/moLow

Research compiled March 2026. All tools and pricing referenced were current at time of writing.