> For the complete documentation index, see [llms.txt](https://faction-os.gitbook.io/faction-os-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/sessions/phase15-session04-company-and-contact-pages/spec.md).

# Session Specification

**Session ID**: `phase15-session04-company-and-contact-pages` **Phase**: 15 - Trust, Content, And Conversion Pages **Status**: Not Started **Created**: 2026-06-02 **Package**: public-website **Package Stack**: Astro/TypeScript

***

## 1. Session Overview

This session builds the company and contact conversion pages for the static FactionOS public website: `/investors`, `/about`, `/contact`, and `/press`. Phase 13 delivered the static Astro foundation, Phase 14 shipped the homepage and core product story, and Phase 15 has already added use-case, security, and publishing surfaces. This work fills the remaining company-facing gap before roadmap, FAQ, legal, and final copy-consistency work.

The session matters because visitors need a credible path from product understanding to company context, press material, and contact routing. The work must remain conservative: investor copy cannot include unverifiable market, revenue, adoption, traction, fundraising, or financial metrics; contact routing must avoid hosted forms; and press assets must not promote conditional media as download-ready without evidence.

Implementation stays inside `public-website` as static Astro output. The plan uses typed data modules, existing route constants, shared layout/SEO primitives, registry-backed media previews, existing news announcements, and accessible links. It does not add analytics, trackers, runtime fetches, server adapters, CRM integrations, CMS behavior, auth, cookies, localStorage writes, or hosted form handling.

***

## 2. Objectives

1. Create launch-ready `/investors`, `/about`, `/contact`, and `/press` routes with canonical metadata, accessible CTAs, and static-site boundary copy.
2. Centralize company, contact, investor, and press copy in typed package-local data so route content, links, and metadata stay reviewable.
3. Provide segmented contact routing for product/demo, security, press, investors, and partnerships through `mailto:` or owner-approved external destinations without collecting form data.
4. Present press boilerplate, product summary, brand/showcase previews, recent announcements, and press contact while respecting press download and media provenance gates.

***

## 3. Prerequisites

### Required Sessions

* [x] `phase13-session03-seo-metadata-and-static-site-plumbing` - metadata, canonical URL, sitemap, robots, RSS, and structured data helpers exist.
* [x] `phase13-session05-asset-pipeline-and-brand-media-prep` - package-local brand and showcase media registry plus optimized media component exist.
* [x] `phase14-session04-product-overview-page` - product overview route and local-first product-surface copy exist for investor/about links.
* [x] `phase14-session05-features-and-how-it-works-pages` - feature and how-it-works routes provide product explanation targets.
* [x] `phase15-session01-use-cases-hub-and-role-pages` - role-specific audience routes provide company/about cross-link targets.
* [x] `phase15-session02-security-and-privacy-vault` - security claim boundaries, no-analytics posture, and privacy copy are reviewed.
* [x] `phase15-session03-blog-and-news-editorial-polish` - recent news announcements exist for press-page links.

### Required Tools/Knowledge

* Astro 6 static routes and scoped component styles.
* Existing `BaseLayout`, `Shell`, `Section`, `ButtonLink`, `Badge`, `OptimizedMedia`, `Seo`, and JSON-LD primitives.
* Existing package-local site, navigation, security, product, content, and media data patterns.
* Current no-claim boundaries from `.spec_system/CONSIDERATIONS.md` and `.spec_system/SECURITY-COMPLIANCE.md`.
* `public-website/public/press/README.md` admission rules for pass-through downloadable press files.

### Environment Requirements

* Node.js 26.2.0 or newer.
* npm workspace commands available from the repository root.
* No new production dependencies unless a separate review justifies them.
* No new files under `public-website/public/press/` unless the implementation records source, hash, size, provenance, rights, attribution, accessibility, privacy, budget, and launch-ready status.

***

## 4. Scope

### In Scope (MVP)

* Investors can open `/investors` and read the category thesis, product wedge, market problem, differentiation, and contact CTA without unverifiable metrics.
* Visitors can open `/about` and understand the mission, product principles, local-first stance, audience fit, and links to docs, demo, and contact.
* Visitors can open `/contact` and choose product/demo, security, press, investor, or partnership contact paths through `mailto:` or owner-approved external links.
* Visitors can open `/press` and review boilerplate, product summary, brand assets, showcase previews, press contact, recent announcements, and download availability status.
* Maintainers can update page content, metadata, CTA labels, contact intents, and press asset descriptors from typed package-local data.
* Press previews use approved brand assets and conditional showcase assets with visible provenance/status context instead of implying broad media readiness.
* Navigation/footer links expose company, contact, press, and investor routes where appropriate without crowding the primary product navigation.
* All routes remain static Astro output with no runtime data collection, client-side form submission, CRM handoff, analytics, tracker, cookie, localStorage, WebSocket, EventSource, or fetch behavior.

### Out of Scope (Deferred)

* Hosted form submission - *Reason: requires spam protection, retention, privacy handling, abuse controls, and owner approval outside this session.*
* CRM integration - *Reason: first-release contact routing is mailto or owner-approved external links only.*
* Private financial data, revenue, adoption, traction, customer counts, fundraising status, valuation, or market-size numbers - *Reason: the session must avoid unverifiable investor claims.*
* Final legal/privacy pages - *Reason: Phase 15 Session 05 owns roadmap, FAQ, and legal/policy surfaces.*
* New downloadable press files - *Reason: `public/press/` currently has policy only; launch downloads require a recorded source, rights, and provenance gate.*
* CMS, auth, server-rendered website routes, hosted persistence, analytics, trackers, cookies, runtime personalization, and external font/service loads - *Reason: the public website remains static and privacy-preserving by default.*
* Hosted identity, production-hosted validation, formal certification, trusted unified erasure, broad media readiness, real executors, remote execution, or inbound commands - *Reason: these remain open, no-claim, or deferred outside this public website scope.*

***

## 5. Technical Approach

### Architecture

Add a typed company/contact data module under `public-website/src/data/` to own metadata, route copy, link keys, contact intents, investor sections, about principles, press facts, press asset descriptors, and guardrail copy. Extend `site.ts` only for stable route constants, URLs, and approved contact targets that are reusable across navigation, pages, structured data, and future Phase 15 work.

Create small Astro components for repeated company/contact presentation: contact intent cards, press asset previews, and reusable company page cards or CTA rows. These components should rely on existing `Section`, `ButtonLink`, `Badge`, and `OptimizedMedia` primitives, use semantic headings/lists/links, and keep all interaction as normal anchor navigation. Press asset previews should use the media registry for optimized images and show a deterministic "downloads unavailable" state while no launch-ready pass-through files exist.

Each route should compose `BaseLayout`, `Shell`, metadata from the typed data module, route constants from `site.ts`, and shared components. Route-local CSS may be used for layout, but long copy and business-sensitive claims should stay in the data module to simplify review. Navigation updates should favor footer and utility placement for company/contact routes while keeping the primary nav focused on product, features, how-it-works, use cases, and security.

### Design Patterns

* Typed marketing data: Centralize copy, metadata, contact intents, press descriptors, and link keys for reviewability and exhaustive type checks.
* Static Astro composition: Build pages from existing layout and system primitives with no client scripts or runtime fetches.
* Explicit boundary copy: Keep no-form, no-analytics, no-hosted-default, no-unverified-metrics, and no-download-ready guardrails visible where they affect visitor behavior.
* Registry-backed media previews: Use `websiteMediaByKey` and `OptimizedMedia.astro` so alt text, dimensions, source hashes, status, and provenance stay centralized.
* Accessible link cards: Contact and press actions are anchors with explicit labels, focus states, external/mailto hints, and mobile-safe wrapping.
* Deterministic empty states: If no launch-ready press downloads exist, render a visible unavailable/download-policy state instead of an empty grid.

### Technology Stack

* Astro 6.4.2 static output.
* TypeScript 5.9.3.
* `@astrojs/sitemap` and existing metadata/structured-data helpers.
* `astro:assets` via `OptimizedMedia.astro` for package-local images.
* Scoped Astro component styles plus `public-website/src/styles/global.css` tokens.

***

## 6. Deliverables

### Files to Create

| File                                                              | Purpose                                                                                                                 | Est. Lines |
| ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------- |
| `public-website/src/data/company.ts`                              | Typed metadata, route links, investor copy, about copy, contact intents, press facts, asset descriptors, and guardrails | \~320      |
| `public-website/src/components/marketing/ContactIntentGrid.astro` | Accessible segmented contact cards with mailto/external links and no form controls                                      | \~180      |
| `public-website/src/components/marketing/PressAssetGrid.astro`    | Registry-backed press asset previews, provenance/status labels, and deterministic download-unavailable state            | \~220      |
| `public-website/src/components/marketing/CompanyRoutePanel.astro` | Reusable company/about/investor/press cards and CTA rows with responsive wrapping                                       | \~180      |
| `public-website/src/pages/investors.astro`                        | Static investor route with category thesis, product wedge, market problem, differentiation, and contact CTA             | \~220      |
| `public-website/src/pages/about.astro`                            | Static about route with mission, principles, local-first stance, audience fit, and demo/docs/contact links              | \~220      |
| `public-website/src/pages/contact.astro`                          | Static contact route with segmented contact intents and no hosted form behavior                                         | \~180      |
| `public-website/src/pages/press.astro`                            | Static press route with boilerplate, product summary, assets, announcements, and press contact                          | \~240      |

### Files to Modify

| File                                                    | Changes                                                                                                                   | Est. Lines |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------- |
| `public-website/src/data/site.ts`                       | Add stable investors/about route constants, company URLs, reusable contact targets, and structured-data contact alignment | \~80       |
| `public-website/src/data/navigation.ts`                 | Add company/contact/press/investor footer or utility links and refine descriptions                                        | \~45       |
| `public-website/src/lib/media.ts`                       | Reuse or expose press-safe media groupings if needed without changing media status semantics                              | \~35       |
| `public-website/src/components/navigation/Footer.astro` | Adjust footer grouping only if data changes require presentation updates                                                  | \~30       |

***

## 7. Success Criteria

### Functional Requirements

* [ ] `/investors`, `/about`, `/contact`, and `/press` render as static Astro routes.
* [ ] All four routes include title, description, canonical URL, social metadata, and reachable CTAs.
* [ ] `/investors` includes category thesis, product wedge, market problem, differentiation, and contact CTA without unverifiable metrics or private financial claims.
* [ ] `/about` includes mission, product principles, local-first stance, audience fit, docs link, demo link, and contact link.
* [ ] `/contact` segments product/demo, security, press, investors, and partnerships with `mailto:` or owner-approved external links only.
* [ ] `/contact` contains no hosted form, input fields, CRM embed, runtime fetch, analytics, tracker, cookie, localStorage write, WebSocket, or EventSource behavior.
* [ ] `/press` includes boilerplate, product summary, brand assets, showcase previews, press contact, and recent announcement links.
* [ ] Press downloads are either launch-ready and backed by recorded evidence or visibly unavailable with policy/context copy.
* [ ] Navigation/footer routes include company/contact/press/investor links where appropriate and keep existing product/security/demo/docs links intact.

### Testing Requirements

* [ ] `npm --workspace @factionos/public-website run typecheck` passes.
* [ ] `npm --workspace @factionos/public-website run build` passes.
* [ ] Built HTML for `/investors`, `/about`, `/contact`, and `/press` includes expected metadata, routes, CTAs, contact links, and boundary copy.
* [ ] Manual desktop, tablet, 360px mobile, keyboard focus, long text wrapping, CTA wrapping, press asset preview, and footer navigation smoke checks are completed.
* [ ] Copy scan confirms no hosted identity, trusted erasure, production-hosted validation, formal certification, broad media readiness, analytics, hosted form, CRM, customer, traction, revenue, market-size, or fundraising claims are introduced.

### Non-Functional Requirements

* [ ] Public website remains static Astro output with no new production dependencies.
* [ ] Contact routing does not create new data retention or GDPR obligations on the website surface.
* [ ] Press media status remains accurate: brand assets can be launch-ready for website identity use; conditional showcase assets must keep provenance/status context.
* [ ] Pages preserve responsive readability and do not overlap text, controls, cards, or media at supported desktop and mobile widths.

### Quality Gates

* [ ] All files ASCII-encoded.
* [ ] Unix LF line endings.
* [ ] Code follows project conventions.
* [ ] No new files are copied into `public-website/public/press/` unless the admission evidence is recorded and the file is launch-ready.

***

## 8. Implementation Notes

### Key Considerations

* Use route constants from `site.ts` instead of route string duplication where practical.
* Keep contact information typed and explicit. If an owner-approved external destination is unavailable, prefer `mailto:` and visible route copy over any hosted form placeholder.
* Keep press asset previews separate from press downloads. Existing brand assets can be previewed through `src/assets/`; pass-through downloads require `public/press/` evidence before public linking.
* Recent announcements should come from existing news content or stable links; do not invent press releases or legal announcements.
* The investor page can explain category pressure and product differentiation, but must avoid numeric market claims, traction claims, revenue claims, customer claims, fundraising status, valuation, or private financial details.

### Potential Challenges

* Contact addresses may not be final: Use typed targets and copy that can be owner-reviewed without adding a server form.
* Press downloads may be absent: Render a clear "downloads not yet available" state and link only approved previews.
* Company copy can overreach: Keep copy tied to already shipped local-first, provider-neutral, cockpit, optional War Room, demo, docs, and content routes.
* Dense company pages can become card-heavy: Reuse sections and route panels sparingly, keep headings compact, and verify mobile wrapping.

### Relevant Considerations

* \[P13-public-website] **Press downloads are policy-only**: The session must not add downloadable media without source, rights, attribution, metadata, accessibility, privacy, and size evidence.
* \[P13-public-website] **Public website external links are explicit**: Demo and docs links are allowed, but analytics, hosted forms, third-party fonts, CMS adapters, auth, and runtime personalization require separate review.
* \[P04] **Asset provenance gate remains active**: Brand/showcase media must preserve launch-ready or conditional status instead of implying broad media readiness.
* \[P13-public-website] **Static Astro boundary is intentional**: The session must avoid server adapters, React, Tailwind, CMS, auth, hosted forms, and analytics.
* \[P14-public-website] **Typed marketing data modules**: Route copy, metadata, CTA targets, and boundary language should live in typed data modules.
* \[P15-public-website] **Publishing polish complete**: Recent announcements are available for `/press`; use them without creating investor or legal claims.

### Behavioral Quality Focus

Checklist active: Yes Top behavioral risks for this session:

* Contact links could imply data collection or omit intent-specific routing.
* Investor and press copy could overclaim metrics, funding posture, legal status, hosted identity, production validation, or media readiness.
* Mailto/external CTA cards, asset previews, and route panels could wrap poorly or lose accessible names on small screens.

***

## 9. Testing Strategy

### Unit Tests

* TypeScript compile-time validation for company/contact data shapes, route keys, contact intent keys, media keys, and metadata contracts through `npm --workspace @factionos/public-website run typecheck`.

### Integration Tests

* Static build validation for `/investors`, `/about`, `/contact`, `/press`, sitemap output, metadata tags, navigation/footer links, contact mailto or external URLs, press asset previews, and recent announcement links.

### Manual Testing

* Open the four routes in the local Astro preview or built output and smoke desktop, tablet, and 360px mobile widths.
* Tab through all CTAs, contact cards, press links, footer links, and external demo/docs links.
* Confirm no form controls, submit buttons, client scripts, trackers, runtime fetches, or hidden data-collection behaviors were introduced.

### Edge Cases

* No launch-ready press downloads exist: `/press` must render a clear policy state rather than broken or empty download links.
* Long mailto subjects, contact reason labels, and investor differentiation text must wrap without overlapping cards or buttons.
* Conditional showcase media must show provenance/status context and must not be described as broadly release-ready.
* External links must keep `target`, `rel`, visible or screen-reader external hints, and accessible names.
* Structured data contact URLs must not claim support channels that the static site does not provide.

***

## 10. Dependencies

### External Libraries

* None new.

### Other Sessions

* **Depends on**: `phase13-session03-seo-metadata-and-static-site-plumbing`, `phase13-session05-asset-pipeline-and-brand-media-prep`, `phase14-session04-product-overview-page`, `phase14-session05-features-and-how-it-works-pages`, `phase15-session01-use-cases-hub-and-role-pages`, `phase15-session02-security-and-privacy-vault`, `phase15-session03-blog-and-news-editorial-polish`.
* **Depended by**: `phase15-session05-roadmap-faq-and-legal-pages`, `phase15-session06-cross-linking-and-copy-consistency-pass`, and Phase 16 launch validation.

***

## Next Steps

Run the implement workflow step to begin AI-led implementation.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/sessions/phase15-session04-company-and-contact-pages/spec.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
