- SaaS: Next.js
- Dashboard: Next.js
- Marketing + App Hybrids: Next.js
- Product documentation: Docusaurus, Astro
- Developer portals: Docusaurus
- Content-heavy static sites with structured data: Gatsby
- Blog: Astro, (or Gatsby if GraphQL-based CMS)
- Marketing: Astro
flowchart TD
%% === Next.js ===
subgraph N[Next.js]
N1[Content Source: API / CMS / DB] --> N2[Build Step: getStaticProps / getServerSideProps]
N2 --> N3["Pre-render Pages (SSG SSR ISR)"]
N3 --> N4[Serve via Edge / CDN]
N4 --> N5["Client React Hydration (CSR)"]
end
%% === Docusaurus ===
subgraph D[Docusaurus]
D1[Markdown / MDX Files] --> D2[Static Site Generator]
D2 --> D3[Pure Static HTML/CSS/JS]
D3 --> D4[Served from CDN or GitHub Pages]
end
%% === Gatsby ===
subgraph G[Gatsby]
G1[Content Source: CMS / Markdown / APIs] --> G2[GraphQL Data Layer]
G2 --> G3[Static Build: React + GraphQL Compile]
G3 --> G4[Generated Static HTML + Hydration]
G4 --> G5["Served from CDN (Netlify etc)"]
end
%% === Astro ===
subgraph A[Astro]
A1[Markdown / CMS / API Data] --> A2[Build Step: Partial Hydration Islands]
A2 --> A3[Static HTML + Optional JS Islands]
A3 --> A4[Zero JS by default – Load islands on demand]
A4 --> A5[Served from CDN or Edge Runtime]
end
%% === Group Labels ===
classDef framework fill:#222,color:#fff,stroke:#666,stroke-width:1px;
class N,D,G,A framework;
%% === Layout adjustments ===
N --- D --- G --- A