Why we build Forge sites on Astro
Islands architecture, zero-JS by default, and a content layer that treats Markdown as a database. Here's why every Forge site ships on Astro.
Founder
Every site Forge ships is an Astro site. That isn’t an aesthetic preference — it’s the constraint that makes the rest of the product possible. A marketing site has to be fast, crawlable, and cheap to maintain by a small team. Astro is the only framework that gives us all three without a fight.
Islands, not a single-page app
Most of a marketing page is static: a hero, some features, a pricing table, a footer. Shipping a megabyte of JavaScript to render text is a tax your visitors pay in battery and bandwidth. Astro renders everything to HTML at build time and hydrates only the interactive islands — a theme toggle, a pricing switch, a search box.
// This is the only JS that ships for the pricing section.
export default function PricingToggle({ onChange }) {
const [annual, setAnnual] = useState(true);
return <button onClick={() => setAnnual((v) => !v)}>...</button>;
}
You choose when each island loads with a client directive:
| Directive | Loads when | Good for |
|---|---|---|
client:load | immediately | theme toggle, nav |
client:idle | the browser is idle | search, command menu |
client:visible | it scrolls into view | FAQ, counters |
client:media | a media query matches | mobile-only menus |
client:only | never on the server | charts, anything DOM-bound |
The content layer is a build-time database
Astro’s content collections validate your Markdown frontmatter against a Zod
schema and give you a typed API to query it. A typo in a blog post’s author
field fails the build, not production.
Combine that with the issue → PR → live loop and you get a marketing site where the content and the code are both reviewed before they ship.
What it costs
Near nothing. The page you’re reading ships only the JavaScript for the theme toggle and the navigation. Everything else is HTML and CSS — which is exactly what a marketing site should be.
Written by
Akshay PalimkarAkshay builds Forge and writes about shipping marketing sites on a stack a small team can actually own.
Keep reading
Multi-vendor AI routing, and why your backlog never stalls
Claude does the work — but when it's rate-limited, the loop falls back to OpenAI and Gemini. Here's how config-driven routing keeps sites shipping.
Config-driven marketing sites — change the config, not the components
A rebrand should be one file, not a week. How Forge models an entire business in a single typed config so the components never need to change.