Your next site starts here.
Design tokens, accessible components, SEO, and i18n configured from the first commit. Velocity ships what other starters leave as homework.
Shipped to production weekly.
Everything you need.
Nothing you don't.
We stripped away the bloat and kept the primitives that actually speed up development for agencies and freelancers.
Design Tokens & Dark Mode
Complete design system using Tailwind v4's CSS-first configuration with built-in dark mode. Semantic color tokens, system preference detection, and localStorage persistence.
1/* src/styles/themes/default.css — swap this file to re-theme */2:root {3 /* Semantic Tokens - Light Mode */4 --background: var(--gray-0);5 --foreground: var(--gray-900);6 --border: var(--gray-200);7 --primary: var(--gray-900);8 --primary-foreground: var(--gray-0);9 --accent: var(--brand-500);10 --card: var(--gray-0);11 --ring: var(--gray-900);12}1314/* Dark Mode */15.dark {16 --background: var(--gray-950);17 --foreground: var(--gray-50);18 --border: var(--gray-800);19 --primary: var(--gray-0);20 --primary-foreground: var(--gray-900);21}
Automated SEO Handling
Strictly typed metadata injection for every page with automatic OG image generation. Includes sitemap, robots.txt, and JSON-LD structured data.
1---2// src/components/seo/SEO.astro3import siteConfig from '@/config/site.config';45interface Props {6 title?: string;7 description?: string;8 image?: string;9}1011const { title, description, image } = Astro.props;12const canonicalURL = new URL(Astro.url.pathname, Astro.site);1314// Auto-generate OG image if none provided15const ogImage = image || `/og/${Astro.url.pathname}.png`;16---1718<title>{title}</title>19<meta name="description" content={description} />20<link rel="canonical" href={canonicalURL.toString()} />21<meta property="og:title" content={title} />22<meta property="og:image" content={ogImage} />
Zero JS by Default
Astro's island architecture ensures your pages ship 0kb of JavaScript unless explicitly interactive. Optimized for Core Web Vitals.
1---2// src/pages/index.astro3import LandingLayout from '@/layouts/LandingLayout.astro';4import { Hero } from '@/components/hero';5import { TerminalDemo } from '@/components/ui/marketing/TerminalDemo';6import FeatureTabs from '@/components/landing/FeatureTabs.tsx';7import TechStack from '@/components/landing/TechStack.astro';8---910<!-- Static Astro components - ships 0kb JS -->11<Hero layout="split" size="lg">12 <!-- React component - hydrates immediately -->13 <TerminalDemo slot="aside" client:load />14</Hero>1516<!-- Static HTML, no JS -->17<TechStack />1819<!-- React component - hydrates when scrolled into view -->20<FeatureTabs client:visible />
Type-Safe Components
TypeScript-first UI primitives with full prop validation and IDE autocompletion. Includes buttons, inputs, cards, modals, and more.
1// src/components/ui/form/Button/Button.tsx2import { type Ref } from 'react';3import { cn } from '@/lib/cn';4import { isExternalUrl } from '@/lib/utils';5import { buttonVariants, type ButtonVariants } from './button.variants';67interface BaseProps {8 ref?: Ref<HTMLButtonElement | HTMLAnchorElement>;9 variant?: ButtonVariants['variant'];10 size?: ButtonVariants['size'];11 loading?: boolean;12 href?: string;13 children: React.ReactNode;14}1516export function Button({ ref, variant = 'primary', size = 'md', href, ...rest }: BaseProps) {17 const classes = cn(buttonVariants({ variant, size }), rest.className);18 const isExternal = href ? isExternalUrl(href) : false;1920 if (href) {21 return <a ref={ref} href={href} className={classes} target={isExternal ? '_blank' : undefined} />;22 }23 return <button ref={ref} className={classes} {...rest} />;24}
i18n Ready
Add multi-language support with the --i18n flag. Includes type-safe translations, automatic locale detection, and SEO-friendly URL structures.
1// src/i18n/config.ts (with --i18n flag)2export const languages = {3 en: 'English',4 es: 'Español',5 fr: 'Français',6} as const;78export const defaultLang = 'en';910// src/i18n/translations/en.ts11export default {12 'nav.home': 'Home',13 'nav.about': 'About',14 'hero.title': 'Ship faster with Velocity',15 'hero.subtitle': 'The modern Astro starter',16} as const;1718// Usage in components19import { t } from '@/i18n';20const title = t('hero.title'); // "Ship faster..."
Content & Search
Type-safe content collections with Zod schemas, MDX support, RSS feeds, and Pagefind integration for lightning-fast static search.
1// src/content.config.ts2import { defineCollection, z } from 'astro:content';3import { glob } from 'astro/loaders';45const blog = defineCollection({6 loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/blog' }),7 schema: ({ image }) =>8 z.object({9 title: z.string().max(100),10 description: z.string().max(200),11 publishedAt: z.coerce.date(),12 updatedAt: z.coerce.date().optional(),13 author: z.string().default('Team'),14 image: image().optional(),15 tags: z.array(z.string()).default([]),16 featured: z.boolean().default(false),17 draft: z.boolean().default(false),18 locale: z.enum(['en', 'es', 'fr']).default('en'),19 }),20});2122export const collections = { blog, pages, authors, faqs };23// + Pagefind indexes all content at build time
Perfect scores. Out of the box.
*Tested in production for landing page demo · Desktop & Mobile emulation · Results will vary.
Scaffold exactly what you need.
Not every project needs everything. The Velocity CLI lets you pick your starting point.
Need custom pages? Use --pages and they're generated with routes and nav already wired. Pair it with --i18n and you get localized versions too—translations scaffolded and ready.
No prompts to click through. No wizard to escape. Just flags that do what they say.
Stop configuring. Start building.
Join the developers building faster, better websites with Velocity. Open source and free forever.