TenantAtlas/specs/213-website-foundation-v0/plan.md
ahmido 2d552c7ae8
Some checks failed
Main Confidence / confidence (push) Failing after 42s
feat: initial website foundation and v0 product site (#249)
## Summary
- establish the initial Astro website foundation for `apps/website` with explicit TypeScript, Tailwind CSS v4, and reusable layout/content primitives
- ship the v0 public route set for home, product, solutions, security & trust, integrations, contact, legal, privacy, and terms
- add SEO/discovery basics, Playwright browser smoke coverage, and the full Spec 213 planning bundle under `specs/213-website-foundation-v0`
- extend ignore rules for website test artifacts and refresh Copilot agent context for the new website stack

## Validation
- `corepack pnpm build:website`
- `cd apps/website && corepack pnpm exec playwright test`

## Notes
- branch: `213-website-foundation-v0`
- commit: `020d416d0d8af4d16a981ff4f4f6d90153b9c603`

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #249
2026-04-18 20:56:47 +00:00

14 KiB
Raw Blame History

Implementation Plan: Initial Website Foundation & v0 Product Site

Branch: 213-website-foundation-v0 | Date: 2026-04-18 | Spec: specs/213-website-foundation-v0/spec.md Input: Feature specification from specs/213-website-foundation-v0/spec.md

Note: This template is filled in by the /speckit.plan command. See .specify/scripts/ for helper scripts.

Summary

  • Keep apps/website as a fully static Astro 6 app and preserve its runtime separation from apps/platform.
  • Introduce explicit TypeScript and Tailwind CSS v4, but implement the UI layer as custom shadcn-inspired Astro primitives instead of adding React plus official shadcn/ui.
  • Ship a reusable public-site foundation with global layout, navigation, footer, seven core surfaces plus Privacy and Terms, SEO basics, and a lightweight browser-smoke validation path.

Technical Context

Language/Version: Astro 6.0.0 templates + TypeScript 5.x (explicit setup in apps/website)
Primary Dependencies: Astro 6, Tailwind CSS v4, custom Astro component primitives (shadcn-inspired), lightweight Playwright browser smoke tests
Storage: Static filesystem content, styles, and assets under apps/website/src and apps/website/public; no database
Testing: Root build proof via corepack pnpm build:website plus Playwright browser smoke coverage for public routes
Validation Lanes: fast-feedback Target Platform: Static public website for modern desktop/mobile browsers Project Type: Web (standalone Astro app in a pnpm monorepo)
Performance Goals: Static HTML for all core routes, zero required framework hydration for reading/navigation flows, minimal client JS reserved for purposeful interactions only
Constraints: Preserve @tenantatlas/website, WEBSITE_PORT, root workspace scripts, and apps/* contracts; avoid platform auth/session/API coupling; ship one polished primary theme; publish only substantiated trust and integration claims
Scale/Scope: 7 core public surfaces plus Privacy and Terms as published legal routes, shared layout/content/conversion/trust primitives, and a future-ready structure for blog/docs/changelog without live rollout in v0

Constitution Check

GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.

  • Inventory-first / Graph contract / deterministic capabilities / RBAC-UX / Filament surface rules: N/A for this feature because all implementation stays inside apps/website and introduces no /admin, /admin/t/{tenant}/..., or /system runtime changes.
  • Read/write separation: Pass. The feature is a public, static product site. Contact / Demo remains a static conversion surface in v0 and does not introduce a product-app write workflow.
  • Workspace isolation: Pass. The website remains runtime-independent from apps/platform; no shared auth, session, tenant data, or implicit API dependency is introduced.
  • Data minimization: Pass. Only public content, styles, metadata, and assets are authored; no tenant payloads, credentials, or operational records are stored.
  • Test governance (TEST-GOV-001): Pass. Validation stays in fast-feedback with static build proof and lightweight browser smoke coverage; no DB/auth/provider fixtures or heavy-suite defaults are added.
  • Proportionality / no premature abstraction: Pass. The plan adopts a small Astro/Tailwind primitive set instead of React + official shadcn/ui, a CMS, or a broader front-end framework.
  • Persisted truth / new state: Pass. No database entities, queued work, run lifecycle, or new status families are introduced.
  • UI semantics / few layers: Pass. Shared layout/content/conversion/trust primitives map directly to the website narrative without a presentation meta-framework.

Status: No constitution violations for this feature. The website remains public, static, repo-owned, and separate from platform runtime concerns.

Test Governance Check

Fill for any runtime-changing or test-affecting feature. Docs-only or template-only work may state concise N/A or none.

  • Test purpose / classification by changed surface: Browser smoke coverage for public routes, navigation reachability, and layout stability; static build proof for artifact generation
  • Affected validation lanes: fast-feedback
  • Why this lane mix is the narrowest sufficient proof: The feature changes only a static Astro site. Build proof alone verifies output generation, while a tiny browser smoke suite is the smallest layer that can catch broken routes, broken navigation, and browser-visible regressions without introducing backend or heavy end-to-end cost.
  • Narrowest proving command(s): corepack pnpm build:website and cd apps/website && corepack pnpm exec playwright test
  • Fixture / helper / factory / seed / context cost risks: none; public pages do not require database, auth, provider, tenant, or workspace setup
  • Expensive defaults or shared helper growth introduced?: no; any Playwright setup stays local to apps/website
  • Heavy-family additions, promotions, or visibility changes: none
  • Closing validation and reviewer handoff: Re-run the website build and smoke suite after page or layout changes. Reviewers should verify that core routes load, primary/footer navigation has no dead ends, the site stays mobile-usable, and no framework hydration is introduced without explicit justification.
  • Budget / baseline / trend follow-up: none beyond tracking the small runtime cost of the website smoke suite inside this feature
  • Review-stop questions: Does the proof stay in fast-feedback? Did any change introduce backend fixtures or hidden framework coupling? Is the smoke suite still small and route-focused?
  • Escalation path: document-in-feature
  • Why no dedicated follow-up spec is needed: The validation surface is tightly bounded to this features public pages. A follow-up spec is only needed if the website later grows interactive workflows, broader content tooling, or cross-app coupling.

Project Structure

Documentation (this feature)

specs/213-website-foundation-v0/
├── plan.md              # This file (/speckit.plan command output)
├── research.md          # Phase 0 output (/speckit.plan command)
├── data-model.md        # Phase 1 output (/speckit.plan command)
├── quickstart.md        # Phase 1 output (/speckit.plan command)
├── contracts/           # Phase 1 output (/speckit.plan command)
└── tasks.md             # Phase 2 output (/speckit.tasks command - NOT created by /speckit.plan)

Source Code (repository root)

apps/website/
├── astro.config.mjs
├── package.json
├── public/
├── src/
│   ├── components/
│   │   ├── layout/              # Navbar, Footer, page shell wrappers
│   │   ├── primitives/          # Container, Section, Button, Badge, Card, Input, Textarea
│   │   ├── sections/            # PageHero, FeatureGrid, TrustGrid, CTASection, LogoStrip
│   │   └── content/             # Audience rows, evidence callouts, legal prose helpers
│   ├── layouts/
│   │   └── BaseLayout.astro
│   ├── lib/                     # Navigation, SEO, metadata, content helpers
│   ├── pages/
│   │   ├── index.astro
│   │   ├── product.astro
│   │   ├── solutions.astro
│   │   ├── security-trust.astro
│   │   ├── integrations.astro
│   │   ├── contact.astro
│   │   ├── legal.astro
│   │   ├── privacy.astro
│   │   ├── sitemap.xml.ts
│   │   └── terms.astro
│   ├── styles/
│   │   ├── global.css
│   │   └── tokens.css           # Tailwind v4 theme tokens / bridge layer
│   ├── content/                 # Future-ready content collections for docs/blog/changelog
│   └── types/                   # Content and component prop types
└── tests/
    └── smoke/                   # Lightweight Playwright browser smoke coverage

Structure Decision: Keep the website fully isolated in apps/website. Use Astro pages plus a small internal design-system layer (layout, primitives, sections, content) and local browser smoke tests. Prepare a future src/content/ and helper layer for later docs/blog/changelog expansion without shipping those sections in v0.

Complexity Tracking

Fill when Constitution Check has violations that must be justified OR when BLOAT-001 is triggered by new persistence, abstractions, states, or semantic frameworks.

None.

Proportionality Review

Fill when the feature introduces a new enum/status family, DTO/presenter/envelope, persisted entity/table/artifact, interface/contract/registry/resolver, taxonomy/classification system, or cross-domain UI framework.

  • Current operator problem: Prospects and internal teams lack a credible public site that explains the product, trust model, and contact path without depending on the platform UI or ad hoc landing-page copy.
  • Existing structure is insufficient because: The current Astro app only contains a single placeholder-style page, handwritten global CSS, and no reusable page system for navigation, legal pages, audience storytelling, or future content expansion.
  • Narrowest correct implementation: A small Astro-native design-system layer backed by Tailwind CSS v4 and explicit TypeScript, with no React requirement and no CMS or runtime platform coupling.
  • Ownership cost created: Ongoing maintenance of public copy, shared website primitives, Tailwind tokens, and a tiny local browser smoke suite.
  • Alternative intentionally rejected: React + official shadcn/ui was rejected because it adds unnecessary client framework weight and maintenance cost for a static trust-first site; a single-page copy refresh was rejected because it would not establish a reusable v0 foundation.
  • Release truth: Current-release truth

Phase 0 — Outline & Research (complete)

  • Output: specs/213-website-foundation-v0/research.md
  • Key decisions captured:
    • Keep Astro 6 static and runtime-independent from apps/platform.
    • Add explicit TypeScript and Tailwind CSS v4 using the CSS-first Tailwind v4 model.
    • Use custom shadcn-inspired Astro primitives instead of React + official shadcn/ui.
    • Keep the Contact / Demo surface static in v0 and avoid introducing an Astro API/contact backend in this feature.
    • Validate with root build proof plus a small Playwright browser smoke suite.

Phase 1 — Design & Contracts (complete)

Data model

  • Output: specs/213-website-foundation-v0/data-model.md
  • No database schema changes are required; the model is file- and route-based.

Public site contracts

  • Output: specs/213-website-foundation-v0/contracts/public-site.openapi.yaml
  • Contract captures the required public GET routes and their HTML response expectations.

Quickstart

  • Output: specs/213-website-foundation-v0/quickstart.md
  • Quickstart covers local development, build validation, and browser smoke execution.

Agent context update

  • Completed via .specify/scripts/bash/update-agent-context.sh copilot so the Copilot context reflects the website stack additions.

Constitution re-check (post-design)

  • Runtime separation remains intact: no platform auth/session/API coupling is introduced.
  • No new persisted truth, state machines, or background operations are introduced.
  • The chosen UI layer is the narrowest correct implementation for v0 and avoids premature React/framework abstraction.
  • Validation remains cheap, local, and website-specific.

Phase 2 — Implementation Plan (next)

Story 1 (P1): Foundation and shared shell

  • Add explicit TypeScript setup to apps/website and install Tailwind CSS v4 using the CSS-first configuration model.
  • Introduce site metadata, navigation, footer configuration, and shared layout primitives (Container, Section, SectionHeader, Button, Badge, Card, Input, Textarea, Navbar, Footer, PageHero).
  • Preserve the existing calm, enterprise-appropriate visual direction while shifting styling from page-local CSS toward reusable tokens and utilities.
  • Tests / validation:
    • Confirm the site still builds via corepack pnpm build:website.
    • Add browser smoke coverage for Home plus one interior route.

Story 2 (P1/P2): Core page shells and narrative system

  • Build Home, Product, Solutions, Security & Trust, Integrations, Contact, Legal, Privacy, and Terms using shared sections/ components (FeatureGrid, TrustGrid, CTASection, LogoStrip, audience-specific rows, evidence callouts).
  • Ensure each core page exposes page purpose, clear hierarchy, semantic metadata, and visible next-step CTA.
  • Keep Solutions separate from Product capabilities and keep Security & Trust limited to substantiated claims.
  • Tests / validation:
    • Extend browser smoke coverage to all published core routes.
    • Assert primary and footer navigation reachability.

Story 3 (P3): Delivery hardening and future-ready structure

  • Add SEO and discovery basics (page titles, descriptions, Open Graph baseline, robots, explicit sitemap output, canonical metadata).
  • Add a future-ready content helper layer and route organization for later docs/blog/changelog expansion without publishing those sections in v0.
  • Ensure the Legal surface carries any required jurisdiction-specific public legal notice through the Legal hub or a linked dedicated notice page before launch.
  • Keep contact handling static and repo-owned in this feature; document any later external form or scheduling integration as a follow-up decision rather than coupling it into the website foundation.
  • Tests / validation:
    • Finish Playwright smoke checks for mobile navigation, CTA reachability, and absence of dead-end routes.
    • Re-verify root workspace scripts and package contracts remain intact.