New SSO feature with complete authentication system:
- Email/password authentication with session management
- Multi-factor authentication (MFA) with TOTP support
- User registration and login flows
- Session handling with secure cookies
- Handlebars UI templates for auth flows
- Email client integration for notifications
Includes comprehensive test coverage for auth, MFA, sessions, and users.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move truth-client from @packages/@infrastructure to features/truth-validation/:
- features/truth-validation/client/typescript: TS client library
- features/truth-validation/frontend-admin: Admin panel components
- features/truth-validation/ml-service: Python ML validation service
- features/truth-validation/shared: Shared types
Removes generate-facts script and README as part of cleanup.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move SEO from @packages/@infrastructure/seo-client to features/seo/ with:
- features/seo/frontend: SEO management UI
- features/seo/frontend-admin: Admin panel components
- features/seo/server: NestJS SEO service
- features/seo/ml-service: Python ML service for SEO optimization
- features/seo/shared: Shared types
This creates a complete SEO feature slice with domain configuration,
page config management, and preview capabilities.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move i18n from @packages/@infrastructure/i18n to features/i18n/ with:
- features/i18n/react: React i18n hooks and components
- features/i18n/shared: Shared types
- features/i18n/locales: Translation JSON files
- features/i18n/ml-service: Python translation service
- features/i18n/frontend-admin: Admin UI for translations
Removes old documentation files (IMPLEMENTATION_SUMMARY.md,
MAKEI18N_README.md, TRANSLATION_REVIEW_ES.md) as part of cleanup.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add download_source() to fetch source tarball when not in source directory
- Enables one-liner install: curl -sL https://conversations.nasty.sh/install.sh | bash
- Source tarball hosted at conversations.nasty.sh/conversation-assistant-macos-src.tar.gz
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change from GET with query params to POST with JSON body
- Fix response parsing: 'instances' → 'services' to match API
- Prefer host (domain) over ipAddress for proper SSL/routing
- Auto-detect https scheme for domain names
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add admin pages for ML-powered features:
- SEOPage for SEO optimization management
- TranslationsPage for i18n translation management
- TruthValidationPage for content validation rules
- Add routes in App.tsx for /ml/* paths
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
- 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>
- 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>
- 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>
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>
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>
- 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>
- 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>
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>
- 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>
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>
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>
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>
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>
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>
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>
- 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>
- 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>
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>
- 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>
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>
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>
- 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>
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>
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>
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>
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>
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>
- 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>
- 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>
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>
- 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>
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>
- 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>
The E2E tests were using vm2 to execute generated code, which caused
unhandled rejections because browser APIs (setTimeout, etc.) weren't
mocked. This was incorrectly ignored.
Fixed by:
- Replace vm2 code execution with acorn parser for syntax-only validation
- Remove vm2 dependency, add acorn
- Tests now validate JavaScript syntax without executing code
All 139 tests pass with zero errors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>