Skip to content

changelog: extract markdown source to FerrLabs/Changelog repo + propagate to product sites #9

@BryanFRD

Description

@BryanFRD

Today the changelog markdown lives in FerrLabs-Cloud/site/src/content/changelog/ and renders only on ferrlabs.com/changelog/. Each product site (ferrflow.com, ferrtrack.com, ferrvault.com, ferrgrowth.com, agents.ferrlabs.com) should get its own filtered /changelog/ page so:

  • SEO: per-product changelog pages match <product> changelog search intent.
  • UX: visitor on ferrflow.com sees the FerrFlow changelog without leaving the product site.
  • Cross-link: each entry on a product site links back to ferrlabs.com/changelog/ for the cross-product view.

Proposed architecture

New public repo FerrLabs/Changelog with just markdown files at the root (matches the schema in CLAUDE.md). Source of truth for every site.

Each Astro site adds a build step that pulls the .md files at build time:

"prebuild": "degit FerrLabs/Changelog#main src/content/changelog --force"

Then the existing content collection works as-is, just filtered:

const entries = await getCollection('changelog', e => e.data.product === 'ferrflow');

A repository_dispatch from FerrLabs/Changelog to each consumer triggers a rebuild when entries land. Or hourly schedule: cron, simpler.

Migration steps

  1. Create FerrLabs/Changelog (public, MIT or no-license).
  2. Move the 3 existing .md files from FerrLabs-Cloud/site/src/content/changelog/ to the new repo root.
  3. Add the prebuild step + content collection to: FerrFlow-Cloud (Starlight needs care), FerrTrack-Cloud, FerrVault-Cloud, FerrGrowth-Cloud, FerrAgents.
  4. Add filter UI on ferrlabs.com/changelog/ (query-string ?product=).
  5. Update CLAUDE.md: PRs add their entry to FerrLabs/Changelog (not FerrLabs-Cloud).
  6. Cross-link footer of each product changelog page → ferrlabs.com/changelog/.

Why not now

Decision: do it once we have ≥5 entries to avoid setting up the cross-repo machinery for almost nothing. Today we have 3.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions