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.