Site Types

Yoshi generates more than one kind of site from one shared substrate. A site type is selected by "siteType" in the blueprint config (default "pseo").

core ⊎ type

  skeleton-core/   ── shared by every type ──┐
   build rails · globals · fonts · tincture   │   emit_manifest(CORE)
   (design system + style-DNA) · markdown      ├──────────────────────▶   generated site
                                               │   ⊎ emit_manifest(TYPE)
  skeleton/        ── the pSEO type-layer ─────┤
  skeleton-docs/   ── the docs type-layer ─────┘   (TYPE chosen by config.siteType)

A skeleton TYPE = shared core + (page-taxonomy + section-types + blueprint-schema). The generator emits the core manifest first, then the chosen type manifest on top. Output paths are unchanged for pSEO, so existing sites stay byte-for-byte identical after the split.

siteType type-layer fires the pSEO data steps? content source
pseo (default) skeleton/ yes — products/cities/reviews/images/og the blueprint JSON
docs skeleton-docs/ no (skipped) a content/*.md directory

extract-on-second-use

skeleton-core/ holds only what a second type actually reached for — build rails, the design system (tincture + style-DNA), the markdown renderer. Everything else stays in the pSEO type until a second type needs it. The core is the seed of the "raw skeleton" an agent could scaffold from; it grows as types extract their shared primitives, never speculatively.

The docs type

A docs site is single-locale (no (en)/(fr) route groups): a sidebar shell + a content column. Its content comes from a content/*.md directory — each file's frontmatter {title, section, order, slug, status} drives the nav tree, and its markdown body renders through the shared core markdownToHtml. The generator turns that directory into content.ts + docs-nav.ts at build time.

This very site is a docs-type site, generated by Yoshi from a content/ directory. Dogfood all the way down.

Why a docs type needs far fewer crates

Docs has almost no gather/assets phase — the content is the input. No services, cities, reviews, or photos to source; no copy to generate (the author writes it). The pipeline is type-aware: it fires ~1–2 crates for docs versus ~9 for pSEO.