| Mental model | File routes + components + build-time data; hydrate only named islands. | Transform a directory of templates and data into an output directory. | React App Router rendered through a Next-compatible Vite runtime, then crawled here. | The source file is the page; any static host serves it unchanged. | PHP application resolves requests from a database, theme, and plugins. |
| Templating | .astro components, layouts, framework components, TypeScript. | Nunjucks, Liquid, Markdown, HTML, JS, and more; engines configurable per format. | React Server and Client Components in app/. | HTML + CSS + optional JS; includes require manual duplication or generation. | PHP theme templates, block editor, shortcodes, page builders. |
| Content formats | Markdown/MDX collections, JSON, APIs, custom content loaders. | Markdown, HTML, Nunjucks, JSON/YAML data, arbitrary template languages. | TypeScript/JS modules, fetched data, MDX with setup; this fleet uses TS. | Anything embedded or generated into the file. | Posts, pages, custom post types, media, fields, taxonomies. |
| 900 pages from JSON | Strong. getStaticPaths() plus typed loaders. CFW builds one route per record. | Strong. Pagination/data cascade works, but custom relationships take code. | Strong. Generate/discover route params, then prerender or crawl. | Possible. Write a generator script first; raw HTML alone has no loop. | Possible. Import records or write a plugin; runtime queries remain. |
| Client JS by default | None for static components. JavaScript ships only with explicit client:* islands. | None. Only authored scripts ship. | Some. Client Components and navigation/hydration can add bundles; Server Components do not. | None. Only authored scripts ship. | Varies. Theme and plugins decide. |
| Interactivity | React/Vue/Svelte/etc. islands can coexist with static HTML. | Bring vanilla JS, Web Components, or an island helper; no prescribed client runtime. | React is first-class; easiest path if the static site may become an application. | Native HTML first; hand-author any behavior. | Plugin ecosystem and request-time PHP; broadest turnkey choice. |
| Build behavior here | Hundreds of data routes plus content; CI guards minimum page counts. | Dozens of imported posts/pages; simple one-command builds to _site/. | Build a runnable bundle, start locally, crawl deterministic routes into flat files. | No build unless validation, screenshots, or generation scripts are added. | No full-site build; each request executes the app unless cached. |
| Config surface | Moderate: integrations, content schemas/loaders, routes, client directives. | Small core, but the data cascade and template-engine interactions deserve care. | Largest: React, Next semantics, vinext/Vite, crawl rules, asset rewriting. | Tiny at first; duplication and custom tooling grow with the corpus. | Low for basic use; theme/plugin/server interactions grow operationally. |
| Learning curve | Comfortable for component-oriented frontend developers. | Fast for HTML/Markdown work; subtle configuration is the main edge. | Highest in this set: React, server/client boundaries, routing, runtime assumptions. | Lowest for one page; highest when inventing your own framework accidentally. | Lowest for nontechnical publishing; PHP/theme internals are a separate skill. |
| Agent friendliness | High. Components and data are explicit, typed, and diffable. | Very high. Imported bodies can remain plain while layouts stay templated. | Medium-high. Explicit code, but more layers and generated artifacts. | Highest per page. The model can own the complete file. | Low with builders. Opaque DB blobs and plugin state resist diffs. |
| Ecosystem risk | Framework and integration majors can move; static output remains portable. | Small core and old-web defaults reduce lock-in; template packages can still drift. | Highest churn and dependency surface here; vinext adds compatibility risk. | Browser standards are durable; your bespoke conventions become the risk. | Mature, vast ecosystem; plugin abandonment and compatibility are recurring work. |
| Runtime/hosting | Default output is static; serve from any file server when no route opts into runtime rendering. | Static output directory; host almost anywhere. | Official static export exists, but this fleet instead snapshots a local vinext server. | Any static server. | Requires PHP + database unless a caching/export layer is added. |
| Best fit | Structured, data-heavy reference with selected interactive islands. | Content migration where imported Markdown/HTML should stay close to source. | React product that is static today but may gain application behavior. | One-off terminal reference, landing page, or deliberately standalone artifact. | Multi-editor publishing, plugin-centric commerce/workflows, low-code ownership. |