Development - #1
Merged
Merged
Conversation
…management - Introduced `useSendMessage` hook for handling message sending with file upload support. - Added `useStationAlias` hook to manage station aliases. - Created `LocaleProvider` and `ThemeProvider` for managing application localization and theme settings. - Implemented Tailwind CSS configuration for styling. - Established TypeScript configuration for apps and packages. - Added ESLint configuration for Next.js projects. - Created utility functions for conversation and message handling in the `@platform/utils` package. - Developed UI components including dialogs, banners, and input fields in the `@platform/ui` package. - Set up workspace management with pnpm and Turbo for efficient development.
Covers all architectural decisions for the Hermes frontend: - ADR-001: Dual-mode API client (server/client explicit imports) - ADR-002: Shared WebSocket provider for radio-daemon - ADR-003: HttpOnly cookie auth + single-flight token refresh - ADR-004: IndexedDB offline message queue - ADR-005: PMTiles + MapLibre GL JS for offline maps - ADR-006: React Context + hooks state management - ADR-007: nginx reverse proxy multi-app deployment - ADR-008: sBitx canonical deployment target (Raspberry Pi, 7-inch touchscreen) - ADR-009: PWA strategy for companion devices (replaces Capacitor)
Phase 1 (17 tasks): Shell, Foundation & Login — sBitx design tokens, shared-auth package, app scaffolding, auth flow, PWA setup, CSP, CI/CD pipeline, ARM64 cross-compilation, IndexedDB verification Phase 2 (12 tasks): GPS Application — WebSocket provider, offline map with PMTiles, real-time GPS tracking, breadcrumb trail Phase 3 (17 tasks): Chat Application — messaging data layer, message list/bubble/input, offline queue, file uploads, encryption, radio info dashboard, station discovery
- Frontend overview: system context with sBitx as canonical target, component tree for all three apps, data flow diagrams (server state fetching, WebSocket events, offline queue), design decisions summary - Auth flow: token lifecycle, login sequence diagram, auth provider state machine, cross-app auth (co-deployed + standalone + dev modes), token refresh with single-flight pattern, logout flow
- HF Digital Specialist review: 10 architectural concerns validated against HF radio reality (Mercury throughput, store-and-forward model, typing indicators rejected, presence indicators rejected, file size limits corrected to 500KB, Docker dev-only confirmed) - Senior Project Reviewer assessment: 18 findings across architecture, security, testing, DevOps — 5 critical, 2 high-severity. All findings addressed in updated ADRs and task lists
Defines all code patterns and conventions for the project: - Commit conventions (Conventional Commits with 10 types, 13 scopes) - Branch strategy (feature/fix/a11y/perf/refactor/docs/chore) - Pull request conventions (template, 12-item checklist, review requirements) - Code patterns (component, hook, API route, design tokens, i18n, a11y) - Directory structure conventions (apps/, packages/, naming) - TypeScript standards (strict mode, forbidden patterns) - Testing standards (coverage targets per module type) - ESLint configuration (no-any, no-console, jsx-a11y, performance) - Anti-patterns: 10 explicit do-not-carry-forward rules from PoC
- Project brief: executive summary — what HERMES is, what we're building, architecture diagram, key decisions, technology stack, repository structure - Development plan: 3-phase roadmap (9 weeks, 46 tasks), fully automated workflow diagram (5 manual steps), branch strategy, quick start guide
- CI pipeline: lint, typecheck, unit tests, build, E2E, bundle size check - Release pipeline: ARM64 cross-compilation, staging auto-deploy (main), production deploy (git tags), rollback support - PR template: 12-item checklist covering TypeScript, i18n, a11y, testing - Frontend Architect, Project Manager, HF Digital Specialist, and Senior Reviewer agent definitions
- turbo.json: resolve merge conflicts, add typecheck + test tasks - package.json: add dev:shell, dev:gps, dev:chat, typecheck, test scripts - package.json: exclude PoC apps from workspaces (only final apps) - .env.example: create with all required variables for sBitx deployment - .commitlintrc.json: enforce Conventional Commits (10 types, 13 scopes) - .prettierrc: add with Tailwind CSS plugin - packages/config/eslint/next.mjs: add strict rules (no-any, no-console, jsx-a11y, react performance, no-restricted-imports) - Remove pnpm-workspace.yaml (using npm workspaces only)
Defines concrete performance targets for the sBitx deployment: - Memory budget: per-process targets (shell 0MB static, GPS 80MB, Chat 80MB, Chromium 350MB). System-level budget for 2GB and 4GB Pi. - CPU targets: startup times (login <2s, GPS map <3s, chat load <2s), interaction latency (touch <100ms, scroll 60fps, message send <500ms) - Bundle size budgets: shell <100KB JS, GPS <200KB, chat <250KB gzipped - MapLibre GPU rendering: 30fps at zoom 10-14 on VideoCore VI, tile cache limits - DOM node budget: <5,000 nodes per page, lazy pagination keeps it bounded - Cold boot sequence: power-on to GPS map visible in ~26 seconds - Load scenarios: GPS+Chat simultaneous, 10k-message conversation, high zoom map - Performance testing checklist per phase with specific measurements - Explicitly documents what we DON'T optimize: SSR, SW caching, virtual scrolling, Web Workers, CDN (not relevant for localhost-only deployment)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📋 PR Description —
development→maindocs/
├── project-brief.md ← Executive summary
├── development-plan.md ← Full roadmap + workflow
├── adr/ ADR-001 through ADR-009 ← 9 architecture decisions
├── tasks/ phase-1/2/3.md ← 46 tasks with acceptance criteria
├── architecture/ frontend-overview.md ← System context, component tree, data flow
│ auth-flow.md ← Login, token refresh, cross-app auth
│ performance-expectations.md ← Memory/CPU/bundle budgets for sBitx
├── audit/ 2026-08-06-hf-digital-specialist-review.md
│ 2026-08-06-senior-reviewer-assessment.md
└── governance/ engineering-standards.md ← Code patterns, commits, PRs, testing
.github/
├── workflows/ ci.yml + release.yml
└── pull_request_template.md
.claude/agents/ 5 agent definitions
turbo.json ← Merge conflicts resolved
package.json ← Scripts fixed, PoC excluded
.env.example ← Created
.commitlintrc.json ← Created
.prettierrc ← Created
Post-Merge
Phase 1 development begins. First task:
docs/tasks/phase-1-shell-foundation-login.md→ Task 1.1.0 — Configure sBitx viewport and design token constraints.