158 lines
5.3 KiB
Markdown
158 lines
5.3 KiB
Markdown
# Data Model: Initial Website Foundation & v0 Product Site
|
|
|
|
## Overview
|
|
|
|
This feature introduces no database schema. The model is file- and route-based inside `apps/website` and describes how public content, page composition, navigation, and conversion surfaces are structured.
|
|
|
|
## Entities
|
|
|
|
### Site Configuration
|
|
|
|
- **Purpose**: Global site metadata and shared shell settings used by every public page.
|
|
- **Key fields**:
|
|
- `siteName`
|
|
- `siteTagline`
|
|
- `defaultTitle`
|
|
- `defaultDescription`
|
|
- `defaultOgImage`
|
|
- `primaryNavigation`
|
|
- `footerNavigationGroups`
|
|
- `contactCta`
|
|
- **Relationships**:
|
|
- Owns many `NavigationItem` entries
|
|
- Supplies defaults to many `PublicPage` entries
|
|
- **Validation rules**:
|
|
- Must define a Home destination via brand/logo path
|
|
- Must include Product, Solutions, Security & Trust, Integrations, and Contact / Demo in primary navigation
|
|
- Must include Privacy and Terms in footer navigation
|
|
|
|
### Public Page
|
|
|
|
- **Purpose**: One published route in the v0 public website.
|
|
- **Key fields**:
|
|
- `slug`
|
|
- `title`
|
|
- `description`
|
|
- `routePath`
|
|
- `pageRole` (`home`, `product`, `solutions`, `trust`, `integrations`, `contact`, `legal`)
|
|
- `hero`
|
|
- `sections`
|
|
- `primaryCta`
|
|
- `secondaryCta`
|
|
- `seo`
|
|
- **Relationships**:
|
|
- Has one or more `NarrativeSection` entries
|
|
- May reference zero or more `AudienceNarrative` or `IntegrationEntry` entries depending on page role
|
|
- Consumes shared defaults from `SiteConfiguration`
|
|
- **Validation rules**:
|
|
- Each published page must have a unique `routePath`
|
|
- Each page must provide title, description, and at least one next-step path
|
|
- Product and Solutions must remain distinct page roles
|
|
|
|
### Narrative Section
|
|
|
|
- **Purpose**: Reusable section-level content block used to compose pages.
|
|
- **Key fields**:
|
|
- `sectionType` (`hero`, `problem-framing`, `feature-grid`, `trust-grid`, `logo-strip`, `cta`, `rich-text`, `audience-row`, `legal-prose`)
|
|
- `eyebrow`
|
|
- `headline`
|
|
- `body`
|
|
- `items`
|
|
- `themeVariant`
|
|
- **Relationships**:
|
|
- Belongs to one `PublicPage`
|
|
- May include many `SectionItem` entries through `items`
|
|
- **Validation rules**:
|
|
- Each section must support a clear narrative purpose
|
|
- Sections used on public core pages must remain semantically meaningful and not decorative-only
|
|
|
|
### Navigation Item
|
|
|
|
- **Purpose**: A user-facing route link in the header or footer.
|
|
- **Key fields**:
|
|
- `label`
|
|
- `href`
|
|
- `placement` (`header`, `footer`)
|
|
- `group`
|
|
- `order`
|
|
- `isExternal`
|
|
- **Relationships**:
|
|
- Belongs to `SiteConfiguration`
|
|
- Usually points to one `PublicPage`
|
|
- **Validation rules**:
|
|
- Footer items for legal routes must point to published pages
|
|
- No live navigation item may point to an unpublished placeholder route
|
|
|
|
### Call To Action
|
|
|
|
- **Purpose**: Standardized next-step action shown within or after narrative sections.
|
|
- **Key fields**:
|
|
- `label`
|
|
- `href`
|
|
- `variant` (`primary`, `secondary`)
|
|
- `context`
|
|
- **Relationships**:
|
|
- May belong to `PublicPage`, `NarrativeSection`, or `SiteConfiguration`
|
|
- **Validation rules**:
|
|
- Every core page must expose at least one CTA leading deeper into the product/trust/contact flow
|
|
- CTA labels must preserve consistent domain wording and avoid hype language
|
|
|
|
### Audience Narrative
|
|
|
|
- **Purpose**: Audience-specific framing used primarily on Solutions and supporting pages.
|
|
- **Key fields**:
|
|
- `audience`
|
|
- `problemStatement`
|
|
- `operatingModelFit`
|
|
- `proofPoints`
|
|
- `nextStep`
|
|
- **Relationships**:
|
|
- Belongs to the Solutions page or other audience-aware sections
|
|
- **Validation rules**:
|
|
- Must distinguish MSP and Enterprise IT narratives rather than collapsing them into generic copy
|
|
|
|
### Integration Entry
|
|
|
|
- **Purpose**: A public description of one real integration direction or ecosystem anchor.
|
|
- **Key fields**:
|
|
- `name`
|
|
- `summary`
|
|
- `scopeNote`
|
|
- `category`
|
|
- **Relationships**:
|
|
- Belongs to the Integrations page
|
|
- **Validation rules**:
|
|
- Must represent a real or explicitly planned integration direction
|
|
- Must not express speculative wishlist claims as if they were live product truth
|
|
|
|
### Legal Document
|
|
|
|
- **Purpose**: Public legal content required to support a credible launch.
|
|
- **Key fields**:
|
|
- `slug`
|
|
- `title`
|
|
- `summary`
|
|
- `sections`
|
|
- `lastReviewedAt`
|
|
- **Relationships**:
|
|
- Belongs to the Legal surface
|
|
- **Validation rules**:
|
|
- Privacy and Terms must both exist before launch
|
|
- Any required jurisdiction-specific public legal notice must exist either as a section of the Legal hub or as a dedicated linked legal document before launch
|
|
- Legal content must be reachable from the footer and the conversion path
|
|
|
|
## Relationship Summary
|
|
|
|
- `SiteConfiguration` has many `NavigationItem`
|
|
- `SiteConfiguration` provides defaults to many `PublicPage`
|
|
- `PublicPage` has many `NarrativeSection`
|
|
- `PublicPage` may have many `CallToAction`
|
|
- `Solutions` page has many `AudienceNarrative`
|
|
- `Integrations` page has many `IntegrationEntry`
|
|
- `Legal` surface has many `LegalDocument`
|
|
|
|
## State / Lifecycle Notes
|
|
|
|
- No persisted runtime states are introduced.
|
|
- Publishability is file- and route-driven: a route is “live” when the page exists and is intentionally linked; future sections remain absent from navigation until live.
|
|
- Trust and integration claims stay governed by content review rather than by a new application state machine. |