openapi: 3.1.0
info:
  title: TenantAtlas Public Website IA Contract
  version: 0.1.0
  summary: Canonical route and navigation contract for the initial `apps/website` core pages.
  description: >-
    This contract defines the required public HTML routes, navigation limits,
    optional-surface publication rules, and compatibility-path expectations for
    Spec 215. The feature does not add backend APIs; the contract is about the
    public website route and discoverability model.
servers:
  - url: http://localhost:{port}
    description: Local Astro development or preview server
    variables:
      port:
        default: "4321"
tags:
  - name: Core Public Pages
    description: Canonical public HTML routes required by the initial website IA
  - name: Secondary Public Pages
    description: Retained supporting routes that remain published without becoming part of the initial core IA
  - name: Compatibility Routes
    description: Temporary or secondary routes that preserve continuity during IA cleanup
x-information-architecture:
  scope: apps/website
  requiredCoreRoutes:
    - /
    - /product
    - /trust
    - /changelog
    - /contact
    - /privacy
    - /imprint
  optionalRoutesWhenSubstantive:
    - /resources
  secondaryRoutes:
    - /legal
    - /terms
    - /solutions
    - /integrations
  deferredRoutes:
    - /pricing
    - /docs
    - /solutions/*
    - /customers
    - /compare
    - /careers
    - /status
  primaryNavigation:
    maxInformationalItems: 5
    required:
      - /product
      - /trust
      - /changelog
      - /contact
    optionalWhenSubstantive:
      - /resources
    forbiddenUntilMature:
      - /pricing
      - /docs
  primaryCta:
    canonicalRoute: /contact
    allowedLabels:
      - Request demo
      - Contact
      - Request a working session
  footerGroups:
    Product:
      - /product
      - /changelog
    TrustLegal:
      - /trust
      - /privacy
      - /imprint
      - /terms
    Contact:
      - /contact
    Content:
      - /resources
  publicationRules:
    trustTopLevelVisible: true
    brandRoutesHome: true
    placeholderRoutesForbidden: true
    unpublishedCollectionsRemainHidden:
      - articles
    buyerOutcomeExplanationRequiredOn:
      - /
      - /product
  compatibility:
    legacyCanonicalPairs:
      - legacy: /security-trust
        canonical: /trust
        strategy: redirect
paths:
  /:
    get:
      tags: [Core Public Pages]
      operationId: getHomePage
      summary: Home page
      description: Entry surface that frames the product, routes visitors toward Product and Trust, and exposes the primary next step.
      responses:
        "200":
          description: Home page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /product:
    get:
      tags: [Core Public Pages]
      operationId: getProductPage
      summary: Product page
      description: Canonical product-understanding surface for capabilities, positioning, and buyer outcomes.
      responses:
        "200":
          description: Product page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /trust:
    get:
      tags: [Core Public Pages]
      operationId: getTrustPage
      summary: Trust page
      description: Canonical trust surface for security posture, isolation, operational discipline, and bounded public claims.
      responses:
        "200":
          description: Trust page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /changelog:
    get:
      tags: [Core Public Pages]
      operationId: getChangelogPage
      summary: Changelog page
      description: Dated product-progress surface that shows visible public development without acting as a blog substitute.
      responses:
        "200":
          description: Changelog page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /contact:
    get:
      tags: [Core Public Pages]
      operationId: getContactPage
      summary: Contact page
      description: Primary public conversion surface for the next evaluation step. Any later demo route is secondary unless a future spec changes the primary conversion path.
      responses:
        "200":
          description: Contact page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /legal:
    get:
      tags: [Secondary Public Pages]
      operationId: getLegalIndexPage
      summary: Secondary legal index page
      description: Supporting legal overview that may remain published without being part of the required initial core.
      responses:
        "200":
          description: Legal index page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /privacy:
    get:
      tags: [Core Public Pages]
      operationId: getPrivacyPage
      summary: Privacy page
      description: Canonical privacy disclosure required by the public legal baseline.
      responses:
        "200":
          description: Privacy page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /imprint:
    get:
      tags: [Core Public Pages]
      operationId: getImprintPage
      summary: Imprint page
      description: Canonical public legal notice required by the initial website legal baseline.
      responses:
        "200":
          description: Imprint page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /terms:
    get:
      tags: [Secondary Public Pages]
      operationId: getTermsPage
      summary: Secondary terms page
      description: Supporting legal disclosure that may remain published without becoming part of the required initial core.
      responses:
        "200":
          description: Terms page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /solutions:
    get:
      tags: [Secondary Public Pages]
      operationId: getSolutionsSupportPage
      summary: Secondary solutions support page
      description: Supporting outcome or audience-fit page that may remain published without top-level core prominence.
      responses:
        "200":
          description: Solutions page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /integrations:
    get:
      tags: [Secondary Public Pages]
      operationId: getIntegrationsSupportPage
      summary: Secondary integrations support page
      description: Supporting ecosystem-fit page that may remain published without top-level core prominence.
      responses:
        "200":
          description: Integrations page HTML
          content:
            text/html:
              schema:
                $ref: "#/components/schemas/HtmlDocument"
  /security-trust:
    get:
      tags: [Compatibility Routes]
      operationId: redirectLegacySecurityTrust
      summary: Legacy compatibility path for Trust
      description: Temporary compatibility route. The canonical public trust path is `/trust`.
      responses:
        "308":
          description: Permanent redirect to `/trust`
          headers:
            Location:
              description: Canonical Trust route
              schema:
                type: string
                const: /trust
components:
  schemas:
    HtmlDocument:
      type: string
      description: Server-rendered static HTML document