Optimization roadmap
This page is a plan that tracks implementation. Each phase is a self-contained chunk that was (or will be) done, reviewed, and shipped on its own. A ✓ next to a phase means it is merged.
Why this roadmap exists
The vision describes an org & product portal: an organization front door, a branded product page per product, aggregated docs, all free and upgradable. The template already has the machinery for most of it — but two gaps keep it from feeling like the vision:
- There is no org introduction. The landing page is a hero + product grid
- latest posts. An organization’s own story (mission, team, links) is missing, which is the first thing a visitor to an org site expects.
- The default product landing is thin. A product with only docs gets a
minimal page that reads like a docs index, not a product page. The vision
promises “write docs, get a good-looking page” — today that is only true
once a product also ships a
product-infofile (or a custom landing).
Phase 1 — Org front door (highest value, smallest surface) ✅ DONE
Goal: the landing page introduces the organization, not just the products.
Status: merged. Implemented as:
src/config/copy.tsgains anorgblock (eyebrow,title,mission,linksLabel,links), per-locale like every other copy table.- Both landings (
src/pages/index.astroand its[locale]/twin) render a #mission section between the hero and the latest posts: eyebrow, title, mission lead, and a centered link row. - The copy is re-exported from
src/lib/i18n.ts(the single import surface for copy), so no page needs to import fromconfig/copydirectly. - Styles reuse the existing
.section-header/.eyebrow/.btnprimitives; only.mission-leadand.mission-linkswere added toglobal.css.
All of it lives in the “Your site” tier (copy.ts + landing pages + one
style block) — no Machinery changes.
Acceptance
- ✓ Landing page shows org mission and links from
copy.ts, localized (both locales render the mission section in the hero → mission → posts order). - ✓ Changing the
orgblock incopy.tsupdates the landing without touching components.
Tasks (as originally scoped)
- Add an
orgblock tosrc/config/copy.ts:name,tagline,mission,cta(label + href),links(GitHub, contact, etc.). Per-locale, matching the existingRecord<Locale, …>pattern. - Add an “About the organization” section to
src/pages/index.astro(between hero and latest posts): mission text + a short link row. - Add a
mission/orgsection to the default landing templateProductLandingDefault.astro? No — org copy belongs to the org landing only. Product landings stay product-focused. - Keep everything in the “Your site” tier:
copy.ts+index.astroare instance files. No Machinery changes required.
Phase 2 — Stronger default product landing ✅ DONE
Goal: a product with only docs gets a presentable product page, and a
product with product-info gets an even better one — with zero extra work
beyond writing content.
Status: merged. Implemented as:
ProductLandingDefault.astro’s fallback branch (noproduct-info) now renders a real product page straight from theProductregistry entry: hero (name + localizeddescriptionlead + docs/repo buttons), badges as a highlight-badge trust strip, an about section (description + Read Docs / View Source), and a CTA. A product with only a registry entry (and optionally docs) now gets a presentable page — the “write docs, get a page” promise holds without anyproduct-info.- The
product-infopath is unchanged (still the rich landing via the section registry); the fallback upgrade is purely additive. docs/en/authoring.md(+ zh-Hans) now documents the three-tier resolution: custom override →product-infostructured landing → registry fallback, and adds a “product-info files” subsection under “Add a new product”.
Acceptance
- ✓ A product with only a registry entry (docs optional) renders a page that
reads as a product — hero with description lead, badges, about, CTA
(verified with a temporary no-
product-infoproduct; the fallback renders in both locales). - ✓
product-infofiles are the documented path to a rich page (authoring.md now explains the ladder). - ✓ No breaking change to existing products (all sample products keep their
product-info-driven landings; build stays 0 errors / 0 warnings).
Current state (before the change)
- Default (
ProductLandingDefault.astro): minimal hero + docs link + repo link. Reads like a docs index. - With
product-info: rich landing (tagline, features, install, highlights) viasrc/components/landing-sections/*. - With a custom override:
src/components/product-landing/<slug>.astro.
Tasks (as originally scoped)
- Upgrade the default landing (
ProductLandingDefault.astro) so it uses the product’sdescription,badges,logo(already available from theProductregistry) to render a real product card — what it is, why use it, quick links (docs, repo, GitHub). - Promote
product-infofrom “extension” to “recommended default.” Insite.config.ts, allow a product to declarelanding: 'default' | 'info' | 'custom'(or just document the upgrade path). Keep Machinery unchanged; this is a documentation + sample-content change. - Add a sample
product-infofile for every sample product so adopters see the recommended pattern, and updatedocs/en/authoring.mdto say “docs → good page; add product-info → great page.”
Notes on scope
- The original “promote product-info to recommended default” task was
resolved by documenting the ladder in authoring.md rather than adding a
landing:field to theProductinterface — keeping the Machinery interface stable (fewer breaking changes for adopters). Sample products already all shipproduct-infofiles, so no sample-content change was needed.
Phase 3 — Positioning & docs ✅ DONE
Goal: the repo tells the org-portal story clearly, so the right people find it.
Status: merged. Implemented as:
- README reframed from “content-hub template” to “org & product portal”: it leads with the org front door + per-product landing + aggregated docs, then describes the sync/PR mechanism as the means.
docs/en/vision.md(+ zh-Hans) added as the “why” — the philosophy home — and linked from the README and both docs indexes.- The docs table in
README.mdanddocs/en/index.md(+ zh-Hans mirrors) now lists Vision and this roadmap. - The repository description + topics were set on GitHub (a repo-settings
change, not code or docs): the description now leads with the org &
product portal framing, and 19 discovery topics are attached —
astro,astro-template,static-site-generator,docs-generator,documentation,documentation-site,markdown,typescript,i18n,github-pages,developer-portal,content-aggregation,ssg,jamstack,cloudflare-pages,knowledge-base,landing-page,blog,open-source.package.jsondescription/keywordswere aligned with them so the npm metadata does not drift.
All of it is copy/docs — no Machinery changes.
Tasks
- README — reframe from “content-hub template” to “org & product portal”: lead with the org front door + per-product landing + aggregated docs, then the sync/PR mechanism as the means.
docs/en/vision.md— the “why” (this is the philosophy home; link it from README and the docs index).- Docs index / table — add
Visionand this roadmap to the docs table inREADME.mdanddocs/en/index.md(with zh-Hans mirrors). - Repository description + topics — ✅ done: description and topics
updated to the org-portal framing (“org & product portal”, “multi-project
docs”, “landing pages”), with
package.jsonkeywords aligned.
Acceptance
- ✓ README and docs lead with the org-portal value proposition.
- ✓
vision.mdandroadmap.mdare linked from the docs index, in both locales. - ✓ The GitHub repository description/topics match the org-portal framing.
Phase 4 (deferred) — Versioned docs
Goal: support v1.x, v2.x docs per product (like
MultiDocumenter.jl and
DocBuilder offer), for SDK/API-heavy
products.
Deferred because the core vision (org + product landing + docs aggregation)
does not require it. When picked up, it should follow the extension pattern:
a versions field on a product + a version switcher in the docs layout —
added as an opt-in, not a breaking change.
Verification for each phase
npm run validate:content— 0 errors (slug parity, index, product-info checks).npm test— full suite passes.npm run build— 0 errors, 0 warnings.- Spot-check
dist/for the affected routes. - If
examples/orskills/change:npm run check:examples.
How to pick this up
Phases 1–3 are merged and shipped. The only remaining item is the deferred Phase 4 (versioned docs), which the core vision does not require — pick it up only if an SDK/API-heavy product needs it, and follow the extension pattern described above.