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

11 KiB

Implementation Plan: MSP & Mittelstand Use-Case Pages

Branch: 407-msp-mittelstand-use-case-pages | Date: 2026-05-27 | Spec: 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)

specs/407-msp-mittelstand-use-case-pages/
├── plan.md
├── spec.md
├── tasks.md
└── checklists/
    └── requirements.md

Source Code (repository root)

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.