Four production-ready responsive starter templates for web developers. Each template is a complete, self-contained static website you can open in a browser, customise, and deploy in minutes.
Starter Templates Pro is a pack of four distinct website templates that share a common design-token layer (shared/tokens.css). The shared tokens define colors, spacing, typography, border radius, shadows, and motion โ so every template feels visually coherent, but each has a completely different layout suited to its purpose.
All templates are zero-dependency: no npm, no bundler, no framework. Just HTML, CSS, and vanilla JavaScript.
templates/landing/)A marketing landing page for a SaaS product. Best for: product launches, app signups, campaign pages.
Key sections: hero ยท logo strip ยท 6-card feature grid ยท 3-step how-it-works ยท testimonials ยท 3-tier pricing ยท FAQ accordion ยท email CTA
templates/dashboard/)A full app-shell layout with sidebar navigation. Best for: admin panels, internal tools, analytics dashboards.
Key sections: collapsible sidebar ยท sticky topbar ยท 4 stat cards ยท CSS bar chart ยท activity feed ยท projects data table
templates/portfolio/)A personal portfolio for developers and designers. Best for: freelance sites, job applications, personal branding.
Key sections: hero with availability badge ยท filterable project grid ยท about + skills ยท contact cards
templates/docs/)A documentation site shell. Best for: open-source docs, product manuals, knowledge bases.
Key sections: topbar with search ยท collapsible sidebar TOC ยท article with code blocks + callouts ยท reference table ยท prev/next navigation
localStorage; inline script prevents flash of wrong theme:focus-visible ringprefers-reduced-motion: reduce is setstarter-templates-pro/
โโโ shared/
โ โโโ tokens.css โ canonical design tokens
โโโ templates/
โ โโโ landing/
โ โ โโโ index.html
โ โ โโโ style.css
โ โ โโโ script.js
โ โ โโโ README.md
โ โโโ dashboard/
โ โ โโโ index.html
โ โ โโโ style.css
โ โ โโโ script.js
โ โ โโโ README.md
โ โโโ portfolio/
โ โ โโโ index.html
โ โ โโโ style.css
โ โ โโโ script.js
โ โ โโโ README.md
โ โโโ docs/
โ โโโ index.html
โ โโโ style.css
โ โโโ script.js
โ โโโ README.md
โโโ guide/
โ โโโ 01-overview.md โ this file
โ โโโ 02-customization-guide.md
โ โโโ 03-template-catalog.md
โโโ README.md
โโโ manifest.json
โโโ LICENSE
# No install step โ just open a template:
open templates/landing/index.html
# Or serve locally for relative-path assets:
python -m http.server 8000
# โ http://localhost:8000/templates/landing/*Continue to guide 02 for step-by-step customisation instructions.*
How to adapt Starter Templates Pro to your own brand, content, and deployment environment.
Every template uses the same CSS custom-property token structure. To re-skin a template, edit the :root block at the top of its style.css:
:root {
/* --- Your brand colors --- */
--color-primary: #2563eb; /* Main action color: buttons, links, accents */
--color-primary-dark: #1d4ed8; /* Hover / pressed state (slightly darker) */
--color-primary-light: #dbeafe; /* Backgrounds behind primary text, badge fills */
--color-accent: #f59e0b; /* Secondary highlight: stars, prices, badges */
}Then mirror the change in [data-theme="dark"]:
[data-theme="dark"] {
--color-primary: #3b82f6; /* Slightly lighter for dark backgrounds */
--color-primary-dark: #2563eb;
--color-primary-light: #1e3a5f; /* Dark-safe tinted surface */
--color-accent: #fbbf24;
}Tip: Use a contrast checker (e.g. WebAIM) to verify your chosen primary color passes WCAG AA (4.5:1) against both --color-bg (light) and the dark --color-bg (#0f172a).
All templates use the system font stack โ no external network requests by default:
--font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;To use a custom font, download the WOFF2 files and add a @font-face rule:
@font-face {
font-family: 'InterVariable';
src: url('../fonts/Inter-Variable.woff2') format('woff2');
font-weight: 100 900;
font-style: normal;
font-display: swap;
}
:root {
--font-sans: 'InterVariable', ui-sans-serif, system-ui, sans-serif;
--font-heading: 'InterVariable', ui-sans-serif, system-ui, sans-serif;
}Never link a Google Fonts โ that adds a render-blocking external request that breaks offline use.
All text content is in index.html. Each section is clearly commented โ search for the comment to find the section you want:
<!-- โโ HERO โโ -->
<!-- โโ FEATURES โโ -->
<!-- โโ PRICING โโ -->
<!-- โโ FAQ โโ -->
Find the .pricing-grid section and update the amount, period, feature list, and CTA button href:
<span class="amount">29</span>
<span class="period">/month</span>
...
<a href="https://buy.stripe.com/your-product-link" class="btn btn-primary btn-block">
Get started
</a>Duplicate a .nav-item list item and update the label and icon SVG:
<li>
<a href="#your-page" class="nav-item">
<!-- replace with your icon SVG -->
<svg ...>...</svg>
Your Page
</a>
</li>Set aria-current="page" on the active item and add is-active to its class list.
Copy an existing .project-card block and set data-category to one of your filter values:
<li class="project-card" data-category="web" data-reveal>
<div class="project-preview project-preview--blue" aria-hidden="true">
<!-- decorative content or replace with <img> -->
</div>
<div class="project-body">
<h3 class="project-name">Your Project Name</h3>
<p class="project-desc">What it does and why it matters.</p>
...
</div>
</li>To add a new filter category, add a button to .filter-bar:
<button class="filter-btn" data-filter="mobile" type="button">Mobile</button>1. Duplicate templates/docs/index.html as a new file (e.g. projects.html)
2. Update the breadcrumb, article , and article body content
3. Add a link in the sidebar TOC in all pages
4. Update the prev/next nav links at the bottom of adjacent pages
The landing template's CTA form is rendered as a disabled control by default โ the and both have the disabled attribute and there is no action attribute on the form.
When you have provisioned an email service (e.g. ConvertKit, Mailchimp, Beehiiv):
1. Remove the disabled attribute from the and
2. Set the form action to your ESP's endpoint, or wire up a fetch() call in script.js
3. Add a GDPR consent checkbox and a privacy policy link before the submit button
<label class="consent-label">
<input type="checkbox" name="consent" required>
I agree to the <a href="/privacy">Privacy Policy</a>.
</label>To add real screenshots or photos, replace the CSS placeholder graphics with tags:
<!-- Replace .hero-visual or .project-preview content: -->
<img src="assets/screenshot.png"
alt="Dashboard showing sprint velocity and active projects"
width="600" height="450"
loading="lazy">Best practices:
loading="lazy" on all below-the-fold imagesalt descriptionAny static hosting provider works. The simplest options:
| Provider | Steps |
|---|---|
| Netlify | Drag the template folder into netlify.com/drop |
| GitHub Pages | Push the template folder to a repo, enable Pages under Settings |
| Vercel | vercel --cwd templates/landing |
| Cloudflare Pages | Connect repo, set output directory to templates/landing |
| S3 + CloudFront | Upload files, set index.html as the default document |
Get the full Pro Template Pack and unlock everything.
Get the complete guide with every chapter unlocked, including code samples, diagrams, and best practices.
Access all interactive tools with complete data, all workload profiles, and the full scenario library.
Downloadable source code, configuration files, and working examples from every chapter.
Free updates for life. Every new chapter, tool, and improvement included.