Skip to content

MVP Track Guide

Fast-track to production with essential features only

This track focuses on content presentation with zero JavaScript, manual testing, and essential features only.

  • Ship Fast: Get to production quickly
  • Stay Simple: Avoid premature optimization
  • Focus on Content: Let your work speak
  • Embrace Constraints: Zero JS = Zero JS problems
  • Personal portfolios
  • Small business websites
  • Blogs and content sites
  • Proof of concepts
  • Learning projects
  • Fast launches
MetricTargetWhy It Matters
Time to LaunchAs fast as possibleFast feedback loop
Lighthouse Score95+Performance = UX
Page Weight< 200KBFast on slow connections
JavaScript Size0KBNo bundle = no problems
ComplexityMinimalEasy to maintain

💡 Starter Template: All foundation decisions are pre-configured in this template

MVP Decisions:

Framework: Astro (latest stable)
Styling: Tailwind CSS
JavaScript: None (HTML + CSS only)
Package Manager: pnpm
Deployment: Cloudflare Pages
Repository: GitHub

📖 See Also: ADR-000: Starter Decisions for detailed rationale

Skip These:

  • Complex build tools
  • State management
  • API integrations
  • Advanced TypeScript configs

MVP Approach:

// Minimal content structure
blog/
- title, date, description, content
projects/
- title, description, image, link
pages/
- about, contact

Skip These:

  • Complex taxonomies
  • Multiple author support
  • Advanced content relationships
  • External data sources

MVP Tokens:

/* Keep it simple */
:root {
/* 3-4 colors max */
--color-text: #1a1a1a;
--color-background: #ffffff;
--color-primary: #0066cc;
--color-muted: #666666;
/* 3-4 spacing values */
--space-sm: 0.5rem;
--space-md: 1rem;
--space-lg: 2rem;
--space-xl: 4rem;
/* System fonts */
--font-sans: system-ui, sans-serif;
--font-mono: monospace;
}

Skip These:

  • Complex color schemes
  • Multiple font families
  • Elaborate animations
  • Advanced theming

MVP Setup:

Terminal window
# Simple setup script
pnpm install
pnpm astro build

Skip These:

  • Complex CI/CD pipelines
  • Extensive linting rules
  • Code coverage
  • Advanced Git hooks

MVP Layout:

const { title, description } = Astro.props;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{title}</title>
<meta name="description" content={description}>
<link rel="stylesheet" href="./styles/global.css">
</head>
<body>
<nav>
<a href="./">Home</a>
<a href="./about">About</a>
<a href="./projects">Projects</a>
<a href="./contact">Contact</a>
</nav>
<main>
<slot />
</main>
<footer>
<p>&copy; 2024 Your Name</p>
</footer>
</body>
</html>

💡 Starter Template: Essential components are pre-built in /src/components/ui/

MVP Component List:

  1. Button.astro → Available at /src/components/ui/Button.astro

    const { href, variant = 'primary' } = Astro.props;
    const classes = {
    primary: 'bg-blue-600 text-white hover:bg-blue-700',
    secondary: 'bg-gray-200 text-gray-800 hover:bg-gray-300'
    };
    <a href={href} class={`px-4 py-2 rounded ${classes[variant]}`}>
    <slot />
    </a>
  2. Card.astro → Available at /src/components/ui/Card.astro

    const { title, description, link } = Astro.props;
    <article class="border rounded-lg p-6 hover:shadow-lg transition-shadow">
    <h3 class="text-xl font-bold mb-2">{title}</h3>
    <p class="text-gray-600 mb-4">{description}</p>
    {link && <a href={link} class="text-blue-600 hover:underline">Learn more →</a>}
    </article>
  3. Section.astro → Available at /src/components/structural/Section.astro

    const { size = 'md' } = Astro.props;
    const padding = {
    sm: 'py-8',
    md: 'py-16',
    lg: 'py-24'
    };
    <section class={`${padding[size]} px-4`}>
    <div class="max-w-4xl mx-auto">
    <slot />
    </div>
    </section>

Skip These Components:

  • Modals
  • Tabs
  • Accordions
  • Carousels
  • Complex forms
  • Interactive widgets

MVP Sections:

  1. Hero Section
<Section size="lg">
<h1 class="text-5xl font-bold">Your Name</h1>
<p class="text-xl text-gray-600 mt-4">Developer, Writer, Creator</p>
</Section>
  1. Project List
