From 0da1b387642787bcd91d6dcf0c63fbc32a80ccc3 Mon Sep 17 00:00:00 2001 From: ahmido Date: Sun, 19 Apr 2026 10:20:05 +0000 Subject: [PATCH] feat: implement website core pages IA (#252) ## Summary - implement the website-only core IA for Spec 215 with canonical Home, Product, Trust, Changelog, Contact, Privacy, and Imprint routes - reduce primary navigation to the core buyer journey, retain legal/supporting pages as secondary surfaces, and redirect `/security-trust` to `/trust` - add route metadata, sitemap/canonical handling, changelog publishing, and updated smoke coverage for the new IA contract ## Testing - `corepack pnpm build:website` - `cd apps/website && corepack pnpm exec playwright test` - integrated browser smoke validation for core routes, secondary routes, `/security-trust -> /trust`, hidden optional routes, mobile nav, and Trust/Changelog to Contact paths ## Notes - keeps all changes local to `apps/website` and the Spec 215 artifacts - preserves the website working contract with no `apps/platform` runtime coupling Co-authored-by: Ahmed Darrazi Reviewed-on: https://git.cloudarix.de/ahmido/TenantAtlas/pulls/252 --- .github/agents/copilot-instructions.md | 5 +- .../src/components/layout/Footer.astro | 7 +- .../src/components/layout/Navbar.astro | 3 +- .../src/components/layout/PageShell.astro | 4 + apps/website/src/content.config.ts | 20 +- .../2026-04-19-initial-core-pages.md | 13 + apps/website/src/content/pages/changelog.ts | 29 ++ apps/website/src/content/pages/contact.ts | 16 +- apps/website/src/content/pages/home.ts | 104 +++--- apps/website/src/content/pages/imprint.ts | 50 +++ .../website/src/content/pages/integrations.ts | 10 +- apps/website/src/content/pages/legal.ts | 30 +- apps/website/src/content/pages/privacy.ts | 6 +- apps/website/src/content/pages/product.ts | 52 +-- apps/website/src/content/pages/solutions.ts | 18 +- apps/website/src/content/pages/terms.ts | 6 +- apps/website/src/content/pages/trust.ts | 84 +++++ apps/website/src/layouts/BaseLayout.astro | 1 + apps/website/src/lib/seo.ts | 8 +- apps/website/src/lib/site.ts | 302 +++++++++++++++--- apps/website/src/pages/changelog.astro | 61 ++++ apps/website/src/pages/contact.astro | 13 +- apps/website/src/pages/imprint.astro | 31 ++ apps/website/src/pages/index.astro | 16 +- apps/website/src/pages/integrations.astro | 8 +- apps/website/src/pages/legal.astro | 42 ++- apps/website/src/pages/privacy.astro | 4 +- apps/website/src/pages/product.astro | 14 +- apps/website/src/pages/security-trust.astro | 58 +--- apps/website/src/pages/sitemap.xml.ts | 4 +- apps/website/src/pages/solutions.astro | 16 +- apps/website/src/pages/terms.astro | 4 +- apps/website/src/pages/trust.astro | 50 +++ apps/website/src/types/site.ts | 32 +- .../tests/smoke/changelog-core-ia.spec.ts | 40 +++ .../website/tests/smoke/contact-legal.spec.ts | 31 +- apps/website/tests/smoke/home-product.spec.ts | 11 +- apps/website/tests/smoke/smoke-helpers.ts | 33 +- .../solutions-trust-integrations.spec.ts | 26 +- .../visual-foundation-guardrails.spec.ts | 6 +- .../checklists/requirements.md | 35 ++ .../contracts/public-site-ia.openapi.yaml | 257 +++++++++++++++ specs/215-website-core-pages/data-model.md | 163 ++++++++++ specs/215-website-core-pages/plan.md | 220 +++++++++++++ specs/215-website-core-pages/quickstart.md | 89 ++++++ specs/215-website-core-pages/research.md | 60 ++++ specs/215-website-core-pages/spec.md | 203 ++++++++++++ specs/215-website-core-pages/tasks.md | 205 ++++++++++++ 48 files changed, 2165 insertions(+), 335 deletions(-) create mode 100644 apps/website/src/content/changelog/2026-04-19-initial-core-pages.md create mode 100644 apps/website/src/content/pages/changelog.ts create mode 100644 apps/website/src/content/pages/imprint.ts create mode 100644 apps/website/src/content/pages/trust.ts create mode 100644 apps/website/src/pages/changelog.astro create mode 100644 apps/website/src/pages/imprint.astro create mode 100644 apps/website/src/pages/trust.astro create mode 100644 apps/website/tests/smoke/changelog-core-ia.spec.ts create mode 100644 specs/215-website-core-pages/checklists/requirements.md create mode 100644 specs/215-website-core-pages/contracts/public-site-ia.openapi.yaml create mode 100644 specs/215-website-core-pages/data-model.md create mode 100644 specs/215-website-core-pages/plan.md create mode 100644 specs/215-website-core-pages/quickstart.md create mode 100644 specs/215-website-core-pages/research.md create mode 100644 specs/215-website-core-pages/spec.md create mode 100644 specs/215-website-core-pages/tasks.md diff --git a/.github/agents/copilot-instructions.md b/.github/agents/copilot-instructions.md index 1e3674f0..2d34f6d9 100644 --- a/.github/agents/copilot-instructions.md +++ b/.github/agents/copilot-instructions.md @@ -212,6 +212,8 @@ ## Active Technologies - Static filesystem content, styles, assets, and content collections under `apps/website/src` and `apps/website/public`; no database (214-website-visual-foundation) - Markdown governance artifacts, JSON Schema plus logical OpenAPI planning contracts, and Bash-backed SpecKit scripts inside a PHP 8.4.15 / Laravel 12 / Filament v5 / Livewire v4 repository + `.specify/memory/constitution.md`, `.specify/templates/spec-template.md`, `.specify/templates/plan-template.md`, `.specify/templates/tasks-template.md`, `.specify/templates/checklist-template.md`, `.specify/README.md`, `docs/ui/operator-ux-surface-standards.md`, and Specs 196 through 200 (201-enforcement-review-guardrails) - Repository-owned markdown and contract artifacts under `.specify/` and `/Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/201-enforcement-review-guardrails/`; no product database persistence (201-enforcement-review-guardrails) +- Astro 6.0.0 templates + TypeScript 5.9 stric + Astro 6, Tailwind CSS v4 via `@tailwindcss/vite`, Astro content collections, local Astro layout/primitive/content helpers, Playwright smoke tests (215-website-core-pages) +- Static filesystem pages, content modules, and Astro content collections under `apps/website/src` and `apps/website/public`; no database (215-website-core-pages) - PHP 8.4.15 (feat/005-bulk-operations) @@ -246,9 +248,8 @@ ## Code Style PHP 8.4.15: Follow standard conventions ## Recent Changes +- 215-website-core-pages: Added Astro 6.0.0 templates + TypeScript 5.9 stric + Astro 6, Tailwind CSS v4 via `@tailwindcss/vite`, Astro content collections, local Astro layout/primitive/content helpers, Playwright smoke tests - 214-website-visual-foundation: Added Astro 6.0.0 templates + TypeScript 5.9 strict + Astro 6, Tailwind CSS v4 via `@tailwindcss/vite`, Astro content collections, local Astro component primitives, Playwright browser smoke tests - 201-enforcement-review-guardrails: Added Markdown governance artifacts, JSON Schema plus logical OpenAPI planning contracts, and Bash-backed SpecKit scripts inside a PHP 8.4.15 / Laravel 12 / Filament v5 / Livewire v4 repository + `.specify/memory/constitution.md`, `.specify/templates/spec-template.md`, `.specify/templates/plan-template.md`, `.specify/templates/tasks-template.md`, `.specify/templates/checklist-template.md`, `.specify/README.md`, `docs/ui/operator-ux-surface-standards.md`, and Specs 196 through 200 -- 213-website-foundation-v0: Added Astro 6.0.0 templates + TypeScript 5.x (explicit setup in `apps/website`) + Astro 6, Tailwind CSS v4, custom Astro component primitives (shadcn-inspired), lightweight Playwright browser smoke tests -- 200-filament-surface-rules: Added Markdown governance artifacts in a PHP 8.4.15 / Laravel 12 / Filament v5 / Livewire v4 repository + `.specify/memory/constitution.md`, `docs/ui/operator-ux-surface-standards.md`, adjacent Specs 196 through 199, existing UI rule IDs `UI-SURF-001`, `ACTSURF-001`, `UI-HARD-001`, `UI-EX-001`, `UI-FIL-001`, `DECIDE-001`, and `UX-001` diff --git a/apps/website/src/components/layout/Footer.astro b/apps/website/src/components/layout/Footer.astro index 28835b21..2ca0f1cc 100644 --- a/apps/website/src/components/layout/Footer.astro +++ b/apps/website/src/components/layout/Footer.astro @@ -1,7 +1,7 @@ --- import PrimaryCTA from '@/components/content/PrimaryCTA.astro'; import Container from '@/components/primitives/Container.astro'; -import { footerNavigationGroups, getFooterLead, siteMetadata } from '@/lib/site'; +import { getFooterLead, getFooterNavigationGroups, siteMetadata } from '@/lib/site'; interface Props { currentPath: string; @@ -10,6 +10,7 @@ interface Props { const { currentPath: _currentPath } = Astro.props; const currentYear = new Date().getFullYear(); const footerLead = getFooterLead(_currentPath); +const footerNavigationGroups = await getFooterNavigationGroups(); ---