Back to templates

Template details

Astro v7 Monorepo Template

Production-ready Astro v7 monorepo template with Starter and Blog apps, Tailwind v4, Svelte 5, i18n (EN/DE) and Cloudflare deployment.

About this template

Astro v7 Monorepo Template is a production-ready pnpm-workspaces starter that ships two independently deployable Astro v7 apps — a landing-page Starter and an MDX Blog — sharing one design system from a shared/ package.

What is the Astro v7 Monorepo Template?

The template is a pnpm-workspaces monorepo containing the apps/starter landing app and the apps/blog content app, both built on Astro 7.4.2 and sharing a shared/ library of design tokens, layouts, SEO helpers and Astro config. It takes Markdown/MDX posts and page content as input, outputs static Astro sites with generated sitemap, robots, llms.txt and RSS, and deploys to Cloudflare Workers via wrangler. It is maintained by casoon and published under the MIT license.

Key Features

  • Astro 7.4.2 stack — Vite 8 with Rolldown, the Rust .astro compiler and Sätteri markdown (GFM + heading IDs built in, no remark/rehype plugins needed).
  • Tailwind CSS 4.3.3 + Svelte 5 — CSS-first Tailwind config with OKLCH colors, and Svelte 5 Runes ($state, $derived) for reactive islands.
  • i18n (EN/DE) — Astro i18n routing with a language switcher; the blog keeps one folder per locale (src/content/blog/en/, src/content/blog/de/) and matching file names map to the same post.
  • OG images and RUM — build-time Open Graph image generation (Satori + resvg) per page and locale, plus @casoon/astro-webvitals reporting LCP, CLS, INP, FCP and TTFB through a Zod-validated endpoint (10% production sample).
  • CSP and security — security.csp with SHA-256 hashes or same-origin scripts, plus @casoon/nosecrets pre-commit secret scanning and optional security.txt via PUBLIC_SECURITY_CONTACT.
  • Build audits — @casoon/astro-post-audit (v0.9.1) checks SEO, links and WCAG signals at build time; fallow reports dead code, complexity and duplication.
  • Testing — Playwright E2E with axe-core a11y scanning for both apps; Biome handles linting and formatting; unit tests run on node --test.
  • Site files and JSON-LD — @casoon/astro-site-files generates robots.txt, sitemap.xml, llms.txt, humans.txt and (optionally) security.txt; @casoon/astro-structured-data emits typed WebPage, WebSite, Organization and Article JSON-LD.

Who is it for?

  • Developers running a site plus a blog — build both from one repository with shared components while deploying each app separately to Cloudflare Workers.
  • Teams shipping localized marketing pages — use the Starter's EN/DE i18n, contact form via Astro Actions and Zod validation, and per-locale OG images.
  • Content-focused publishers — use the Blog app's MDX support, sticky table of contents, reading progress bar and enriched RSS feed with reading time and series metadata.

Use cases

  • Campaign landing pages: add a folder under apps/ that imports from shared/ and reuse the design tokens, SEO component and metadata pipeline.
  • Documentation or shop front-ends: fork the Blog or Starter as a page- or content-focused base; both stay independently deployable.
  • Cloudflare Workers projects: pnpm deploy:starter, pnpm deploy:blog or pnpm deploy build and run wrangler deploy; swap the adapter for Node, Vercel or Netlify with three config changes.

How does it work?

Run pnpm install, then pnpm dev for the Starter (port 5014) or pnpm dev:blog for the Blog (port 4322). pnpm build builds all apps and generates site files; pnpm test:e2e runs Playwright tests (starter under wrangler dev, blog on a static server).

FAQ

What are the Node and pnpm requirements?

The template requires Node.js 22.12.0 or newer and pnpm 11.0.0 or newer. TypeScript is pinned to 6.0.3 because @astrojs/check restricts its peer range to 5.x or 6.x and TypeScript 7's native compiler lacks the programmatic API it relies on.

Is the contact form functional out of the box?

No. The Starter's contact form ships as a demo: deliverContactMessage() in src/actions/contact.ts is a hook for your mail provider, and until it returns true the page tells visitors nothing was sent. A honeypot field is included, but rate limiting or Turnstile should be added before real delivery.

Which platforms besides Cloudflare are supported?

Node.js, Vercel and Netlify are supported with three changes per app: swap the adapter, override image.service to Sharp, and delete wrangler.toml. The default Web Vitals endpoint has no Cloudflare runtime import, so it works unchanged on those platforms.

What changed from the v6 template?

The v7 template moves to Vite 8 with Rolldown, a Rust .astro compiler that requires every HTML tag to be closed, compressHTML: 'jsx', Sätteri replacing remark/rehype, and stable advanced routing using the reserved src/fetch.ts entry point.

Pricing

The template is released under the MIT license and is free to use.

Screenshot of Astro v7 Monorepo Template