Refactor marketing pages to client components and add comprehensive tests#624
Refactor marketing pages to client components and add comprehensive tests#624JustAGhosT merged 53 commits intomainfrom
Conversation
- Fix jest.config.js: correct moduleNameMapper typo and tighten testMatch
pattern to exclude non-test files like test-utils.tsx
- Add esModuleInterop to tsconfig.json for @types/react compatibility
- Fix useIntersectionObserver test: remove invalid window.undefined
redefinition and rewrite SSR test
- Fix RevealSection test: add cleanup between renders, fix ref assertion
- Rewrite ExitIntentModal component to match test expectations (content,
ARIA attributes, event listener target)
- Fix Button component class names to match test assertions, fix rel
deduplication for external links
- Fix StickyHeader and QuickActionsWidget tests: use .closest(".fixed")
instead of .closest("div") for correct DOM traversal
- Fix ExitIntentModal focus trap test to work with jsdom limitations
https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Adds HTTP health check support and improves service observability for the evidence CLI and keeper background service. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Provides documented environment variable templates for local development across the three backend services. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Remove disabled deployment workflows and workflow improvements doc that are no longer relevant. Update agent backlog with completed items. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
- PRD-001/PRD-004: Reconcile pricing.ts with products.ts source of truth. Segment pricing now reflects deployment packages (not individual SKUs), with cross-references and last-reconciled timestamp. - PRD-005: Expand ROI calculator page with product-aware cost breakdown, sample deployment packages (Basic/Property/Enterprise), and payback period projections sourced from the product catalog. - MKT-001 (backend): Add preorder API endpoint with preorders/preorder_items tables, migration, CRUD handlers, input validation, and route wiring. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
- PRD-001: Fix deploymentCost defaults from $250K to $150K (matching AeroNet Enterprise AN-ENT-001) in InteractiveElementsSection, roi-calculator page, and financial page. - PRD-004: Align values.ts PRICING constants with deployment-package ranges from reconciled pricing.ts (military $165K-$235K, infrastructure $30K-$70K, commercial $2K-$5K). - PRD-005: Add ROI calculator page CSS module with deployment tier cards, payback period projections, and financial disclaimer styling. - MKT-001: Wire preorder form to POST /preorders API endpoint with loading state, error handling, and order confirmation display. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
SIM-001: Replace save_session_to_persistence stub with real SHA-256
digest computation via phoenix_evidence::hash::sha256_hex. Session
data is canonically serialized then hashed, producing a deterministic
evidence ID (sim-{session}-{digest_prefix}) suitable for downstream
blockchain anchoring by the keeper service.
SIM-002: Replace save_evidence "evidence-id-placeholder" with actual
tamper-evident hashing. Evidence payloads now include a timestamp,
get SHA-256 digested, and return a proper evidence ID
(ev-{session}-{digest_prefix}).
https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Completed this session: SIM-001, SIM-002, MKT-001, PRD-001, PRD-004, PRD-005, DX-010 (plus 6 from Phase 1). Remaining: 5 P0, 16 P1, 21 P2, 12 P3 = 54 items. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Wave 1 — Backend crate testing: - KPR-002: 8 integration tests for keeper batch_anchor (Merkle tree flow) - X402-001: Integration tests for x402 payment protocol - ADDR-001: Integration tests for address-validation (EVM + Solana) - SOL-001: 12 inline tests for anchor-solana + verified existing integration tests Wave 2 — P0 fix: - DET-001: Camera fusion handoff now projects predicted 3D position to camera image space using pinhole model and checks distance threshold instead of blindly accepting any detection Wave 3 — CI hardening: - CI-001: Re-enabled cargo audit (removed CARGO_AUDIT_SKIP=true) - CI-002: Fixed mypy type errors across 15 detector source files - CI-003: Integration tests use -m "not hardware" marker filtering - CI-007: Created staging.tfvars (T4 GPU, spot instances, 2 max nodes) https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Fix type annotations across settings.py, main.py, and track_persistence.py to eliminate all mypy errors. Remove continue-on-error from detector CI so mypy failures now block the pipeline. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Install detector[dev] dependencies into pytest's uv-managed environment on session start so tests can run immediately. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
COV-001: Add cargo-llvm-cov to Rust CI with LCOV output + artifact upload COV-002: Add vitest --coverage to marketing CI with artifact upload COV-003: Set marketing vitest coverage thresholds (30/30/25/30) CI-004/CI-005: Coverage reporting now present for both Rust and JS/TS TST-001: 5 career application endpoint tests (auth, team member guard, happy path) TST-002: 7 profile update edge case tests (partial, null, timestamp, team status) https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
…pdate API-001: Replace SHA-256 preview placeholder with real Ed25519 attestation signing in x402 legal tier. New attestation module with key loading from X402_ATTESTATION_PRIVATE_KEY env var, ephemeral keys for dev, and signature verification utilities. 5 new unit tests. DOC-001: Remove misleading TODO comment in scheduled.ts — email sending via SendGrid/Azure is already fully implemented, just needs API key configured. DOC-002: Update ADR-0015 technical debt section — legacy PROMPTS object already removed; remaining work is migrating inline prompts to centralized template system. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
SIM-003: Added 118 marketing tests (396 total) covering eventSystem, simpleStateMachine, objectPool, performanceMonitor, and formatter. INT-001: Cross-app API→Keeper integration tests with evidence lifecycle and failure/retry scenarios in workspace_integration_tests.rs. INT-002: Playwright E2E testing foundation per ADR-0063 — config, marketing page tests, API health checks, and CI workflow. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
…ixtures TST-003: 19 cart context tests — add/remove/update/clear items, quantity edge cases, localStorage persistence and recovery. TST-004: 15 auth flow tests — login/logout, session management, team member detection, API interactions, profile confirmation. TST-005: 21 page component tests — product data validation, pricing integrity, category/phase enums, component smoke tests. TST-006: Hardware skip fixtures in detector conftest.py (skip_no_camera, skip_no_gpio) for future hardware tests. Marketing tests: 451 total (up from 396). https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
…uct fixes - SEO-001: Add OpenGraph metadata to all marketing pages by extracting "use client" components into *PageClient.tsx and exporting metadata from server-component page.tsx wrappers - COV-004: Add Codecov upload to ci-rust.yml and ci-marketing.yml, expand codecov.yml with marketing/x402/evidence flags and components - PRD-007: Add oneTimeTotal and recurringTotal to cart state, context, and CartPanel display (shows monthly breakdown when recurring > 0) - PRD-002: Fix 3 RKV products (Mothership, Interceptor, Ground Station) to have comingSoon: true for future-phase series-b/c items - SEO-003: Add quantifiable outcomes to case study data and render "Key Outcomes" section with checkmark list in CaseStudiesSection https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
…pdate - PRD-006: New /unit-economics page with CAC (R50K), LTV (R1.2M), 12-month payback, COGS breakdown, 65%/25% margin targets, 5-year revenue projections (R25M→R500M), and funding roadmap - FIN-001: New /competitors page with feature comparison table (DroneShield, Dedrone, Anduril, Rafael, Fortem, Raytheon), competitor profiles with strengths/weaknesses, Phoenix advantages, and market positioning strategy - Update AGENT_BACKLOG.md: 44 of 54 items now completed https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
…compliance - Expand validate-env.sh with docs (Azure Entra), marketing (API URL, tour), API (x402 payment), keeper (ports, polling), and detector app support - Add CI env validation steps to ci-rust, deploy-docs-azure, detector-ci - Add release.yml workflow with git-cliff changelog generation - Add cliff.toml config for conventional commit parsing - Update SBIR page with specific compliance roadmap dates and classifications https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
…fixes
- FIN-002: Add interactive sliders (year1 systems, avg revenue, growth rate)
to unit economics revenue projections table
- FIN-003: Add BOM component breakdown for SkySnare, SkyWatch Pro, and
AeroNet Enterprise with cost bar visualizations
- DX-002: Accessibility fixes across packages/ui:
- Button: add focus-visible outline color token, secondary fallback
- QuickActionsWidget: add nav landmark, focus-visible styles, aria-hidden icons
- StickyHeader: add focus-visible on CTA, aria-hidden when collapsed,
CSS variable fallbacks
- RevealSection: respect prefers-reduced-motion in JS (content visible
immediately for users who disable animations)
- Update AGENT_BACKLOG.md: mark DX-011, DX-012, FIN-002, FIN-003, PRD-008
https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
… remaining P3 51/54 items completed. Remaining 3 P3 items (DX-003/004/009) audited with analysis notes and deferred to next sprint. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Tech stack: ESLint 8→9, Prettier 3.7→3.8, Turborepo 2.7→2.8 Repo structure: add e2e/ directory Commands: fix threat simulator test command (pnpm sim:test) API routes: add missing /preorders endpoints Keeper: document KEEPER_PROVIDER, KEEPER_HTTP_PORT, KEEPER_CONFIRM_POLL_MS; demote KEEPER_USE_STUB to legacy Python: bandit is pre-commit only, coverage 50% is unenforced target Config symlinks: add .editorconfig, .prettierignore Gotchas: getrandom feature js→wasm_js, src-tauri not a pnpm member Infrastructure: environments dev/stg/prd→dev/prod https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
DX-007 stale content fixes: - CLAUDE.md: cargo audit gotcha corrected (runs in CI, not skipped) - CLAUDE.md: mypy gotcha updated (errors resolved, CI enforces) - Keeper CLAUDE.md: EtherLink defaults corrected (ghostnet, not mainnet) - progress-overview.md: fix frontmatter fields (timeEstimate→estimated_reading_time) Wave 6 backlog added from agent audits: - 9 design token consolidation items (brand-guardian audit) - 7 market segment gap items (market-finder analysis) - 5 stale content items requiring documentation rewrites 53/54 original backlog items completed this session. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Critical: - tokens/index.css: bump --pr-fg-subtle from #64748b to #94a3b8 (AA on all dark surfaces: 4.24→5.71+ ratio) Major: - Button: secondary fallback #f97316→#334155 (fixes white-on-orange 2.80:1 failure); add primary/outline CSS variable fallbacks; add pointer-events-none to disabled state - Card: add ariaLabel prop threaded to interactive role="button" - ExitIntentModal: replace eslint-disable with role="presentation" on backdrop; add aria-label on download link; use focus-visible instead of focus https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
…logued ADR agent found 45 standalone + 19 inline ADRs, 5 structural defects (D001 collision, dual-0000, numbering scheme conflict, mechanical namespace, 0072 template bug), and 10 missing ADRs for core decisions (rustls policy, SQLite operations, WASM strategy, keeper dual-loop, evidence hashing). All findings added to Wave 6 backlog (36 total items from 6 parallel agents). https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
… + 3 new ADRs TOK-001: ThemeContext now sets --pr-accent-base/hover/active/subtle for all 3 themes DOC-003: API documentation rewritten with real routes, models, and auth flow ADR-001: Calendar export renumbered D001 → D010 to fix collision with Monorepo ADR ADR-002: adr-management.md numbering scheme aligned to template-and-guide.md ADR-006: New ADR-0101 — Rust workspace structure + rustls-only TLS policy ADR-007: New ADR-0102 — SQLite as operational database (PRAGMAs, URL chain, migrations) ADR-008: New ADR-0401 — WASM integration strategy (3 targets, getrandom, sync:wasm) https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
TOK-002: Logo SVGs and brand docs reconciled to #f97316 (token system color) MKT-002: AeroNet Patrol mid-market bundle ($12K-$28K) MKT-003: AeroNet LEO law enforcement bundle ($45K-$95K) with blockchain evidence MKT-004: AeroNet Allied NATO export bundle ($120K-$350K), non-ITAR, STANAG MKT-005: AeroNet Corrections prison drone interdiction ($55K-$150K) DOC-004: ADR-0035 fixed — apps/tauri → apps/threat-simulator-desktop, workflow note ADR-003: Inline stub expansion note added to architecture-decision-records.md ADR-009: New ADR-0034 — Keeper dual-loop design (tokio::select!, backoff) ADR-010: New ADR-0200 — Dual-chain evidence anchoring (Merkle batching) ADR-011: New ADR-0201 — Evidence hashing algorithm (SHA-256, FIPS, DigestAlgo) https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Design tokens: shared token import in globals.css, typography scale aligned, duration tokens reconciled (100ms/150ms/200ms). Market segments: SkyWatch FarmPack ($3.5K-$8K), AeroNet Events rental ($2.5K-$15K), AeroNet Maritime ($75K-$200K). Stale content: ADR-D004 Next.js 14→16, system-architecture EtherLink defaults, documentation-status updated to Feb 2026. ADR fixes: mechanical ADRs renamed M-0001 through M-0005. New ADRs: ADR-0301 (Python detector factory), ADR-0402 (frontend frameworks), ADR-0103 (passwordless auth), ADR-0403 (Tauri desktop packaging). https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
TOK-006: Z-index token scale extended with --pr-z-base/raised/above/nav/ skip-nav/tour. Navigation, SkipNav, Tour, globals.css updated to use tokens. TOK-007: Hardcoded colors replaced — Footer Soonami branding uses --pr-brand-soonami-* tokens, preorder confirmation uses --pr-status-success. TOK-008: Sub-brand tokens defined — SkySnare (teal), AeroNet (blue), Soonami (partner) added to shared tokens. TOK-009: Container width fragmentation resolved — --container-max-width and --container-max-width-wide now reference shared --pr-container-* tokens. HeroSection, globals.css .container, ThreatSimulator all use variable refs. ADR-005: ADR-0072 template code fence changed from `markdown` to `text` with title annotation, preventing potential MDX parser issues. Completes all 36 Wave 6 backlog items (6a–6d). https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
|
Important Review skippedToo many files! This PR contains 179 files, which is 29 over the limit of 150. ⛔ Files ignored due to path filters (4)
📒 Files selected for processing (179)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
🚀 Azure Static Web Apps Preview (Marketing) ✅ Deployment complete! Preview URL: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net This preview will be automatically deleted when the PR is closed. |
chore: regenerate pnpm-lock.yaml to resolve merge conflicts
|
@copilot merging claude/implement-orchestration-qazjW into main still has 21 pnpm-lock conlicts, make sure you update rom main and resolve this issue |
|
@JustAGhosT I've opened a new pull request, #640, to work on those changes. Once the pull request is ready, I'll request review from you. |
Co-authored-by: JustAGhosT <5531814+JustAGhosT@users.noreply.github.com>
chore: regenerate pnpm-lock.yaml from main to resolve merge conflicts
Regenerated lockfile after merging latest main to resolve the pnpm-lock.yaml merge conflict. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
|
🚀 Azure Static Web Apps Preview ✅ Deployment complete!
This preview will be automatically deleted when the PR is closed. |
|
Azure Static Web Apps: Your stage site is ready! Visit it here: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net |
|
🚀 Azure Static Web Apps Preview (Marketing) ✅ Deployment complete! Preview URL: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net This preview will be automatically deleted when the PR is closed. |
- Upgrade cargo-audit from 0.21.2 to 0.22.1 for CVSS 4.0 support (RUSTSEC-2026-0003 uses CVSS 4.0 vectors the old version can't parse) - Use 127.0.0.1 instead of localhost in API e2e tests to avoid IPv6 resolution (Node.js resolves localhost to ::1 but API binds 0.0.0.0) - Fix marketing e2e: about/capabilities pages use h2 not h1, preorder form is conditional so test h1 heading instead https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
|
🚀 Azure Static Web Apps Preview ✅ Deployment complete!
This preview will be automatically deleted when the PR is closed. |
|
Azure Static Web Apps: Your stage site is ready! Visit it here: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net |
|
🚀 Azure Static Web Apps Preview (Marketing) ✅ Deployment complete! Preview URL: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net This preview will be automatically deleted when the PR is closed. |
- Format marketing-pages.spec.ts to pass prettier check - Use nohup + curl health-check loop for API server startup in e2e workflow instead of blind sleep 3 (server was getting SIGHUP-killed when the shell step exited, and failures were silent) - Log API server output to file for debugging startup failures https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
|
Azure Static Web Apps: Your stage site is ready! Visit it here: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net |
|
🚀 Azure Static Web Apps Preview (Marketing) ✅ Deployment complete! Preview URL: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net This preview will be automatically deleted when the PR is closed. |
|
🚀 Azure Static Web Apps Preview ✅ Deployment complete!
This preview will be automatically deleted when the PR is closed. |
The API server failed in CI with "unable to open database file" because SqlitePool::connect() defaults create_if_missing to false. Switch to connect_with(SqliteConnectOptions) with create_if_missing(true) so the database file is created automatically on first run. https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
|
Azure Static Web Apps: Your stage site is ready! Visit it here: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net |
|
🚀 Azure Static Web Apps Preview (Marketing) ✅ Deployment complete! Preview URL: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net This preview will be automatically deleted when the PR is closed. |
|
🚀 Azure Static Web Apps Preview ✅ Deployment complete!
This preview will be automatically deleted when the PR is closed. |
The API returns { data, page, per_page, total } not { items }. Update
the evidence and countermeasures e2e tests to check for "data" property.
https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
|
🚀 Azure Static Web Apps Preview ✅ Deployment complete!
This preview will be automatically deleted when the PR is closed. |
|
Azure Static Web Apps: Your stage site is ready! Visit it here: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net |
|
🚀 Azure Static Web Apps Preview (Marketing) ✅ Deployment complete! Preview URL: https://ambitious-sand-0ef6ce10f-624.eastus2.3.azurestaticapps.net This preview will be automatically deleted when the PR is closed. |
Summary
This PR refactors marketing page components to use the client-side rendering pattern, adds comprehensive integration tests for the API and Keeper services, and introduces new documentation and configuration files to support the growing test suite and deployment infrastructure.
Key Changes
Marketing Pages Refactoring
contact,preorder,technical,compliance,sbir,partnerships,products,about,methods,capabilities,schedule,timeline,financial,roi-calculator,competitors,unit-economics) from server-side to client-side rendering by extracting logic into*PageClient.tsxfilesComprehensive Test Coverage
apps/keeper/tests/batch_anchor_integration.rs): 822 lines covering BatchAnchor module with schema creation, batch-size triggers, proof retrieval, verification, statistics, and timeout-triggered flushingapps/api/tests/workspace_integration_tests.rs): 674 lines testing complete evidence lifecycle from creation to blockchain anchoring across multiple componentsapps/api/tests/profile_update_tests.rs): 328 lines for user profile management endpointsapps/api/tests/career_application_tests.rs): 204 lines for career application submission and retrievalCartContext,EventSystem,PerformanceMonitor,SimpleStateMachine,ObjectPool,AuthFlow, andPageComponentsDocumentation & Architecture
Configuration & Infrastructure
.env.examplefiles forapi,keeper, anddetectorapps with comprehensive configuration documentationapps/docs/src/data/pricing.tswith synchronization notes for marketing componentsUI/UX Improvements
packages/ui--pr-z-nav,--pr-z-skip-nav)Code Quality
evidence-clifor better testabilityNotable Implementation Details
https://claude.ai/code/session_01VUpGxGeB9PdnLL7WhFwoxh
Summary by CodeRabbit
New Features
Documentation
Tests