ST site-theme
Open source

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.

Token
Default
Used for
--color-surface
#09090b
Page background
--color-surface-raised
#18181b
Elevated elements, code blocks
--color-edge
#27272a
Primary borders
--color-heading
#fafafa
Headings, primary text
--color-body
#e4e4e7
Body / secondary text
--color-dim
#a1a1aa
Labels, captions
--color-accent
#34d399
Status indicator dot
--color-action
#fafafa
Primary button background
--color-action-text
#09090b
Primary button text