# Riviamigo Agent Guide This is the primary bootstrap for Codex and other repo-aware agents working in Riviamigo. ## What Riviamigo Is Riviamigo is a self-hosted Rivian telemetry dashboard: - `apps/api`: Rust + Axum API, ingestion, auth, TimescaleDB access, operational routes - `apps/web`: React + TanStack app - `packages/dashboards`: dashboard schema, widget registry, renderer, defaults - `packages/ui`: shared primitives, charts, tables, tokens - `packages/hooks`: API client, auth state, React Query hooks - `packages/types`: shared TypeScript contracts ## Canonical Document Hierarchy Use these entrypoints in this order: 1. `AGENTS.md` Codex-first operating rules, repo map, workflow expectations, and doc-update triggers. 2. `CLAUDE.md` Companion guide for Claude-specific workflow and command detail. If guidance overlaps, prefer this file for repo policy and `CLAUDE.md` for tool-oriented execution detail. 3. `README.md` Human-facing project overview and quick start. 4. `docs/index.md` Routing hub for deeper documentation by audience and subsystem. ## Mandatory Working Rules ### Shared seams first - Preserve shared page and dashboard behavior by changing the shared seam before patching route-local code. - For dashboard pages, audit `DashboardPageShell`, `DashboardRenderer`, `WidgetHost`, sensor widgets, shared tables, and hooks before adding one-off behavior. - The legacy dashboard chart renderer is the canonical visual contract for every known bundled chart slug. Chart-editor work may change chart sources, definitions, or dashboard assignments, but must not route bundled charts through the generic definition renderer unless the user explicitly requests a renderer migration. Treat the pre-migration renderer at `dbd7ae58` as the compatibility source and maintain the hand-authored oracle and shared dashboard/editor preview parity checks described in `docs/frontend/chart-compatibility-testing.md`. - Route files stay thin. Put reusable or page-specific composition in components, hooks, definitions, or widgets rather than route conditionals. ### Visual consistency is not optional - `docs/branding.md` is the canonical visual system reference. - Reuse existing primitives before inventing route-local UI chrome. - Preserve icon family, spacing rhythm, empty/loading/error treatments, control ordering, and copy tone. - Do not add raw colors. Use design tokens only. - If a UI change alters a reusable pattern, update `docs/branding.md` in the same change. - New or changed shared UI/app surfaces must be mobile-friendly by default and validated at small-screen breakpoints in the same change. ### Backend and API discipline - New routes, config knobs, env vars, migrations, or auth flows must update the relevant docs in the same PR unless a tracked doc-debt follow-up is explicitly created. - Keep docs aligned with actual runtime behavior; do not document intended behavior as if it is already shipped. - Prefer compile-time-checked and typed seams over ad hoc shape widening. ### Testing expectations - Prefer targeted verification close to the changed seam. - Frontend: use `pnpm -C apps/web exec vitest run ...` for focused tests. - Backend: use focused `cargo test` when full workspace validation is noisy. - If you touch shared seams, ingestion, routing, or any other significant runtime path, run the relevant build check before handing off. In practice that means `pnpm build` for workspace-wide TypeScript/Vite changes and the relevant backend build/test command for Rust changes. - If a behavior change affects shared UX or repo workflow, add or update verification where practical. - For shared UI changes, include mobile breakpoint verification alongside desktop behavior instead of leaving responsive follow-up work for later. ## Documentation System Repo docs are canonical. The [Riviamigo documentation site](https://riviamigo.com/) is built directly from `docs/` and published to GitHub Pages after relevant changes reach `main`. ### Doc ownership - `README.md` Audience: new contributors, evaluators, self-hosters landing in the repo. - `AGENTS.md` Audience: Codex and other agents. - `CLAUDE.md` Audience: Claude and human contributors who need command and architecture detail. - `docs/index.md` Audience: anyone routing into deeper docs. - `docs/branding.md` Audience: frontend contributors and reviewers. - `docs/architecture/*` Audience: engineering contributors making structural changes. - `docs/runbooks/*` Audience: maintainers troubleshooting or updating operations/process. - `docs/guides/*` Audience: self-hosters and end users. These pages are authored in-repo and published directly through Docusaurus. ### When docs must be updated Update docs in the same change when you modify: - shared UI patterns, page shell behavior, spacing/icon/copy conventions - routes, endpoints, auth flows, config, env vars, migrations, or publishing workflow - dashboard architecture, widget authoring, or package boundaries - troubleshooting steps, deployment behavior, backup behavior, or operational expectations ### Acceptable scope by document - `README.md`: overview, quick start, links out - `AGENTS.md`: agent operating model and repo workflow - `CLAUDE.md`: companion execution guide, commands, conventions - `docs/branding.md`: canonical visual language and UI rules - `docs/architecture/*`: stable architecture and data-flow guidance - `docs/runbooks/*`: operational playbooks and recurring maintenance - `docs/guides/*`: curated user-facing material only ## Living Docs Workflow Documentation updates are part of feature work, not cleanup. ### Documentation impact classification Every non-trivial change should classify itself as one of: - `No doc impact` - `Internal doc update required` - `Documentation site update required` - `Both internal and user-facing docs required` This classification belongs in the PR template and should be reflected in the changed files. ### Doc debt rule If implementation must land before final docs: - leave a tracked follow-up in-repo - name the missing docs explicitly - do not rely on chat history or implied future cleanup ### Publishing model - Author all documentation in `docs/`; keep user installation and operation pages in `docs/guides/`. - Run `pnpm docs:check` and `pnpm docs:build` before merging documentation-site changes. - Relevant commits to `main` are built and published automatically to GitHub Pages. - Do not maintain a separate hosted or generated documentation copy. ## Useful Commands ```bash pnpm run dev:stack pnpm typecheck pnpm lint pnpm test pnpm docs:check pnpm docs:build pnpm -C apps/web exec vitest run src/test/.test.tsx ``` ## Key Links - Contributor quick start: `README.md` - Companion execution guide: `CLAUDE.md` - Docs hub: `docs/index.md` - Visual system: `docs/branding.md` - Dashboard docs: `docs/frontend/dashboard-architecture.md`, `docs/frontend/dashboard-authoring.md` - User-facing docs source: `docs/guides/README.md`