---
id: portfolio.ds.project-changelog-page
name: "Project Changelog Page"
type: template
status: active
relations: [{"type":"composes","target":"portfolio.ds.heading"},{"type":"composes","target":"portfolio.ds.paragraph"},{"type":"composes","target":"portfolio.ds.project-changelog-list"},{"type":"related_to","target":"portfolio.ds.project-about"},{"type":"related_to","target":"portfolio.ds.project-landing-page"}]
sources: ["apps/portfolio-site/src/components/routes/ProjectChangelogRoute.astro","apps/portfolio-site/src/design-system/docs/project-changelog-page.astro","apps/portfolio-site/src/lib/designSystemRegistry.ts","apps/portfolio-site/src/pages/[locale]/projects/[slug]/changelog/index.astro","apps/portfolio-site/src/pages/projects/[slug]/changelog/index.astro","packages/design-system/src/components/ProjectChangelogList.astro","packages/design-system/src/components/ProjectChangelogPage.astro"]
catalog: ["apps/portfolio-site/src/design-system/docs/project-changelog-page.astro"]
previews: ["apps/portfolio-site/src/design-system/docs/project-changelog-page.astro"]
---
# Project Changelog Page

## Purpose

Give one Project a concise, public release history without turning internal Development Logs or Git commits into reader-facing content.

## Contract

- Belongs under `Page Template > Content` beside Project Landing Page and Project Story Page.
- Composes one page heading, a concise description, and `Project Changelog List`.
- Uses Block spacing and remains cardless.
- Publishes only when the canonical English Project snapshot has approved non-empty `changelog` data.
- Uses localized changelog copy when present and the existing explicit English fallback when it is not.
- Leaves canonical metadata, locale routing, fallback notice, JSON-LD, and source validation to the application route.

## Props

| Prop | Values | Purpose |
| --- | --- | --- |
| `title` | string | Localized page heading including Project identity. |
| `description` | string | Concise explanation of the release list. |
| `entries` | changelog entry[] | Latest-first public release data. |
| `labels` | object | Localized list and entry labels. |

## Use

- Rendering `/projects/[slug]/changelog/` and localized equivalents.

## Do Not Use

- For internal Development Logs, raw commits, roadmaps, or Full Story content.
- For Projects without approved changelog data.

## Accessibility

- Preserve one page-level heading and ordered heading hierarchy for releases.
- Keep dates machine-readable and changes in semantic lists.
- Preserve locale fallback disclosure when translated release copy is unavailable.

## Verification

- Verify mobile, tablet, desktop, and ultra-wide layouts.
- Run `scripts/design-system-graph --check --no-write`.
