# Phase 0 Research: `apps/website` Public Website Launch Readiness ## Decision: Keep the Spec 402 Astro/ScrewFast-derived foundation **Rationale**: The active website is a standalone Astro app at `/Users/ahmeddarrazi/Documents/projects/wt-website/apps/website` with Starlight docs, sitemap generation, Tailwind v4, Preline, Lenis, and Playwright smoke tests already in place. Spec 403 is a launch-readiness pass, not another rebuild. **Alternatives considered**: - Rebuild the website foundation again: rejected by scope. - Introduce a new design system or app shell: rejected because Spec 402 already selected the substrate. - Move launch checks into the Laravel platform: rejected because `apps/platform` is out of scope. ## Decision: Treat route, CTA, metadata, and sitemap behavior as the public contract **Rationale**: This feature has no API endpoints or product runtime entities. Public launch behavior is expressed through static pages, redirect aliases, generated metadata, navigation/footer links, docs exposure, `robots.txt`, and sitemap output. **Alternatives considered**: - Generate OpenAPI or GraphQL contracts: rejected because the public website exposes no API for this feature. - Model route readiness as product runtime state: rejected because it would create unnecessary taxonomy/persistence. ## Decision: Use conservative public copy and proof-safe claim checks **Rationale**: The spec assumes no verified customer logos, testimonials, certifications, Microsoft endorsements, uptime guarantees, compliance guarantees, recovery guarantees, self-serve billing, or account provisioning workflow. Copy and metadata must therefore stay contact/demo-oriented and avoid unsupported proof claims. **Alternatives considered**: - Use aspirational enterprise proof language: rejected because it creates public trust risk. - Keep placeholder social proof from the substrate: rejected unless hidden, removed, or rewritten as neutral content. ## Decision: Keep static product previews illustrative **Rationale**: Product-like preview content can help visitors understand Tenantial, but it must not imply live Microsoft tenant data, a running Graph integration on the website, or shared product status taxonomy. **Alternatives considered**: - Present previews as live tenant output: rejected because the public website has no authenticated tenant runtime. - Remove all previews: rejected because static/demo previews are useful and allowed when clearly framed. ## Decision: Validate with website build, Playwright smoke, manual browser review, and scope checks **Rationale**: The current package scripts support `corepack pnpm build:website` and `WEBSITE_PORT=4321 corepack pnpm --filter @tenantatlas/website test:smoke`. Playwright is already configured for desktop and mobile projects and starts the Astro preview server. These lanes prove the public static website without pulling in Laravel runtime cost. **Alternatives considered**: - Run Laravel/Pest/Filament tests: rejected because this feature does not touch `apps/platform`. - Rely only on static text review: rejected because launch readiness requires browser/mobile/light/dark/overflow/CTA validation. ## Decision: Use a website-local launch-readiness note as the implementation handoff artifact **Rationale**: FR-034 requires a launch-readiness note documenting route exposure, CTA assumptions, trust/pricing claim posture, sitemap behavior, and deployment expectations. This is a website release artifact, not product persistence. **Alternatives considered**: - Store launch readiness in database tables: rejected as out of scope and unnecessary. - Skip the note and rely on PR comments: rejected because reviewers need a durable handoff artifact. ## Current Source Observations - Rendered smoke routes currently include `/`, `/platform`, `/pricing`, `/contact`, `/trust`, `/legal`, `/privacy`, `/terms`, `/imprint`, and `/welcome-to-docs/`. - Public Starlight docs routes also include `/guides/intro/`, `/guides/getting-started/`, `/guides/first-project-checklist/`, and `/platform/evidence-review/`; current smoke coverage only lists the docs root. - Redirect smoke routes currently include `/product`, `/products`, `/services`, `/blog`, and `/insights`, all resolving to `/platform`. - `/product`, `/products`, and `/services` currently use 301 redirects; `/blog` and `/insights` currently use 302 redirects. The launch note should confirm this split is intentional. - `astro.config.mjs` filters redirect-only paths out of the generated sitemap. - `robots.txt` points to the generated sitemap index through `import.meta.env.SITE`. - `apps/website/src/utils/navigation.ts` still contains `socialLinks` with `#` placeholder targets; implementation should remove, hide, or replace public placeholders if they are emitted. - Existing smoke helpers already check forbidden public terms and horizontal overflow; Spec 403 may need broader CTA, metadata, docs, sitemap, and keyboard coverage. - Main-layout canonical URLs are page-specific, but current social metadata uses the site root for `og:url` and `twitter:url` on non-doc pages; launch implementation should make route metadata consistent. - Current social image metadata has launch-review risk: main-layout image type is hardcoded as PNG while generated social output may be WebP, and Starlight docs metadata references `https://tenantial.com/social.webp` without an obvious matching public file. - `/imprint` contains placeholder production details that must be replaced or made explicitly conservative before launch. - The contact page includes a static form and `Prepare Email` submit button without a backend workflow; copy/behavior must not imply a guaranteed submission workflow. - The footer includes an email field and `Subscribe` link to `/contact`; this should be reframed or removed to avoid implying a newsletter workflow.