A modern static website built with Astro and MDX, featuring a dynamic theming system and page-specific color schemes.
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview built site
npm run preview
# Run SEO validation tests
npm run test:seosrc/
βββ components/ # Reusable UI components
β βββ ModernHero.astro # Main hero component with theming
β βββ Navbar.astro # Navigation component
β βββ Footer.astro # Footer component
β βββ ServiceToggle.astro # Service tabs component
β βββ SentryFeatures.astro # Sentry features section
β βββ StatsSection.astro # Statistics display
β βββ ... # Other components
βββ layouts/
β βββ BaseLayout.astro # Base HTML layout with SEO
βββ pages/
β βββ index.mdx # Homepage
β βββ sentry.mdx # Sentry platform page
β βββ radar.mdx # Radar tool page
β βββ audit-wizard.mdx # Audit Wizard page
β βββ audits.mdx # Audits page
β βββ ... # Other pages
βββ styles/
β βββ global.css # Global styles and utilities
β βββ tokens.css # Design system tokens
β βββ themes.ts # Theme definitions and helpers
public/
βββ images/ # Static images and assets
βββ favicon.svg
βββ robots.txt
tests/
βββ seo.test.js # SEO validation tests
The site uses a centralized theming system defined in src/styles/themes.ts. Each major page has its own color palette:
| Page | Theme | Primary Color |
|---|---|---|
| Home | Purple | #a855f7 |
| Audit Wizard | Blue | #4f63ff |
| Sentry | Green | #59b886 |
| Radar | Dark Green | #214c40 |
| Audits | Sky Blue | #3b82f6 |
---
import { radarTheme, themeToColorScheme } from '../styles/themes.ts';
export const pageTheme = radarTheme;
---
<ModernHero
title="Your Page Title"
description="Your description"
colorScheme={themeToColorScheme(pageTheme)}
/>Pages are written in MDX (Markdown + JSX), making them easy to edit:
---
layout: ../layouts/BaseLayout.astro
title: "Page Title | Auditware"
description: "Page description for SEO"
---
import Navbar from '../components/Navbar.astro';
import ModernHero from '../components/ModernHero.astro';
import Footer from '../components/Footer.astro';
<Navbar />
<ModernHero
title="Your Title"
description="Your description"
primaryCta={{
text: "Get Started",
href: "/link"
}}
imageUrl="/images/hero-image.png"
imageAlt="Hero image description"
/>
<Footer />Main hero section with gradient text and theme support:
<ModernHero
title="Main Title"
description="Hero description text"
primaryCta={{
text: "Primary Button",
href: "/path"
}}
secondaryCta={{
text: "Secondary Button",
href: "/path"
}}
imageUrl="/images/hero.png"
imageAlt="Hero image"
colorScheme={themeToColorScheme(pageTheme)}
/>Site navigation with dynamic active states:
<Navbar />Tabbed service display with feature lists:
<ServiceToggle
title="Our Services"
subtitle="What we offer"
services={[...]}
/>- Theming: Page-specific color palettes in
themes.ts - Global Colors: Defined in
tokens.cssas CSS custom properties - Gradient Text: Automatic subtle gradients from white to accent colors
- Display Font: Inter (system default)
- Body Font: Inter
- Monospace: JetBrains Mono
- Scales: 6xl, 5xl, 4xl, 3xl, 2xl, xl, lg, base, sm, xs
Consistent spacing scale from var(--spacing-1) to var(--spacing-32)
- Mobile: 0-479px
- Tablet: 480-767px
- Desktop: 768-1199px
- Large Desktop: 1200px+
All components are fully responsive with:
- Mobile-first approach
- Flexible grid layouts
- Optimized typography scaling
- Touch-friendly interactive elements
This website is fully optimized for search engines with comprehensive SEO implementation.
- β Structured Data (JSON-LD): Organization, WebSite, FAQPage, BreadcrumbList schemas
- β Complete Meta Tags: Title, description, Open Graph, Twitter Cards
- β Image Optimization: Astro Image component with WebP conversion, lazy loading
- β
Sitemap: Automatically generated at
/sitemap-index.xml
- β
FAQ Section:
/faqpage with FAQPage schema markup - β Image Alt Text: All images have descriptive alt attributes
- β Internal Linking: Comprehensive navigation structure
- β Breadcrumb Navigation: With BreadcrumbList schema
- β Security Headers: CSP, X-Frame-Options, X-Content-Type-Options
- β Performance: DNS prefetch, font optimization, resource hints
- β Automated Testing: CI/CD validation for all SEO requirements
Run comprehensive SEO tests:
npm run test:seoThis validates:
- Meta tags (title, description, OG, Twitter)
- Structured data (Organization, WebSite, FAQPage, BreadcrumbList)
- Image optimization and alt text
- Internal/external linking
- Accessibility (lang, viewport, headings)
- Performance indicators
All PRs automatically run SEO validation via GitHub Actions.
Edit in tests/seo.test.js:
const SITE_CONFIG = {
siteUrl: 'https://auditware.io',
siteName: 'Auditware',
twitterHandle: '@auditware',
socialProfiles: [
'https://twitter.com/auditware',
'https://linkedin.com/company/auditware'
],
foundingDate: '2020'
};Add to page frontmatter:
---
layout: ../layouts/BaseLayout.astro
title: "Page Title | Auditware"
description: "Page description for SEO (150-160 chars)"
image: "/images/og-image.png"
---Add custom schemas via frontmatter:
structuredData:
"@context": "https://schema.org"
"@type": "Service"
name: "Your Service"
description: "Service description"Configured in public/_headers (Netlify) and vercel.json (Vercel):
- X-Frame-Options: Prevent clickjacking
- X-Content-Type-Options: Prevent MIME sniffing
- Content-Security-Policy: Restrict resource loading
- Referrer-Policy: Control referrer information
- Permissions-Policy: Restrict browser features
Note: HSTS is commented out by default. Enable after testing HTTPS.
- DNS prefetching for external domains
- Preconnect for critical resources (fonts, analytics)
- Font display: swap for better perceived performance
- Image lazy loading (below fold)
- Image eager loading (hero images)
- Automatic WebP conversion
- Cache headers for static assets (1 year)
- CSS/JS bundling and minification
- LCP (Largest Contentful Paint): < 2.5s
- FID (First Input Delay): < 100ms
- CLS (Cumulative Layout Shift): < 0.1
Required actions:
- Verify site configuration in
tests/seo.test.js - Update social media URLs in
src/layouts/BaseLayout.astro - Test locally:
npm run build && npm run preview - Run SEO tests:
npm run test:seo - All tests passing
Post-deployment:
- Submit sitemap to Google Search Console
- Submit sitemap to Bing Webmaster Tools
- Validate structured data: https://validator.schema.org/
- Test social cards (Facebook, Twitter, LinkedIn)
- Monitor Core Web Vitals in Search Console
Schema Validation
- Schema.org Validator: https://validator.schema.org/
- Google Rich Results Test: https://search.google.com/test/rich-results
Performance Testing
- PageSpeed Insights: https://pagespeed.web.dev/
- Lighthouse: Built into Chrome DevTools
- WebPageTest: https://www.webpagetest.org/
Social Preview Testing
- Facebook: https://developers.facebook.com/tools/debug/
- Twitter: https://cards-dev.twitter.com/validator
- LinkedIn: https://www.linkedin.com/post-inspector/
<FAQSection
title="Frequently Asked Questions"
faqs={[
{
question: "Your question?",
answer: "Your answer"
}
]}
/><Breadcrumb
items={[
{ name: "Home", href: "/" },
{ name: "Current Page" }
]}
/>Automatically generates BreadcrumbList schema for search engines.
- Framework: Astro 5.x with TypeScript support
- Content: MDX for enhanced markdown with components
- Styling: Component-scoped CSS with design tokens
- Deployment: Optimized for Vercel/Netlify/static hosting
- SEO: Automated sitemap generation with
@astrojs/sitemap
β
MDX page content (src/pages/*.mdx)
β
Theme colors (src/styles/themes.ts)
β
Images (public/images/)
β
Component props in MDX files
src/components/*.astro)
src/styles/)
src/layouts/)
# Development
npm run dev # http://localhost:4321
# Production
npm run build # Output to dist/
npm run preview # Preview production build
# Testing
npm run test:seo # Validate SEO requirementsThe project uses semantic commits and maintains clean history:
- Feature development in branches
- All changes tested via
npm run build - SEO tests pass before deployment
- Production builds deployed from
mainbranch
Built with β€οΈ by the Auditware team