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
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-copylocale 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 inapps/website/src/utils/navigation.ts, smoke helper guardrail utilities inapps/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 buildpnpm --filter @tenantatlas/website test tests/smoke/public-routes.spec.tspnpm --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/websiteplus 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/publicrg -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/distgit 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, andsrc/components/ui/forms/RegisterModal.astro.git status --shortconfirms the implementation scope stayed out ofapps/platform/**.git diff --name-only -- apps/website/public apps/website/src/imagesreturned no changed files.
Claim Scan Outcome
- No forbidden-term matches were found in
apps/website/src,apps/website/public, orapps/website/dist. - No intentional scan-hit rationale is needed for this feature.
Comprehension Check Notes
SC-001MSP 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-002Enterprise 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.