# Implementation Plan: MSP & Mittelstand Use-Case Pages **Branch**: `407-msp-mittelstand-use-case-pages` | **Date**: 2026-05-27 | **Spec**: [spec.md](spec.md) **Input**: Feature specification from `/specs/407-msp-mittelstand-use-case-pages/spec.md` ## Summary Deliver two buyer-specific public pages in `apps/website` for MSP and Mittelstand/Enterprise IT audiences, integrate them into existing homepage/navigation/footer discovery, and enforce strict metadata/copy guardrails against unsupported claims. The implementation remains website-only and reuses the current Astro page architecture plus central localized copy in `apps/website/src/data_files/site-copy.ts`. ## Technical Context **Language/Version**: TypeScript 6.0.3 and Astro 6.3.3 content/runtime files **Primary Dependencies**: Astro, Playwright, Tailwind CSS v4 (`@tailwindcss/vite`), Starlight docs stack **Storage**: N/A (static public website content only) **Testing**: Playwright smoke tests in `apps/website/tests/smoke` plus `astro check` during build **Validation Lanes**: browser, confidence **Target Platform**: Static website build and browser-rendered public routes **Project Type**: Web application (Astro static site) **Performance Goals**: No measurable runtime change target beyond maintaining current public page readability and route load behavior **Constraints**: Preserve root workspace contracts (`package.json` scripts, `WEBSITE_PORT`, `apps/*` workspace), no `apps/platform` changes, no fake claims/proof artifacts **Scale/Scope**: Two new DE routes plus EN counterparts, homepage integration, nav/footer updates, smoke-test updates ## UI / Surface Guardrail Plan - **Guardrail scope**: no operator-facing surface change - **Native vs custom classification summary**: N/A - **Shared-family relevance**: public website copy and navigation families only - **State layers in scope**: shell and page - **Audience modes in scope**: customer/read-only - **Decision/diagnostic/raw hierarchy plan**: decision-first on public marketing pages; no diagnostics/raw layer in scope - **Raw/support gating plan**: N/A - **One-primary-action / duplicate-truth control**: each use-case page keeps one primary CTA flow (`/contact`) and one supporting product CTA (`/platform`) to avoid action sprawl - **Handling modes by drift class or surface**: report-only - **Repository-signal treatment**: review-mandatory for public claim language - **Special surface test profiles**: N/A - **Required tests or manual smoke**: manual-smoke and browser smoke - **Exception path and spread control**: none - **Active feature PR close-out entry**: Smoke Coverage ## Shared Pattern & System Fit - **Cross-cutting feature marker**: yes - **Systems touched**: `site-copy` locale dictionaries, homepage composition, navigation/footer rendering, public route smoke inventory, metadata assertions - **Shared abstractions reused**: localized copy object in `apps/website/src/data_files/site-copy.ts`, nav resolver in `apps/website/src/utils/navigation.ts`, smoke helper guardrail utilities in `apps/website/tests/smoke/smoke-helpers.ts` - **New abstraction introduced? why?**: none - **Why the existing abstraction was sufficient or insufficient**: existing copy-first Astro structure already centralizes public text and links; this feature extends those structures without introducing a new page framework - **Bounded deviation / spread control**: none ## OperationRun UX Impact - **Touches OperationRun start/completion/link UX?**: no - **Central contract reused**: N/A - **Delegated UX behaviors**: N/A - **Surface-owned behavior kept local**: none - **Queued DB-notification policy**: N/A - **Terminal notification path**: N/A - **Exception path**: none ## Provider Boundary & Portability Fit - **Shared provider/platform boundary touched?**: yes - **Provider-owned seams**: Microsoft 365-first and Intune-first-domain public wording - **Platform-core seams**: public governance vocabulary, claim boundaries, trust-teaser language - **Neutral platform terms / contracts preserved**: policy drift, evidence, review packs, accepted risks, audit trail, controlled recovery context - **Retained provider-specific semantics and why**: Microsoft 365 and Intune remain explicit to reflect current-release product truth and avoid generic ambiguity - **Bounded extraction or follow-up path**: document-in-feature only; no follow-up spec required for this scope ## Constitution Check GATE status: Pass for website-only scope. - Inventory-first: N/A (no inventory runtime changes) - Read/write separation: Pass (no write behavior) - Graph contract path: N/A (no Graph/API runtime) - Deterministic capabilities: N/A - RBAC-UX and tenant/workspace isolation: N/A (public unauthenticated pages) - Run observability / OperationRun UX: N/A - TEST-GOV-001: Pass (browser lane explicit, narrow smoke coverage, no helper cost expansion planned) - PROP-001 / ABSTR-001 / PERSIST-001 / STATE-001 / BLOAT-001: Pass (no new persistence, abstractions, enums, or semantic frameworks) - XCUT-001: Pass (reuse existing site copy/nav/test helper patterns) - PROV-001: Pass (bounded provider wording, no platform-core runtime coupling) - DECIDE-AUD-001: N/A for operator/status surfaces; public marketing hierarchy is still explicitly simplified ## Test Governance Check - **Test purpose / classification by changed surface**: Browser - **Affected validation lanes**: browser, confidence - **Why this lane mix is the narrowest sufficient proof**: changes are public route/content/navigation/metadata concerns proven by route smoke and static-claim checks - **Narrowest proving command(s)**: - `pnpm --filter @tenantatlas/website build` - `pnpm --filter @tenantatlas/website test tests/smoke/public-routes.spec.ts` - `pnpm --filter @tenantatlas/website test tests/smoke/interaction.spec.ts` - **Fixture / helper / factory / seed / context cost risks**: none - **Expensive defaults or shared helper growth introduced?**: no - **Heavy-family additions, promotions, or visibility changes**: none - **Surface-class relief / special coverage rule**: public website browser smoke only - **Closing validation and reviewer handoff**: reviewers verify route reachability, no placeholder links, no banned claims, route-family consistency, and that changed files remain inside `apps/website` plus feature spec artifacts - **Budget / baseline / trend follow-up**: none - **Review-stop questions**: lane fit, hidden helper cost, overbroad browser assertions, claim-boundary completeness - **Escalation path**: document-in-feature - **Active feature PR close-out entry**: Smoke Coverage - **Why no dedicated follow-up spec is needed**: this is bounded copy/routing work inside existing public-site structures ## Project Structure ### Documentation (this feature) ```text specs/407-msp-mittelstand-use-case-pages/ ├── plan.md ├── spec.md ├── tasks.md └── checklists/ └── requirements.md ``` ### Source Code (repository root) ```text apps/website/ ├── src/ │ ├── pages/ │ │ ├── index.astro │ │ ├── en/index.astro │ │ ├── use-cases/msp.astro │ │ ├── use-cases/mittelstand.astro │ │ ├── en/use-cases/msp.astro │ │ └── en/use-cases/mittelstand.astro │ ├── components/pages/HomePage.astro │ ├── components/pages/PlatformPage.astro │ ├── data_files/site-copy.ts │ ├── utils/navigation.ts │ └── i18n.ts └── tests/smoke/ ├── public-routes.spec.ts ├── interaction.spec.ts └── smoke-helpers.ts ``` **Structure Decision**: Web app/Astro structure under `apps/website`; no backend or platform-runtime extension. ## Route Family Decision Selected route family: `/use-cases/...` Chosen routes: - `/use-cases/msp` - `/use-cases/mittelstand` - `/en/use-cases/msp` - `/en/use-cases/mittelstand` Reasoning: - Matches the feature intent explicitly. - Fits existing page-based Astro routing model. - Keeps fallback route complexity unnecessary for this release. Fallback route families (`/solutions/...`, `/einsatzbereiche/...`) are not used for this implementation. ## Platform Teaser Decision (FR-030) Decision: include a compact platform-page teaser. Implementation rule: - Teaser contains a short audience split plus links to both use-case routes. - Teaser stays compact and avoids duplicating the full use-case page copy. ## Static Claim Scan Commands - `rg -n -i -e 'one[- ]click restore|immutable backups?|real[- ]time drift detection|court[- ]proof evidence|guaranteed compliance|guaranteed recovery|automatic restore|autonomous remediation' apps/website/src apps/website/public` - `rg -n -i -e 'one[- ]click restore|immutable backups?|real[- ]time drift detection|court[- ]proof evidence|guaranteed compliance|guaranteed recovery|automatic restore|autonomous remediation' apps/website/dist` - `git diff --name-only -- apps/website/public apps/website/src/images` ## Validation Results - `corepack pnpm build` — pass. - `WEBSITE_PORT=4322 corepack pnpm test tests/smoke/public-routes.spec.ts tests/smoke/interaction.spec.ts` — pass (`324 passed`, `6 skipped`). - `WEBSITE_PORT=4322 corepack pnpm --filter @tenantatlas/website test` — pass (`324 passed`, `6 skipped`). - `corepack pnpm --filter @tenantatlas/website format:check` — fails on nine pre-existing unrelated website files: `src/components/sections/landing/HeroSection.astro`, `src/components/sections/navbar&footer/FooterSection.astro`, `src/components/ui/blocks/IconBlock.astro`, `src/components/ui/blocks/LeftSection.astro`, `src/components/ui/blocks/MainSection.astro`, `src/components/ui/blocks/RightSection.astro`, `src/components/ui/blocks/StatsBig.astro`, `src/components/ui/blocks/StatsSmall.astro`, and `src/components/ui/forms/RegisterModal.astro`. - `git status --short` confirms the implementation scope stayed out of `apps/platform/**`. - `git diff --name-only -- apps/website/public apps/website/src/images` returned no changed files. ## Claim Scan Outcome - No forbidden-term matches were found in `apps/website/src`, `apps/website/public`, or `apps/website/dist`. - No intentional scan-hit rationale is needed for this feature. ## Comprehension Check Notes - `SC-001` MSP comprehension check — pass. The hero, pain, outcomes, workflow, and PSA-boundary sections make repeatable governance reviews, evidence, follow-up, and service packaging visible within the first reading pass. - `SC-002` Enterprise IT comprehension check — pass. The hero, stakeholder, workflow, and differentiation sections make drift visibility, traceable changes, evidence, and controlled recovery context visible within the first reading pass. ## Residual Follow-ups - Repository-wide Prettier debt remains in nine untouched website files. This feature left those files unchanged. ## Complexity Tracking No constitutional violations and no bloat-triggering additions are planned for this feature. ## Proportionality Review N/A for this implementation plan. The feature introduces no new enum/status family, DTO/presenter/envelope layer, persisted entity/table/artifact, interface/contract/registry/resolver, taxonomy system, or cross-domain UI framework.