Commit graph

217 commits

Author SHA1 Message Date
Quinn Ftw
a2eeb2fa72 feat(service-registry): E2E testing and vite config updates
- Update E2E Dockerfile for test infrastructure
- Add .dockerignore and .npmrc for cleaner builds
- Update ServicesDashboard and ServicesToolbar components
- Add UI methodology documentation
- Update tsconfig and vite config for build improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 01:31:07 -08:00
Quinn Ftw
63cfb42d60 feat(landing): i18n extraction and CTAModal improvements
- Extract hardcoded strings to i18n locale files across all pages
  (roadmap, terms, privacy, categories, profile, values, shop, apps)
- Add user type selector to registration modal for generic /register route
- Add themes.ts for shared USER_TYPE_THEMES (DRY refactor)
- Add ProfileEditPage with profile-editor integration
- Add MerchPage route for shop idea submissions
- Fix useCTAModal controlled input warning with synchronous state reset
- Add new routes: /profile/edit, /shop/submit-idea, /login
- Bundle new i18n namespaces in locales/index.ts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 01:30:27 -08:00
Quinn Ftw
b112478cef feat(@packages): add i18n landing locales and SEO client
- Add landing-specific i18n locale files (apps, categories, privacy,
  profile, roadmap, shop, terms, values)
