# RentalDriveGo Web

Phase 11 production foundation for the multilingual RentalDriveGo marketing website.

## Implemented scope

- English, French, and Arabic locale-prefixed routes
- server-rendered `lang` and document-level direction
- immutable Phase 9 tokens plus a documented component-facing token layer
- light, dark, and system themes
- nonce-based CSP-compatible pre-paint theme bootstrap
- CSS-only system-theme fallback
- locale-aware formatters and bidi primitives
- responsive layout primitives
- accessible sticky header and native-dialog mobile navigation
- localized footer
- loading, error, not-found, and pending-destination shells
- localized canonical, reciprocal `hreflang`, Open Graph, and robots foundations
- unit, browser, accessibility, responsive, and visual test definitions

The complete production homepage, demo form, CRM, analytics, pricing, customer evidence, final legal content, login integration, final logo, and external destinations remain outside this phase or explicitly gated.

## Runtime

- Node.js `24.17.0`
- pnpm `11.9.0`
- Next.js `16.2.9`
- React `19.2.7`

Use the exact versions in `.node-version`, `.nvmrc`, `package.json`, and `pnpm-lock.yaml`.

## Local setup

```bash
corepack enable
corepack prepare pnpm@11.9.0 --activate
pnpm install --frozen-lockfile
cp .env.example .env.local
pnpm dev
```

Development routes:

- `/en`
- `/fr`
- `/ar`

Root `/` redirects using the locale cookie, then `Accept-Language`, then English.

## Required checks

```bash
pnpm validate
pnpm validate:package
pnpm format:check
pnpm lint
pnpm typecheck
pnpm test:unit
SITE_ORIGIN=http://127.0.0.1:3000 PUBLIC_RELEASE_APPROVED=false pnpm build
pnpm test:e2e
```

Generate reviewed visual baselines only in the pinned browser environment:

```bash
pnpm test:visual:update --project=chromium
```

Do not approve snapshots merely because the pixels repeat reliably. Computers can preserve a mistake with extraordinary discipline.

## Release safety

`PUBLIC_RELEASE_APPROVED` defaults to false. While false, pages emit `noindex` and `robots.txt` disallows crawling.

Do not enable public release until the updated issue register has no blocking release issues. Unapproved login and legal routes render explicit pending shells. Demo and contact actions remain disabled rather than pointing at invented integrations.

## Documentation

- Phase 11 report: `docs/PHASE_11_IMPLEMENTATION_REPORT_v1.0.md`
- Phase 12 handoff: `docs/PHASE_12_HANDOFF_v1.0.md`
- Phase 11 architecture: `docs/architecture/ADR-0002_PHASE_11_FOUNDATIONS.md`
- Token implementation: `docs/TOKEN_IMPLEMENTATION_v1.0.md`
- Updated issue register: `docs/IMPLEMENTATION_ISSUE_REGISTER_v1.1.csv`
- Validation evidence: `docs/quality/PHASE_11_VALIDATION_RESULTS_v1.0.md`
- Manual QA: `docs/quality/MANUAL_QA_RESULTS_v1.0.csv`
- Visual status: `docs/quality/VISUAL_REGRESSION_RESULTS_v1.0.json`
- Contribution rules: `CONTRIBUTING.md`
- Immutable Phase 9 package: `contracts/phase9`
- Phase 11 package manifest: `PHASE_11_PACKAGE_MANIFEST_v1.0.json`

## Phase 12 component system

The repository now contains the reusable RentalDriveGo component system and a guarded component workbench at `/{locale}/component-lab`. Enable it only for development or tests with `COMPONENT_FIXTURES_ENABLED=true`.

Key records:

- `docs/PHASE_12_IMPLEMENTATION_REPORT_v1.0.md`
- `docs/PHASE_13_HANDOFF_v1.0.md`
- `docs/phase12/COMPONENT_CATALOG_v1.0.md`
- `docs/phase12/COMPONENT_INVENTORY_v1.0.json`
- `docs/quality/PHASE_12_VALIDATION_RESULTS_v1.0.md`

Formal acceptance remains gated by the cumulative issue register.
