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
207 lines
11 KiB
Markdown
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. |