Landing pages, zero fuss.
One CLI command scaffolds a full Astro site with a dark theme, Tailwind CSS v4, and a GitHub Pages workflow — all wired up and ready to deploy.
Scaffold
npx @mcptoolshop/site-theme init
Edit
site/src/site-config.ts
Deploy
git push # GitHub Actions handles the rest
What you get
Everything a project landing page needs, pre-wired.
Config-driven
All page content lives in site-config.ts. No JSX, no HTML — just a typed SiteConfig object.
Dark by default
Semantic design tokens (bg-surface, text-heading, border-edge) ready to use. Override any token to reskin the whole theme.
GitHub Pages ready
The init CLI writes .github/workflows/pages.yml automatically. Push and set the source — done.
Six composable components
Hero, FeatureGrid, DataTable, CodeCardGrid, ApiList, and Section — mix and match in any order.
Zero surprise setup
The CSS import, @source path, and base path are all pre-wired by the CLI. No manual config hunting.
Fully customizable
Every color, radius, and spacing value is a CSS custom property. Override in @theme — no config file needed.
Quick start
From zero to deployed in minutes.
Scaffold
npx @mcptoolshop/site-theme init
cd site && npm install
npm run dev Edit your content
// site/src/site-config.ts
export const config: SiteConfig = {
title: '@mcptoolshop/my-tool',
description: 'What my tool does.',
logoBadge: 'MT',
brandName: 'my-tool',
hero: { /* ... */ },
sections: [ /* ... */ ],
}; Override design tokens
/* site/src/styles/global.css */
@import "tailwindcss";
@import "@mcptoolshop/site-theme/styles/theme.css";
@source "../../node_modules/@mcptoolshop/site-theme";
@theme {
--color-accent: #60a5fa; /* blue accent */
--color-surface: #0a0a1a; /* dark navy */
--color-action: #60a5fa;
} Deploy to GitHub Pages
# 1. Push to GitHub
git push
# 2. Repo → Settings → Pages → Source → "GitHub Actions"
# 3. Push any change to site/ to trigger a deploy Components
Import individually from the package.
BaseLayout(title, description, logoBadge, brandName, nav, repoUrl, npmUrl?, footerText)
Full page shell with sticky header (logo badge, nav links, GitHub/npm buttons) and footer. Wrap all your sections in this.
Hero(badge, headline, headlineAccent, description, primaryCta, secondaryCta, previews?)
Gradient hero with status badge, large headline, CTA buttons, and optional code preview cards.
Section(id, title, subtitle?)
Anchor section with heading and optional subtitle. Wraps any content as a slot.
FeatureGrid(features: { title, desc }[])
3-column responsive card grid. Each card has a bold title and a short description.
DataTable(columns: string[], rows: string[][])
Grid-based bordered table. First cell in each row is styled as a header.
CodeCardGrid(cards: { title, code }[])
2-column grid of dark code block cards. Ideal for install/usage examples.
ApiList(apis: { signature, description }[])
Full-width stacked API reference cards. Signature in monospace, description below.
Design tokens
Override any token in global.css via @theme.