TenantAtlas/specs/407-msp-mittelstand-use-case-pages/plan.md
ahmido 94cff6ca03 feat: add MSP and internal IT use-case pages (#402)
Implements website feature branch `407-msp-mittelstand-use-case-pages` into `website-dev`.

Summary:
- add German and English MSP and internal IT use-case landing pages
- expose localized buyer-path teasers from the homepage and platform page
- extend smoke coverage for the new routes, navigation links, metadata, and conservative claim checks
- include the aligned Spec Kit artifacts under `specs/407-msp-mittelstand-use-case-pages`

Validation:
- `cd apps/website && corepack pnpm build`
- `cd apps/website && corepack pnpm test -- tests/smoke/public-routes.spec.ts tests/smoke/interaction.spec.ts`

Follow-up integration path after merge:

`website-dev` -> `dev`.

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #402
2026-05-27 22:02:42 +00:00

207 lines
11 KiB
Markdown

# 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.