Easy startup websites for market research
bun install
bun devOpen localhost:4321 in your browser.
- Astro.js - Fast static site generation with partial hydration
- Tailwind CSS - Utility-first styling with custom theme
- TypeScript - Strict mode for full type safety
- Content Collections - Type-safe blog posts with Zod validation
- Resources Library - Optional evergreen resources collection with categories and manual ordering
- MDX Support - Enhanced markdown with components
- RSS Feed - Automatic feed generation (
/rss.xml) - Sitemap - SEO-friendly sitemap generation (
/sitemap-index.xml)
src/
├── components/ # Reusable UI components
│ ├── atoms/ # Atomic components
│ ├── molecules/ # Compound components
│ ├── organisms/ # Section components
│ └── templates/ # Page-level composition (optional)
├── content/ # Blog posts and resources (MDX)
├── data/ # Site-specific page copy and UI content
├── data-models/ # Shared TypeScript models for data modules
├── layouts/ # Page layouts
├── pages/ # Routes (file-based)
└── styles/ # Global styles
| Command | Description |
|---|---|
bun dev |
Start development server |
bun build |
Build for production |
bun preview |
Preview production build |
bun run lint |
Run ESLint |
bun run typecheck |
Run TypeScript check |
bun storybook |
Start Storybook |
bun storybook:build |
Build Storybook static site |
npx vitest --project=storybook --run |
Run Storybook tests (CI/a11y) |
Storybook is configured for TSX components under src/components/.
bun storybookRun Storybook tests (including a11y checks) from CI or locally with:
npx vitest --project=storybook --runStory conventions (early stage):
- Use a single default export title that matches the component group (Atoms, Molecules, Organisms).
- Keep story names short and descriptive (Primary, WithIcon, Dense).
The site branding now comes from one source of truth: src/data/brand.ts.
- Open
src/data/brand.ts. - Update identity, organization, theme, links, SEO, and blog values.
- Keep paths aligned with your configured
basepath inastro.config.mjs.
For the complete typed example and current defaults, use src/data/brand.ts directly.
Keep site-specific copy and content in src/data/, then import it into .astro pages.
- Use
src/data/home.ts,src/data/about.ts,src/data/blog.ts, andsrc/data/resources.tsfor page-level strings and labels. - Keep shared data interfaces in
src/data-models/(includingsrc/data-models/brand.ts). - Keep
.astropages focused on layout and rendering logic; avoid hard-coded copy in templates. - Reuse
src/data/brand.tsfor global identity, SEO defaults, and links.
Keep renamed routes in astro.config.mjs:
redirects: {
"/about/": "/project/",
},Remove the old page file, because file-based routes take precedence over configured redirects.
- Color tokens are exposed as CSS variables in
src/styles/global.css. - Tailwind color utilities (
primary-*,secondary-*) map to those variables intailwind.config.mjs. - The active brand values are injected globally by
src/layouts/BaseLayout.astro.
The template includes a resources collection at src/content/resources/.
- Use nested paths if helpful (for example
guides/interview-script-template.mdx). - Draft entries (
draft: true) are excluded from both resources listing and detail routes. - Resources are sorted by
order(ascending), then byupdatedDate/pubDate(descending).
Supported frontmatter fields:
title,description,category,pubDateupdatedDate,tags,draft,orderheroImage,canonical,seoTitle,seoDescription,ogImage,related
Schema source of truth: src/content.config.ts.
Configured for GitHub Pages. Update astro.config.mjs with your username:
site: 'https://riehlegroup.github.io',
base: '/idolbust',Pushes to main automatically build and deploy via the Deploy GitHub Actions workflow.