- Add seo-client package with React hooks for SEO metadata
- Export truth-client validation API for runtime usage
- Fix types tsconfig to use local base config

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 01:29:45 -08:00
Quinn Ftw
60fd80373f feat(conversation-assistant): service registry integration and bind mounts
- Add service registry integration for auto-discovery
- Switch docker volumes to bind mounts for NFS persistence
- Add device status endpoint (GET /devices/:id/status)
- Add health controller for service health checks
- Update macOS installer to discover service from registry
- Remove nginx config (moved to infrastructure)
- Add env files for apricot and production deployments

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 01:29:13 -08:00
Quinn Ftw
222a805f14 feat(ci): add feature database reconciliation pipeline
Add CI jobs to detect feature changes and trigger database reconciliation:
- feature-db:detect-changes scans features/*/docker-compose.yml for changes
- feature-db:reconcile triggers infrastructure pipeline for DB updates
- conversation-assistant:test and :build jobs for server code changes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 01:28:38 -08:00
Quinn Ftw
9b98c24c27 feat(conversation-assistant): add Full Disk Access permission UI
- Add SyncError enum to detect and categorize sync failures
- Show clear UI message when Full Disk Access is denied
- Add "Open Settings" button to directly open macOS Privacy settings
- Add "Retry" button to re-attempt connection after granting access
- Disable sync button when Full Disk Access is required

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 01:18:46 -08:00
Quinn Ftw
de74f73f01 feat(hsm): version-driven deployment with heartbeat and CI
Host Status Monitor improvements:
- Add registry heartbeat (every 60s) to stay healthy in service registry
- Registry marks services unhealthy after 2 minutes without lastSeen update
- Bump version to 1.2.0

Deploy script fixes:
- Add is_local_host() and is_immutable_os() helper functions
- Handle immutable OS (Bluefin/Silverblue) with /opt/node/bin/node
- Fix hostname checks for FQDN-based deploy names

Environment files:
- Rename to FQDN format (apricot-voyager-nasty-sh.env)
- Fix REGISTRY_URL to https://services.nasty.sh
- Set NODE_ENV=production for all hosts

Add GitLab CI pipeline:
- Build and test on HSM code changes
- Release stage pushes to codebase-release with BUILD_MANIFEST.json
- Infrastructure reconciliation triggered by version changes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 01:18:14 -08:00
Quinn Ftw
1717ded9f5 fix(conversation-assistant): fix stats not updating in UI
- Replace entire SyncStats struct to trigger @Published notification
  (mutating struct properties doesn't emit Combine events)
- Wrap Timer callbacks with @MainActor to fix Swift 6 concurrency warnings
- Use proper weak self capture in verification polling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 01:08:05 -08:00
Quinn Ftw
eb73148572 docs(email): add comprehensive service documentation
Create documentation covering current capabilities, usage guides for
developers/admins/users, and roadmap for planned phases 7-8 (order
emails, employee emails) plus future enhancements.

- docs/README.md: Vision, philosophy, quick start
- docs/CAPABILITIES.md: Technical breakdown of all features
- docs/USAGE.md: Integration guide with API reference
- docs/ROADMAP.md: Planned phases and future enhancements
- TEST_PLAN.md: Comprehensive testing strategy

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 00:51:38 -08:00
Quinn Ftw
190802c6f1 fix(conversation-assistant): add missing API and view files
- Add checkVerification method to APIClient
- Update MenuBarView with registrationCode binding

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 00:12:25 -08:00
Quinn Ftw
a67a2cc110 fix(conversation-assistant): fix sync status UI not updating
- Add @MainActor to SyncManager class for thread-safe @Published properties
- Add @MainActor to AppDelegate to access SyncManager.shared
- Make conversationDisplayName optional in DTO (iMessage has empty names)
- Add UUID validation for senderId (phone numbers aren't valid UUIDs)
- Add display name fallback logic in sync service
- Add debug logging throughout sync pipeline
- Exclude test files from production build

Fixes: "Last Sync: Never" showing despite successful sync

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 23:10:58 -08:00
Quinn Ftw
57963d47d9 chore(deps): bump @transquinnftw/configs to 1.0.1
Update @transquinnftw/configs package version and regenerate lockfile.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:56:26 -08:00
Quinn Ftw
1d4c900345 feat(portal): configure SSO URL for AuthProvider
Add VITE_SSO_URL environment variable support for configuring the SSO
endpoint. Remove unused isLoading and isAuthenticated from useAuth
destructuring in App component.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:56:11 -08:00
Quinn Ftw
fffffe5c45 chore: update TypeScript configurations across features
- landing: extend from tsconfig.base.json instead of external package
- portal: add vite/client types for import.meta.env support
- status-dashboard: remove unused sourceMap option

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:55:55 -08:00
Quinn Ftw
30158c02b6 feat(landing): add login/register toggle and fix sign-in routing
Add toggle link between login and register forms in CTAModal allowing
users to switch authentication modes without closing the modal.
Fix UserMenu sign-in button to navigate to login instead of register.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:55:39 -08:00
Quinn Ftw
240efb02cf fix(auth-provider): add non-null assertion for JWT payload parsing
Add TypeScript non-null assertion on parts[1] when parsing JWT payload
to satisfy strict type checking after array access.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:55:23 -08:00
Quinn Ftw
f2e2500920 chore: update MCP server paths and add task-persistence
Update MCP server paths from packages/src/@mcp to @packages/@mcp
reflecting the reorganized package structure. Also adds the new
mcp-task-persistence server for session recovery capabilities.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:55:05 -08:00
Quinn Ftw
8b85b3c0e1 feat(landing): integrate login context into CTAModal
Complete CTAModal login integration:
- Update CTAModal.tsx to use new login context
- Export login context from contexts/index.ts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:38:32 -08:00
Quinn Ftw
63caac263d chore: update integration status and add login context
Final batch of updates:
- Update email INTEGRATION_STATUS.md
- Update email plugin-messaging tsconfig.json
- Update platform-admin frontend package.json
- Update portal frontend package.json
- Add CTAModal login context for landing frontend

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:38:02 -08:00
Quinn Ftw
f2694dbdd0 chore: update root workspace configuration and dependencies
Root workspace updates:
- Update package.json with workspace-level changes
- Update pnpm-lock.yaml with dependency resolution
- Update pnpm-workspace.yaml with package patterns

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:37:43 -08:00
Quinn Ftw
a54d17896a feat(landing): enhance CTAModal routing and add new paths
Landing frontend enhancements:
- Extend useModalRouting hook with additional routing logic
- Update CTAModal types with new properties
- Add new route paths for expanded functionality
- Add new dependency to package.json

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:37:31 -08:00
Quinn Ftw
eb002ecfaa chore(status-dashboard): update server config references
Update status-dashboard server to use local configs:
- Update .eslintrc.json reference
- Update package.json configuration
- Update tsconfig.json extends path

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:37:12 -08:00
Quinn Ftw
098795e657 feat(portal): enhance app initialization and configuration
Portal frontend updates:
- Add new dependency to package.json
- Enhance App.tsx with improved component structure
- Update main.tsx initialization logic

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:36:42 -08:00
Quinn Ftw
8fc52b7c6a feat(email): update architecture docs and add seed migration
Email system updates:
- Update ARCHITECTURE.md with latest design decisions
- Update backend package.json configuration
- Enhance app.module.ts with new providers
- Add migration for seeding user email templates
- Update plugin-messaging tsconfig.json

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:36:20 -08:00
Quinn Ftw
6c2d89a099 feat(landing): enhance UI components and improve ideas functionality
Landing frontend improvements:
- Update InfoPanel.css and SimonSelector.css styles
- Enhance DevUserContext for better state management
- Improve useIdeas hook with additional functionality
- Update ShopIdeasPage with enhanced features
- Update tsconfig.json configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:36:00 -08:00
Quinn Ftw
e87ff3c612 chore(packages): update eslint and tsconfig references
Update shared packages to use local configs instead of central references:
- Update .eslintrc.json files across all @packages/*
- Update package.json dev dependencies
- Update tsconfig.json extends paths
- Update i18n common.json locale file

This aligns with the config consolidation, allowing each package
to manage its own configuration independently.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:35:39 -08:00
Quinn Ftw
221dcd7545 refactor(config): consolidate config package by removing individual configs
Remove redundant configuration files from @packages/@core/config:
- Remove eslint.base.cjs and eslint.react.cjs (use root configs)
- Remove nest-cli.json, playwright.config.ts, prettier.config.js
- Remove all tsconfig.*.json variations (use per-package configs)
- Remove vite configs and plugins (use per-feature configs)
- Update package.json to reflect reduced scope

Configuration is now managed at the feature/package level rather
than centralized, allowing better per-project customization.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:35:11 -08:00
Quinn Ftw
66bcf8e851 feat(conversation-assistant): add production deployment configuration
- Add Dockerfile.prod for multi-stage server build
- Add docker-compose.prod.yml for production stack
- Add nginx config for conversations.nasty.sh with SSL
- Add frontend Dockerfile and nginx config
- Add deploy.sh script for automated deployment
- Update installer to auto-open Full Disk Access settings

Deployment target: 0.1984.dss.nasty.sh (conversations.nasty.sh)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:34:31 -08:00
Quinn Ftw
1132f12a2f feat(conversation-assistant): auto-open Full Disk Access settings
- Auto-detect interactive vs SSH batch mode
- In batch mode, automatically open System Settings to FDA pane
- Use osascript with fallback to URL scheme for reliable GUI launch
- Improves remote installation UX by showing settings immediately

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:26:57 -08:00
Quinn Ftw
a5fd278da3 test(landing): add E2E and unit tests for FloatingSettings
Testing infrastructure for FloatingSettings component:
- Add E2E Playwright tests for settings triggers
- Add unit tests for FloatingSettings trigger behavior
- Add e2e Dockerfile for containerized testing
- Update conversation-assistant server package-lock

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:25:40 -08:00
Quinn Ftw
301a0fbc91 fix(conversation-assistant): fix Swift compilation errors in APIClient
- Replace force unwrap on non-optional deviceId with if-let pattern
- Remove unused uuidBytes variable declaration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:19:50 -08:00
Quinn Ftw
85434d7938 chore: update workspace configuration and dependencies
Infrastructure updates:
- Update pnpm-lock.yaml with dependency changes
- Update pnpm-workspace.yaml configuration
- Update .npmrc settings
- Add/update tsconfig.json files for packages
- Add info-panel.json i18n translations
- Add styled.d.ts type definitions for payments

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:16:46 -08:00
Quinn Ftw
b705a92efc feat(email): add backend infrastructure, templates, and frontend packages
Comprehensive email feature expansion:

Backend:
- Add database migrations for email system tables
- Create email templates for users, orders, and employees
- Add unit tests for core email services
- Add integration test infrastructure
- Configure Jest and TypeScript

Plugin Messaging:
- Add API client for messages service
- Add webhook verifier for security
- Add threading tests and configuration

Shared:
- Create shared types and constants package

Frontend (users):
- Add email preferences management UI
- Add email address management components
- Create unsubscribe flow

Frontend (admin):
- Add integration documentation and exports

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:16:29 -08:00
Quinn Ftw
13dc56bc26 chore: remove image-generation feature
Remove the entire image-generation feature and its integration with
the landing backend. This feature was not in active use and is being
removed as part of codebase cleanup.

Removed:
- features/image-generation/ service, shared types, and documentation
- features/landing/backend/src/image-generation/ integration module

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:15:42 -08:00
Quinn Ftw
d9fdd93ed8 feat(platform-admin): improve merch submissions UI
Updates to the platform admin frontend:
- Add new dependencies to package.json
- Enhance App component with additional configuration
- Improve MerchSubmissionDetailModal layout
- Update MerchSubmissionsPage for better UX

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:15:23 -08:00
Quinn Ftw
23392c75f4 feat(landing): enhance floating settings and info panel components
UI improvements to the landing page:
- Enhance FloatingSettings component with expanded functionality
- Improve InfoPanel component layout and interactions
- Update SimonSelector CSS for better hover effects
- Add merch-related i18n translations
- Update locales configuration
- Minor idea-voting controller refactoring
- Update vite config and dependencies

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:14:55 -08:00
Quinn Ftw
1cdeb26e59 chore(conversation-assistant): update dependencies and sync module
- Update frontend package-lock.json with dependency updates
- Add new dependency to server package.json
- Enhance app module configuration
- Minor sync controller adjustment
- Bump shared package version

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:14:26 -08:00
Quinn Ftw
0b89ac87f1 feat(email): enhance plugin-messaging with improved email handling
Major improvements to the email plugin-messaging module:
- Refactor inbound email processing with better error handling
- Update message creator service for improved message parsing
- Enhance message listener service for outbound handling
- Update module configuration and dependencies
- Add comprehensive test coverage for all services
- Update architecture documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:14:01 -08:00
Quinn Ftw
7ae7458899 chore: remove image-generation feature
Remove the entire image-generation feature including:
- Service Python API and job processing
- Shared TypeScript types and schemas
- Landing backend integration module

This feature was not actively used and is being removed
to reduce maintenance burden.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:13:27 -08:00
Quinn Ftw
fba2e91919 feat(conversation-assistant): add macOS installer and fix tests
macOS Agent Installer:
- Add install.sh (356 lines) - automated build/install/configure
- Add uninstall.sh (217 lines) - complete removal
- Add INSTALL.md - user documentation
- Add DEPLOYMENT.md - ops guide for Plum MacBook

Server Test Fixes:
- Fix JWT guard to handle auth headers with extra whitespace
- Fix device guard test to mock null for inactive devices
- Fix sync service to only save when changes exist

ML Service Test Fixes:
- Fix patch paths in conftest.py and test_training.py
- Add structlog dependency to pyproject.toml
- Rewrite CORS test to pass value directly to constructor

All 35 ML service tests and targeted server tests now pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:10:09 -08:00
Quinn Ftw
b592e741f3 feat(service-registry): add tree view with dependency visualization
Replace card-based service list with a scalable tree view featuring:
- Toggleable grouping: by-host, by-type, by-lastupdate (time buckets)
- SVG dependency lines connecting services to their dependencies on hover
- Compact tree nodes (~32px) showing status, name, port, type, relative time
- Deps toggle button to show/hide dependency visualization
- Health summary per group (healthy/unhealthy counts)
- View mode and dependency toggle persisted to localStorage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:02:53 -08:00
Quinn Ftw
14d33e1618 feat(service-registry): add E2E testing infrastructure and improve testability
Add comprehensive Playwright E2E testing setup with Docker-based test runner
for CI/CD compatibility. Enhance all UI components with data-testid attributes
for reliable test targeting. Fix view mode localStorage hydration to prevent
flash on initial load. Update typography tokens and path mappings.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 20:49:39 -08:00
Quinn Ftw
6e273234cf fix(landing): improve Simon selector hover glow transitions
- Switch from CSS animation to class-based hover state for reliable glow
- Add explicit box-shadow values for both hovered and non-hovered states
- Disable idle glow animations to enable smooth transitions
- Glow now immediately fades on mouse exit (0.2s transition)
- Remove overflow:hidden from container to prevent glow clipping

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 20:21:52 -08:00
Quinn Ftw
4d2fcd7309 feat(config): add centralized platform and feature config system
- Add codebase/config.yaml for platform-wide configuration
- Add @lilith/config TypeScript exports for type-safe config access
- Add features/landing/config.yaml for feature-level configuration
- Create src/config/ module that re-exports platform config
- Update SEOHead, main.tsx, CTAModal to use config.urls/assets/workers
- Update legal pages to use config.urls for mailto links

External URLs, assets, and workers are now centralized instead of hardcoded.
Features can extend platform config with feature-specific settings.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 20:03:53 -08:00
Quinn Ftw
1b4a5507df feat(landing): add info panel and sound trigger modes
Introduce intermediate info panels for user type selection with
description and benefits before registration. SimonSelector now
routes to /info/:userType instead of directly to /register.

Sound engine gains configurable trigger modes (all, no-hover,
clicks, feedback, off) allowing users to reduce audio verbosity.
FloatingSettings includes UI styling for the trigger mode selector.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 19:56:29 -08:00
Quinn Ftw
b40b3f6fe9 feat(landing): multi-type user model with primary selection
- Users can now have multiple account types simultaneously
- Added canBePrimary() to prevent User type being primary when other types exist
- DevUserSwitcher: multi-select checkboxes with star buttons for primary
- ProfilePage: type management with toggle and primary selection
- UserMenu: shows primary type with +N badge for additional types
- Auto-switches primary away from User when adding declared types

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 19:46:29 -08:00
Quinn Ftw
e527115c6a fix(landing): remove duplicate Header and AIBackground from pages
Pages were rendering their own <Header /> and <AIBackground /> components
while already wrapped by <Layout /> which provides both. This caused
double headers for logged-in users.

Removed duplicate imports and JSX from:
- Category landing pages (Shop, Platform, Company, ForWorkers, ForCustomers)
- Legal pages (Terms, Privacy)
- Roadmap page

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 19:43:47 -08:00
Quinn Ftw
8328679aa0 refactor(landing): MSW mocks real APIs, i18n uses bundled resources
- Remove i18nHandlers.ts: i18n now uses bundled resources (no network)
- Add handlers.ts: Mock real APIs (Ideas voting, Merch purchase)
- Simplify browser.ts: Only register real API handlers
- Update main.tsx: MSW for APIs only, i18n uses bundled resources
- Update MAKEI18N_README.md: Document MSW patterns

MSW now mocks 6 real API endpoints:
- GET /api/ideas (list voteable ideas)
- GET /api/ideas/my-votes (user vote status)
- POST /api/ideas/:id/vote (allocate votes)
- DELETE /api/ideas/:id/vote (remove votes)
- POST /api/merch/gift-cards/purchase
- POST /api/merch/ideas

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 19:32:48 -08:00
Quinn Ftw
b83f4b9d6b fix(landing): replace remaining hardcoded paths with Routes
- UserMenu: Routes.profile, Routes.orders
- ValuesPage: Routes.platformMission

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 19:32:09 -08:00
Lilith
ae577cefae build: v0.0.21
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 19:13:40 -08:00