<p align="center">
<strong>seite</strong>
</p>
<p align="center">
A static site generator where Claude Code is the interface.
</p>
<p align="center">
<a href="https://github.com/seite-sh/seite/actions/workflows/rust.yml"><img src="https://github.com/seite-sh/seite/actions/workflows/rust.yml/badge.svg" alt="CI"></a>
<a href="https://codecov.io/gh/seite-sh/seite"><img src="https://codecov.io/gh/seite-sh/seite/branch/main/graph/badge.svg" alt="Coverage"></a>
<a href="https://crates.io/crates/seite"><img src="https://img.shields.io/crates/v/seite.svg" alt="Crates.io"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT"></a>
</p>
---
<p align="center">
<img src="https://seite.sh/static/demo.svg" alt="seite demo" width="700">
</p>
You already have Claude Code. seite gives it something to work on.
```bash
seite agent "write a post about our v1 launch — here are the notes: ..."
seite agent "redesign the homepage hero, we just pivoted to B2B"
seite agent "create changelog entries for these release notes: ..."
seite agent # interactive session
```
The agent reads your config, your templates, and your existing content before writing anything. Output lands in the right directory with the right frontmatter. You review a diff and ship it.
No new subscription. No new UI to learn. No new commands. Just the Claude Code subscription you already have — now it can manage your whole website.
```bash
cd mysite && seite serve
```
## Why seite
Most static site generators produce HTML and stop there. seite builds for **three audiences at once**:
- **Browsers** get pages with full SEO metadata, Open Graph, Twitter Cards, and JSON-LD structured data
- **LLMs** get `llms.txt`, `llms-full.txt`, and a `.md` copy of every page for direct consumption
- **AI tools** get a built-in MCP server that exposes your entire site as structured resources
All from Markdown + YAML frontmatter. No JavaScript runtime. No build dependencies. One binary does everything. 331 tests, 139 unit and 192 integration.
## AI integration
### Agent
`seite agent` spawns Claude Code with full site context — config, content inventory, templates, and available commands. No API keys, no setup. Uses your existing Claude Code subscription.
`seite init` generates `.claude/CLAUDE.md` with your site's full schema so the agent is oriented before it writes a single character. Output lands in the right directory, with the right frontmatter, following your conventions. You review a diff and ship it.
```bash
seite agent "write a post about our v1.2 release — here are the notes: ..."
seite agent "rewrite the homepage hero, our positioning shifted to B2B"
seite agent "generate docs stubs for each CLI command"
seite agent # interactive session
```
### MCP server
`seite mcp` runs a Model Context Protocol server over stdio. Claude Code auto-starts it via `.claude/settings.json`, generated by `seite init`. Any MCP-compatible AI tool can use it.
**Resources** — `seite://docs`, `seite://config`, `seite://content`, `seite://themes`, `seite://trust`
**Tools** — `seite_build`, `seite_create_content`, `seite_search`, `seite_apply_theme`, `seite_lookup_docs`
This means your AI tool doesn't just have read access to your site — it has a structured interface to build, search, and modify it.
### LLM discovery
Every build generates `llms.txt` (summary) and `llms-full.txt` (complete markdown) for LLM indexing, plus a `.md` copy of every page. Multilingual sites get per-language versions. Traditional SEO and GEO handled in one pipeline, automatically.
## Features
- **6 bundled themes** — default, minimal, dark, docs, brutalist, bento — or generate a custom one with `seite theme create "coral brutalist with lime accents"`
- **6 collection presets** — posts, docs, pages, changelog, roadmap, and trust center
- **Multi-language** — filename-based i18n with per-language URLs, RSS feeds, sitemaps, search indexes, and hreflang tags
- **Image pipeline** — auto-resize, WebP conversion, srcset/`<picture>` elements, lazy loading
- **Deploy anywhere** — GitHub Pages, Cloudflare Pages, Netlify with guided setup, pre-flight checks, and `--dry-run`
- **Analytics** — Google Analytics, GTM, Plausible, Fathom, Umami with optional cookie consent banner
- **Shortcodes** — `youtube`, `vimeo`, `gist`, `callout`, `figure` built-in, plus user-defined templates
- **Multi-site workspaces** — manage multiple sites from one directory with unified dev server
- **Self-update** — `seite self-update` fetches the latest release with SHA256 checksum verification
## Install
**macOS / Linux:**
```bash
**Windows (PowerShell):**
```powershell
**From source (requires Rust):**
```bash
cargo install seite
```
**Pin a specific version:**
```bash
## Quickstart
```bash
seite init mysite --title "My Site" --collections posts,docs,pages
cd mysite
seite serve
```
Open `http://localhost:3000`. Edit content in `content/`, templates in `templates/`. Live reload on every change.
```bash
# Create content
seite new post "Hello World" --tags intro,rust
seite new doc "Getting Started"
seite new changelog "v1.0.0" --tags new,improvement
# Deploy
seite deploy # commit, push, build, deploy
seite deploy --dry-run # preview what would happen
seite deploy --setup # guided first-time setup
```
## Build output
`seite build` runs a 13-step pipeline and produces:
```
dist/
├── index.html
├── posts/
│ ├── hello-world.html # HTML for browsers
│ └── hello-world.md # Markdown for LLMs
├── docs/
│ └── getting-started.html
├── feed.xml
├── sitemap.xml
├── search-index.json
├── robots.txt
├── llms.txt
├── llms-full.txt
├── 404.html
└── static/
```
Every HTML page includes canonical URLs, Open Graph tags, Twitter Cards, JSON-LD structured data, and a link to its markdown alternate.
## Collections
| **posts** | ✓ | ✓ | — | Blog posts, articles |
| **docs** | — | — | ✓ | Documentation with sidebar navigation |
| **pages** | — | — | — | Standalone pages (About, Contact) |
| **changelog** | ✓ | ✓ | — | Release notes with colored tag badges |
| **roadmap** | — | — | — | Public roadmap with status tracking |
| **trust** | — | — | ✓ | Compliance hub (SOC 2, ISO 27001, GDPR) |
```bash
seite collection add changelog
seite new changelog "v2.0" --tags new,breaking
```
## Themes
Six themes ship with the binary — no downloads, no CDNs:
| **default** | Clean centered column, system fonts, blue links |
| **minimal** | Georgia serif, literary feel, generous whitespace |
| **dark** | True black `#0a0a0a`, violet accents, visible focus rings |
| **docs** | Fixed sidebar with auto-scrolling nav, GitHub-style |
| **brutalist** | Cream background, thick black borders, hard shadows, yellow accents |
| **bento** | CSS grid cards, rounded corners, mixed sizes, soft shadows |
```bash
seite theme list
seite theme apply dark
seite theme create "neon cyberpunk on black"
seite theme install https://example.com/t.tera
seite theme export my-theme
```
## Multi-language
Filename-based translations. Single-language sites need no config.
```
content/posts/
├── hello-world.md → /posts/hello-world
├── hello-world.es.md → /es/posts/hello-world
└── hello-world.fr.md → /fr/posts/hello-world
```
```toml
[languages.es]
title = "Mi Sitio"
[languages.fr]
title = "Mon Site"
```
## Configuration
```toml
# seite.toml — minimal
[site]
title = "My Site"
base_url = "https://example.com"
[[collections]]
name = "posts"
```
<details>
<summary><strong>Full reference</strong></summary>
```toml
[site]
title = "My Site"
description = "A site built with seite"
base_url = "https://example.com"
language = "en"
author = "Your Name"
[[collections]]
name = "posts"
# name = "docs" | "pages" | "changelog" | "roadmap" | "trust"
# paginate = 10
[build]
output_dir = "dist"
data_dir = "data"
minify = true
fingerprint = true
[deploy]
target = "github-pages" # or "cloudflare" or "netlify"
auto_commit = true
[images]
widths = [480, 800, 1200]
quality = 80
webp = true
lazy_loading = true
[analytics]
provider = "plausible" # or "google", "gtm", "fathom", "umami"
id = "example.com"
cookie_consent = false
[languages.es]
title = "Mi Sitio"
[trust]
company = "Acme Corp"
frameworks = ["soc2", "iso27001"]
```
</details>
## Data files
Drop YAML, JSON, or TOML in `data/` and access in any template:
```yaml
# data/nav.yaml
- title: Blog
url: /posts
- title: Docs
url: /docs
```
Available as `{{ data.nav }}` in all templates.
## Workspaces
```bash
seite workspace init my-workspace
seite workspace add blog --collections posts,pages
seite workspace add docs --collections docs
seite build --site blog
seite serve
seite deploy
```
## Deployment
```bash
seite deploy
seite deploy --dry-run
seite deploy --setup
seite deploy --domain example.com
```
```toml
[deploy]
target = "cloudflare" # or "github-pages" or "netlify"
```
`seite init` auto-generates the CI workflow for your chosen target.
## Documentation
Full docs at **[seite.sh/docs](https://seite.sh/docs/getting-started)**
- [Getting Started](https://seite.sh/docs/getting-started)
- [Configuration](https://seite.sh/docs/configuration)
- [Collections](https://seite.sh/docs/collections)
- [Templates](https://seite.sh/docs/templates)
- [Shortcodes](https://seite.sh/docs/shortcodes)
- [Multi-language](https://seite.sh/docs/i18n)
- [Deployment](https://seite.sh/docs/deployment)
- [CLI Reference](https://seite.sh/docs/cli-reference)
- [Trust Center](https://seite.sh/docs/trust-center)
## Contributing
seite is early and issues, PRs, and feedback are genuinely welcome. Especially useful:
- **Bug reports** with a repro case (even a minimal `seite.toml` + content file)
- **New theme ideas** — open an issue first to align on direction before building
- **Docs improvements** — if something confused you, it'll confuse others
- **Real-world usage** — if you build something with seite, share it
```bash
git clone https://github.com/seite-sh/seite
cargo build
cargo test # 331 tests (139 unit + 192 integration)
cargo clippy # must be zero warnings
cargo fmt --all
```
Open an issue before starting a large PR — saves everyone time.
## License
[MIT](LICENSE)