Ship a complete website on Astro 7, not a starter you still have to finish.
Strata is an Astro 7 template with React 19, Motion, Tailwind CSS 4, Better Auth, Drizzle + libSQL, MDX docs and blog, SEO, a strict CSP and tests. Deploys to Vercel, Cloudflare, Netlify or Node.
git clone https://github.com/empeeryal/strata-stack.git my-site
cd my-site
pnpm install
cp .env.example .env
pnpm db:migrate
pnpm devOne codebase. Four deploy targets.
Everything a site needs, already wired together
This site is built from the template you are reading about. Every feature below is running on the page in front of you.
Astro 7.3 at the core
Static-first pages with islands where you need them, Vite 8 and the Rust compiler for fast builds and stricter HTML.
React 19 + Motion
Interactive islands written in React 19 and animated with Motion, hydrated only where they are used.
Tailwind CSS 4 and dark mode
OKLCH design tokens, a flash-free theme switch that respects the OS, and self-hosted variable fonts.
Better Auth
Email and password, GitHub, Google and magic-link sign-in with protected routes and sessions stored in your database.
Drizzle + libSQL
A type-safe schema with migrations. A file database in development, Turso over HTTP in production, on every platform.
MDX docs and blog
Content collections with tabs, callouts, steps, a table of contents, tags, RSS and reading time out of the box.
SEO built in
Canonical URLs, generated Open Graph images, JSON-LD, sitemap, robots.txt, llms.txt and Pagefind search.
Secure by default
A hash-based Content Security Policy, hardened response headers, CSRF origin checks and rate limiting.
Tested and automated
Vitest, Playwright with axe accessibility checks, Lighthouse budgets and a CI matrix that builds every target.
Pick a platform at build time
A single astro.config.ts selects the adapter from the DEPLOY_TARGET environment variable, or detects the platform automatically. Static pages, server-rendered auth routes, image optimisation and security headers work the same way everywhere.
- Static-first output with prerender = false only where you need a server.
- One database client that resolves to the right driver on Node, Workers and edge runtimes.
- CI builds all four targets on every pull request so nothing drifts.
DEPLOY_TARGET=vercel pnpm build- Build output
- .vercel/output/
- Runtime
- Vercel Functions · Node 24
- Auto-detected from VERCEL=1, nothing to configure
- CSP and security headers emitted as static headers
- Vercel Image Optimization for <Image>
Current, locked and tested
Versions below are the exact releases installed from this repository's pnpm-lock.yaml, read at build time, so the page never lies about what it runs on. Dependabot keeps them fresh and the CI matrix proves every upgrade still builds on all targets.
| Package | npm | Installed |
|---|---|---|
| Astro | astro | 7.3.3 |
| React | react | 19.3.0 |
| Motion | motion | 13.4.0 |
| Tailwind CSS | tailwindcss | |
| Better Auth | better-auth | 1.7.5 |
| Drizzle ORM | drizzle-orm | 0.45.2 |
| libSQL client | @libsql/client | 0.18.0 |
| MDX | @astrojs/mdx |
From clone to production in three steps
- 1
Clone and rename
Every name, URL and link lives in src/site.config.ts. Update it once and the header, footer, SEO tags and manifest follow.
- 2
Write content
Add MDX to src/content for docs and blog posts. Schemas are validated at build time and the sidebar, TOC and RSS feed update themselves.
- 3
Deploy anywhere
Set DEPLOY_TARGET (or let the platform be detected) and push. Vercel, Cloudflare, Netlify and Node builds share one config.
Start with the docs, or read how it was built
The documentation covers every part of the template. The blog explains the decisions behind it.