<Section>
<h2 class="text-3xl font-bold mb-8">Projects</h2>
<div class="grid md:grid-cols-2 gap-8">
<Card title="Project One" description="..." link="..." />
<Card title="Project Two" description="..." link="..." />
</div>
</Section>

MVP SEO:

<meta name="description" content={description}>
<meta property="og:title" content={title}>
<meta property="og:description" content={description}>

MVP Testing Checklist:

## Manual Testing Checklist
### Functionality
- [ ] All links work
- [ ] Forms submit (if any)
- [ ] Images load
- [ ] No console errors
### Responsive
- [ ] Mobile (320px)
- [ ] Tablet (768px)
- [ ] Desktop (1200px)
### Browsers
- [ ] Chrome
- [ ] Firefox
- [ ] Safari
### Accessibility
- [ ] Keyboard navigation works
- [ ] Alt text for all images
- [ ] Sufficient color contrast

MVP Performance Checklist:

  1. Optimize Images (use TinyPNG)
  2. Minify CSS (Astro does this)
  3. Check Lighthouse (aim for 95+)

MVP Deployment:

  1. Push to GitHub
  2. Connect Cloudflare Pages
  3. Configure domain
  4. Enable auto-deploy
Terminal window
# That's it!
git push origin master
# Cloudflare handles the rest

MVP Documentation:

# Project Name
## Overview
What this site is about.
## Development
```bash
pnpm install
pnpm dev

Pushes to master auto-deploy to Cloudflare Pages.

Edit markdown files in src/content/.

MVP Monitoring:

  1. Set up Cloudflare Analytics
  2. Create Google Search Console
  3. Weekly manual check
  4. Monthly content update
  1. No Client-Side Routing

    • Use regular links
    • Let the browser handle it
  2. No State Management

    • No stores
    • No context
    • No props drilling
  3. No Build Complexity

    • No custom webpack
    • No complex plugins
    • No build optimization
  4. No Interactive Components

    • Use CSS hover states
    • Form submissions are fine
    • Details/summary for accordions
/* Dropdown with pure CSS */
.dropdown:hover .dropdown-content {
display: block;
}
/* Mobile menu with checkbox hack */
#menu-toggle:checked ~ .mobile-menu {
display: block;
}
/* Smooth scroll */
html {
scroll-behavior: smooth;
}
/* Print styles */
@media print {
nav, footer { display: none; }
}
  • Day 1: Setup & Architecture
  • Day 2: Design System & Tooling
  • Day 3-4: Layout & Components
  • Day 5: Sections & Pages
  • Day 6-8: Content Creation
  • Day 9: QA & Performance
  • Day 10: Deployment & Launch
  • Refine content
  • Add more pages
  • Optimize images
  • Gather feedback
ItemCostNotes
Domain$12/yearUse Cloudflare
Hosting$0Cloudflare Pages
Email$0Use mailto:
Analytics$0Cloudflare Analytics
Total$12/yearJust the domain

When ready to upgrade:

  1. Keep the Same Structure

    • Don’t rewrite
    • Enhance incrementally
  2. Add Features Gradually

    • One component at a time
    • Test each addition
  3. Introduce JavaScript Carefully

    • Start with View Transitions
    • Add islands where needed
  4. Enhance Testing

    • Add Playwright
    • Implement visual regression
  • Timeline: 10 days
  • Pages: 5
  • Lighthouse: 100/100
  • Result: 3 job interviews
  • Timeline: 2 weeks
  • Pages: 8
  • Cost: $12 (domain only)
  • Result: 40% more inquiries
  • Timeline: 1 week
  • Posts: 10 migrated
  • Performance: 200ms load time
  • Result: 2x reader engagement

Problem: “Just one more feature” Solution: Write features down for v2

Problem: Endless tweaking Solution: Ship at 80% perfect

Problem: “Should I use React?” Solution: No. Ship first.

Problem: Endless design iterations Solution: Use system fonts and move on

  1. “Done is better than perfect”
  2. “Ship early, iterate often”
  3. “Content over chrome”
  4. “Zero JavaScript, zero problems”
  5. “If it works, ship it”
Terminal window
# Your MVP journey begins now
pnpm create astro@latest my-mvp-site --template minimal
cd my-mvp-site
pnpm install
pnpm dev
# You're already 1% done!

Remember: The goal is to launch, not to build the perfect site. Every day you don’t ship is a day you’re not learning from real users. Ship it! 🚀