Skip to content

Promote dev to main — homeMaker v1.0#45

Merged
mabry1985 merged 34 commits intomainfrom
dev
Mar 15, 2026
Merged

Promote dev to main — homeMaker v1.0#45
mabry1985 merged 34 commits intomainfrom
dev

Conversation

@mabry1985
Copy link

@mabry1985 mabry1985 commented Mar 15, 2026

Summary

Full homeMaker platform build — 45 features across 9 milestones, from empty fork to production-ready home management app.

What's Included

  • M1: Platform Adaptation — UI rebrand, agent context for home management, TS strict mode
  • M2: Sensor Dashboard — dedicated IoT view, command push, history persistence
  • M3: Budget Tracking — backend + UI (income/expenses/categories/monthly summaries)
  • M4: Secrets Vault — AES-256-GCM encrypted storage, eye-toggle UI, clipboard auto-clear
  • M5: Security Hardening — rate limiting, helmet middleware
  • M6: Home Inventory — asset tracking, warranty monitoring, vendor directory, Ava tools
  • M7: Maintenance Scheduling — recurring tasks, completion history, calendar/todo auto-generation
  • M8: Integrations — Home Assistant sensor bridge, Weather API
  • M9: Gamification — Home Health Score (0-100), XP/levels (10 tiers), 30 achievements, celebrations (confetti/toasts/level-up), AI quest engine
  • Household Chat — family group chat with Ava monitoring and contextual AI responses
  • Storybook — stories for all new components
  • Docs — clean Diataxis tree (130+ inherited files replaced with 17 focused pages)
  • Tauri Spike — proof-of-concept for replacing Electron

Stats

  • 34 commits
  • 38 PRs merged
  • ~$95 agent cost
  • ~5 hours total

Test plan

  • npm install completes without errors
  • npm run dev:full starts UI + server
  • Inventory: create an asset, verify warranty status badge
  • Maintenance: create a schedule, mark complete, verify nextDueAt recalculates
  • Budget: add transactions, verify monthly summary
  • Vault: store a secret, verify eye-toggle and clipboard copy
  • Sensors: verify dashboard shows registered sensors
  • Gamification: verify Home Health Score, XP awards on actions
  • Profile page: achievements grid, level display, streaks
  • Family Chat: send message, verify Ava responds to home queries
  • Storybook: npm run storybook renders all stories

Summary by CodeRabbit

Release Notes

  • New Features

    • Added Gamification system: earn XP, unlock achievements, progress through levels, and complete quests
    • Added Home Inventory with asset tracking, warranty monitoring, and replacement value reports
    • Added Maintenance Scheduling to track recurring home tasks and mark completions
    • Added Budget management with category organization and transaction tracking
    • Added Vendor Directory for home service providers
    • Added Family Chat with AI-powered responses
    • Added Home Health Score dashboard widget tracking overall household status
    • Enhanced IoT sensors with command queuing and historical data with retention
    • Added Secrets Vault with AES-256-GCM encryption for secure credential storage
  • Security

    • Added security hardening with rate limiting and helmet middleware

mabry1985 and others added 30 commits March 15, 2026 01:06
Update window title to 'homeMaker', replace sidebar logo text from
'protoLabs' to 'homeMaker', and simplify navigation to show only
home-relevant items (Dashboard, Board, Calendar, Todo, Notes, Chat).
Dev-specific nav items (Spec, Docs, Designs, System View, File Editor,
Project Management) are removed from the sidebar.

Co-authored-by: GitHub CI <ci@example.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: GitHub CI <ci@example.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
- Update CLAUDE.md agent context to emphasize household management
  (research, plan, track) rather than software development
- Update DEFAULT_AGENT_SYSTEM_PROMPT to frame agents as household
  assistants defaulting to research-and-report mode
- Change default feature complexity from 'medium' to 'small' since
  most home tasks (product research, how-to lookups) are quick

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Claude Agent <agent@protolabsai.com>
Add explicit "strict": true to all 15 lib tsconfig.json files. The base
tsconfig (libs/tsconfig.base.json) and apps already had strict mode enabled,
so these libs were already inheriting it. Making it explicit in each package
prevents accidental regression if the base config changes.

Typecheck passes with zero errors across all 20 turbo tasks.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements InventoryService with full CRUD, full-text search, warranty
reporting, and per-category value aggregation backed by the shared
homemaker.db SQLite database. Routes mounted at /api/inventory.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ing assets (#10)

- Add inventory view with search, category/location filter chips, and asset grid
- Add asset card component with warranty status indicators (active/expiring/expired)
- Add asset detail panel (slide-out sheet) with edit form and linked sensor readings
- Add asset creation dialog with required fields and collapsible optional fields
- Add warranty report sidebar with total assets, active/expiring/expired counts and replacement value
- Add React Query-style hooks for inventory CRUD and warranty data fetching
- Register /inventory TanStack Router route
- Add Inventory nav item with Package icon to sidebar navigation

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ing tasks (#11)

Implements the complete maintenance scheduling UI including:
- React Query hooks (useMaintenanceSchedules, useCreateSchedule, useCompleteSchedule, useUpdateSchedule)
- ScheduleCard with color-coded due status badges (overdue/due-soon/upcoming)
- AddScheduleDialog with interval presets (30/60/90/180/365 days) and category dropdown
- CompleteDialog capturing who completed, notes, and actual cost
- ScheduleDetailPanel slide-out with edit form and reverse-chronological completion history
- DueSummary cards showing overdue (red), due this week (yellow), due this month (blue), up to date (green)
- MaintenanceView container with All/Overdue/Due This Week/Due This Month/Up to Date filter tabs
- TanStack Router route at /maintenance
- CalendarClock sidebar navigation item

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ion (#12)

Adds a daily 8 AM scheduler tick that auto-generates calendar events for
upcoming maintenance schedules (within 7 days) and high-priority todo items
for overdue schedules. Deduplication uses sourceId to prevent duplicate entries
on repeated runs. Notifications are emitted for each overdue schedule.

- New MaintenanceService (SQLite) with getUpcoming(days) and getOverdue() queries
- New MaintenanceSchedule types in @protolabsai/types
- CalendarEventType extended with 'maintenance'
- NotificationType extended with 'maintenance_overdue'
- Event types 'maintenance:tick' and 'maintenance:overdue' registered
- Daily tick registered in scheduler.module.ts at cron '0 8 * * *'

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…s, streaks, and home health scoring (#14)

Adds a full gamification backend service for homeMaker:
- GamificationProfile types, AchievementDefinition, XpEvent, Quest interfaces in @protolabsai/types
- SQLite schema: gamification_profile, earned_achievements, xp_history, active_quests tables
- Level calculator with exponential XP curve (10 levels, L1=Homeowner through L10=Home Legend)
- Home health score calculator across 4 pillars: maintenance, inventory, budget, systems (0-25 each)
- Achievement catalog (20 achievements across 6 categories) with pure condition evaluator
- GamificationService: getProfile, awardXp, checkAchievements, updateStreaks, calculateHomeHealthScore, getAchievements, markAchievementSeen, getQuests
- REST API at /api/gamification: GET /profile, /achievements, /health-score, /quests; POST /mark-achievement-seen/:id
- XP event listeners wired to maintenance:tick, sensor:registered, feature:completed domain events
- 5 new gamification event types in EventType union
- Comprehensive unit tests for all utilities and service methods

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Add recurring maintenance scheduling with full CRUD, completion tracking,
and due-date summaries for the homeMaker household management hub.

- MaintenanceSchedule and MaintenanceCompletion types in libs/types
- MaintenanceService with SQLite persistence (BudgetService pattern)
- REST routes: create, list, get, update, delete, complete, history
- Overdue/upcoming/summary endpoints for dashboard integration
- Wired into ServiceContainer and registered at /api/maintenance

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: define all ~30 achievements and wire check engine to data mutations

Add 23 new achievement definitions across onboarding, maintenance,
inventory, budget, seasonal, and secret categories. Wire the check
engine to fire on inventory creates/updates and budget category/transaction
mutations (not polling). Secret achievements are hidden until earned.

Achievement catalog additions:
- Onboarding: homeowner, connected_home, scheduled, budgeted, vault_keeper
- Maintenance: on_schedule, clockwork, preventive_pro, year_of_prevention, zero_overdue
- Inventory: cataloger, museum_curator, warranty_warrior
- Budget: financial_fortress
- Seasonal: winter_ready, spring_fresh, summer_set, fall_prepared
- Secret: night_owl, speed_demon, explorer, centurion, streak_master

Check engine wiring:
- inventory:asset-created / inventory:asset-updated → checkAchievements()
- budget:category-created → award 10 XP + checkAchievements()
- budget:transaction-created → award 5 XP + checkAchievements()
- budget:month-closed → updateStreaks('budget') + optional 100 XP + checkAchievements()
- Month-close detection: auto-fires when first transaction of new month is created

Hidden achievement masking: getAchievements() returns title='???' and
generic description for unearned hidden achievements.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: Achievement definitions and check engine

---------

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…#17)

- Add pillarHints to HomeHealthScore type for actionable improvement suggestions
- Rewrite health-score-calculator.ts with feature-spec algorithm:
  - Maintenance: on-time completion rate (last 6 months, 0-15pts), overdue penalty (-2/task), streak bonus (+1/5 completions, max +5pts)
  - Inventory: asset count (0-10pts), documentation quality (photos+warranty dates, 0-10pts), warranty tracking (0-5pts)
  - Budget: current month status (0-10pts), 3-month trend (0-10pts), budget streak bonus (0-5pts)
  - Systems: active sensor ratio (0-15pts), sensor count (0-5pts), vault usage (0-5pts)
- Add 5-minute result cache to avoid redundant recalculations
- Change event threshold from any-change to 2+ point delta
- Accept SensorRegistryService in GamificationService constructor for live sensor state
- Pass sensorRegistryService to GamificationService in server wiring
- Update tests to use correct schema and new algorithm expectations

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…dget, and sidebar XP bar (#18)

- Add profile view with level card, achievement grid, streak display,
  health breakdown, quest list, and XP history components
- Add /profile route and Trophy nav item to sidebar
- Add sidebar XP bar showing level title, progress bar, and XP counts
- Add Home Health Score dashboard widget with circular progress ring,
  4 pillar indicators, and click-to-profile navigation
- Add gamification client mixin and React Query hooks with WebSocket
  real-time event invalidation
- Add asset progress bar to inventory view header
- Add maintenance streak indicator with flame icon to maintenance view

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
… event hooks (#19)

- Maintenance route now emits maintenance:tick with onTime flag on completion
- Inventory route includes hasPhotoAndReceipt in asset-created event for XP bonus (25 vs 15)
- All XP listeners recalculate Home Health Score (forced) after mutations
- Quest progress matching added for maintenance, inventory, and budget categories
- Maintenance routes receive EventEmitter via dependency injection

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds dopamine-inducing micro-interactions that fire automatically when
gamification WebSocket events arrive. Celebrations are proportional to
accomplishment: XP gains show a small toast, streak milestones add confetti,
achievement unlocks show a top banner + medium confetti, and level-ups trigger
a full-screen overlay with a 3-second rainbow confetti burst.

- New component: apps/ui/src/components/gamification/celebrations.tsx
  - XP gained: gold toast with mini progress bar, 3s auto-dismiss
  - Achievement unlock: top-center banner + gold/white confetti, 5s
  - Level up: full-screen overlay with animated counter + rainbow confetti
  - Streak milestone (5/10/25/50/100): orange toast + small confetti
  - Home health +5: subtle green toast
- New feature flags: gamificationCelebrations (default true), gamificationSounds (default false)
- canvas-confetti 1.9.3 + @types/canvas-confetti added to apps/ui
- CelebrationProvider mounted in both main app layout and dashboard route

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements a dedicated full-page sensor dashboard that displays all
registered IoT sensors as cards with state badges, last-seen timestamps,
and latest data payloads. Polls GET /api/sensors every 10s and subscribes
to WebSocket sensor:data-received events for real-time state updates.
Offline sensors render with reduced opacity.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add rate limiting and security middleware hardening

Add helmet for security headers, per-route rate limiters (vault read/write,
sensor report by sensor ID, general API), and reduce JSON body limit to 1mb.
All rate-limited responses return standardized 429 with { success: false,
error: 'Too many requests' }.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: Rate limiting and security middleware

---------

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
… and transactions (#24)

Implements the complete budget tracking UI:
- Month navigation with < / > arrows (PanelHeader actions)
- Summary cards: Total Income (green), Total Expenses (red), Balance (color by sign)
- CSS-only horizontal category breakdown bars (proportional widths)
- Paginated transaction list with type badge, amount, category, date, description
- Add transaction dialog with type, amount, category, description, date, recurrence
- Budget route at /budget and sidebar nav item with DollarSign icon
- All budget data refreshes when month changes via useBudget hook

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…25)

Co-authored-by: Claude Agent <agent@protolabsai.com>
Implements an AES-256-GCM encrypted local secrets vault for homeMaker.
Secrets are stored in SQLite with only ciphertext persisted -- the list
endpoint never returns decrypted values.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements the vendor directory backend module for tracking home service
providers. Includes SQLite-backed VendorService with CRUD, search, category
filtering, and asset-linked lookups, plus REST routes wired into the server.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…d copy (#28)

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Extend SensorRegistryService with SQLite-backed historical storage for
all sensor readings. Every report() call now persists to the existing
sensor_readings table in addition to the in-memory latest-reading cache.

New service methods:
- getHistory(sensorId, options?) -- paginated historical query with
  date range filtering, sorted by receivedAt descending
- getHistoryAggregated(sensorId, options) -- avg/min/max/count grouped
  by hour/day/week for a given numeric field via json_extract
- cleanupOldReadings() -- deletes readings older than retention period
  (SENSOR_HISTORY_RETENTION_DAYS env var, default 30 days)

New API endpoints:
- GET /api/sensors/:id/history?startDate&endDate&limit
- GET /api/sensors/:id/history/aggregated?interval&field&startDate&endDate

Cleanup job registered in scheduler at 3 AM daily. DB is injected via
constructor (optional -- degrades gracefully to in-memory-only when
no DB is available).

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements the vendor directory view with search, category filtering,
add/edit/delete dialogs, and a detail slide-out panel showing linked assets.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…les (#33)

Adds 9 new Ava AI assistant tools gated by the homeManagement config flag:

Inventory tools:
- search_inventory(query) — full-text search across asset fields
- get_warranty_report() — assets grouped by warranty status
- get_asset_value() — total replacement cost by category

Vendor tools:
- find_vendor(query) — search contractor directory
- find_vendor_for_asset(assetId) — vendors linked to an asset

Maintenance tools:
- get_overdue_maintenance() — all overdue schedules
- get_upcoming_maintenance(days) — schedules due within N days
- get_maintenance_summary() — overdue/week/month/up-to-date counts
- complete_maintenance(scheduleId, completedBy) — mark task done

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds 27 files covering every new UI component across 8 modules:
- Inventory: AssetCard, AssetDetailPanel, AddAssetDialog, WarrantyReport
- Maintenance: ScheduleCard, CompleteDialog, DueSummary, ScheduleDetailPanel
- Vendors: VendorCard, VendorDetailPanel
- Budget: SummaryCards, TransactionList, CategoryBreakdown, AddTransactionDialog
- Profile/Gamification: LevelCard, AchievementGrid, StreakDisplay, HealthBreakdown, QuestList
- Sensors: SensorCard
- Vault: VaultEntryCard, AddEntryDialog
- Celebrations: XpToast, AchievementBanner, LevelUpOverlay, StreakMilestoneToast

Shared infrastructure:
- components/stories/mockData.ts — realistic mock data for all modules
- components/stories/mockProviders.tsx — React Query decorator factory

Each component has 3-6 story variants (default, edge cases, empty/loading).
React Query-dependent components use withQueryClient() to pre-populate
the cache. Celebration sub-components (private in celebrations.tsx) are
replicated as visual stories with play function interaction tests.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Implement contextual quest generation based on home state data with
automatic progress tracking and XP rewards. Quests are short-term goals
generated from maintenance backlogs, inventory gaps, budget activity,
sensor status, and seasonal home care reminders.

Key changes:
- QuestGeneratorService: evaluates home state and generates prioritized
  quest candidates (maintenance > inventory > budget > sensor > seasonal)
- GamificationService: new quest lifecycle methods (insertQuest,
  incrementQuestProgress, completeQuestById) with event emission
- Quest API routes at /gamification/quests (list, complete, generate)
- Ava tools: get_active_quests and suggest_quest for chat integration
- XP event listeners updated to use real incrementQuestProgress
- Quest events registered: quest-generated, quest-completed,
  quest-expired, quest-progress
- Types: QuestCategory, QuestStatus, extended Quest interface with
  status/createdAt/completedAt fields
- Database: active_quests table extended with status, completedAt columns

Enforces max 3 active quests, no duplicate categories, expired quest
cleanup, and double-XP prevention per deviation rules.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
… tree (#36)

Delete all inherited protoMaker/protoLabs documentation (158 files across
concepts, guides, integrations, internal, reference, self-hosting, templates)
and rebuild a clean Diataxis-organized docs tree for homeMaker.

New structure:
- getting-started/: quick-start, installation, first-asset tutorial
- deployment/: docker.md, backup.md (tailscale.md kept)
- platform/: how-it-works, auto-mode, board (Explanation type)
- integrations/: home-assistant, weather (How-to type)
- modules/: unchanged (7 existing homeMaker module reference docs)
- index.md: clean landing page

Updated VitePress config to remove all protoLabs branding and navigation
references; wired in new sidebar sections.

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Build a shared family chat where household members communicate and Ava
participates as an intelligent AI assistant for home-management topics.

Backend:
- ChatChannelService with SQLite persistence and WebSocket broadcast
- AvaClassifier (Haiku) for message topic classification with caching
- AvaResponder (Sonnet) queries maintenance, inventory, budget, vendor data
- AvaProactiveService for overdue maintenance and warranty expiration alerts
- RateLimiter utility (cooldown + hourly cap) to prevent Ava spam
- REST routes at /api/chat-channel (POST send, GET paginated history)
- Register chat:message-received in EventType union

Frontend:
- ChatChannelView with auto-scroll, scroll-to-bottom FAB, empty state
- MessageBubble with Ava-specific purple tint and Sparkles icon
- MessageInput with sender name persistence via localStorage
- useChatChannel hook with REST pagination and WebSocket real-time updates
- Route at /chat-channel, sidebar nav item with MessageCircle icon

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
mabry1985 and others added 4 commits March 15, 2026 05:40
- Add WeatherService that fetches current conditions and 5-day forecast
  from OpenWeatherMap API (free tier) and reports as sensor readings
- Register 'weather:current' and 'weather:forecast' sensors at startup
- Schedule polling every 30 minutes via scheduler module
- Service disables gracefully if OPENWEATHERMAP_API_KEY is not configured
- Expose isPrecipitationExpected(days) helper for maintenance scheduling
- Wire into ServiceContainer for downstream use

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add SensorCommand type, command queue service methods, and REST endpoints

- Add SensorCommand interface and SensorCommandAction type to libs/types
- Register sensor:command-queued event type with typed payload
- Extend SensorRegistryService with commandQueue map, queueCommand, and pollCommands
- Add POST /:id/command and GET /:id/commands route handlers

* feat: add Send Command button and dialog to sensor dashboard UI

- Add useSendCommand mutation hook using React Query
- Create SendCommandDialog with action selector and JSON payload textarea
- Add Send Command button to each SensorCard with Terminal icon
- Toast notification confirms command queued or shows error

---------

Co-authored-by: Claude Agent <agent@protolabsai.com>
* refactor: Home Assistant sensor bridge

* refactor: Home Assistant sensor bridge

---------

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Establishes Tauri v2 project structure as a proof-of-concept replacement for
Electron. Binary size target: under 20MB vs ~300MB. Server runs independently
via Docker/Tailscale; Tauri is a thin webview wrapper only.

Phase 1-5 implementation:
- Add src-tauri/ with Cargo.toml, main.rs, lib.rs, build.rs, tauri.conf.json
- Register plugins: dialog, notification, autostart, deep-link, updater, shell, os
- System tray with click-to-focus and health score tooltip support
- Remove vite-plugin-electron and all Electron conditional build logic
- Add @tauri-apps/api + 8 plugin packages; remove electron/electron-builder
- Create isDesktopApp() utility using isTauri() from @tauri-apps/api/core
- Create tauri-dialog.ts (native file picker + web fallback)
- Create tauri-notification.ts (OS notifications + browser fallback)
- Create tray-manager.ts (health score tray tooltip)
- Update auth.ts: initServerUrl reads VITE_SERVER_URL env var (no Electron IPC)
- Update use-os-detection.ts: uses browser userAgentData only
- Delete src/main.ts (1654 lines), preload.ts, auto-updater.ts, prepare-server.mjs

To run: install Rust + Tauri CLI, then `npm run dev:tauri`

Co-authored-by: Claude Agent <agent@protolabsai.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link

Hi @mabry1985, thank you for your interest in protoMaker! 🙏

We don't accept code contributions via pull requests.

protoMaker uses an ideas-only contribution model — all implementation is handled by AI agents to maintain architectural consistency and code quality standards.

What you can do instead:

  • 💡 Submit your idea using the Idea Submission template — if accepted, our AI agents will implement it
  • 🐛 Report a bug using the Bug Report template
  • Join the discussion on Discord (invite link TBA) to share feedback

You're welcome to fork the repository and use your changes privately — that's what MIT is for. We just can't merge external code back in.

See CONTRIBUTING.md for the full explanation.

Closing this PR automatically.

@github-actions github-actions bot closed this Mar 15, 2026
@mabry1985 mabry1985 merged commit 31f52aa into main Mar 15, 2026
3 of 10 checks passed
@coderabbitai
Copy link

coderabbitai bot commented Mar 15, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5207018b-86fd-44ec-9fe3-ef0e1fd39fdd

📥 Commits

Reviewing files that changed from the base of the PR and between 02da169 and 5ed1286.

📒 Files selected for processing (300)
  • .automaker/context/CLAUDE.md
  • .automaker/context/coding-rules.md
  • CLAUDE.md
  • README.md
  • apps/server/package.json
  • apps/server/src/lib/homemaker-db.ts
  • apps/server/src/lib/rate-limiter.ts
  • apps/server/src/lib/vault-crypto.ts
  • apps/server/src/listeners/xp-event-listeners.ts
  • apps/server/src/routes/budget/categories.ts
  • apps/server/src/routes/budget/index.ts
  • apps/server/src/routes/budget/summary.ts
  • apps/server/src/routes/budget/transactions.ts
  • apps/server/src/routes/chat-channel/index.ts
  • apps/server/src/routes/chat/ava-tools.ts
  • apps/server/src/routes/chat/index.ts
  • apps/server/src/routes/gamification/index.ts
  • apps/server/src/routes/gamification/quests.ts
  • apps/server/src/routes/inventory/index.ts
  • apps/server/src/routes/maintenance/index.ts
  • apps/server/src/routes/sensors/index.ts
  • apps/server/src/routes/vault/create.ts
  • apps/server/src/routes/vault/delete.ts
  • apps/server/src/routes/vault/get.ts
  • apps/server/src/routes/vault/index.ts
  • apps/server/src/routes/vault/list.ts
  • apps/server/src/routes/vault/search.ts
  • apps/server/src/routes/vault/update.ts
  • apps/server/src/routes/vendors/index.ts
  • apps/server/src/server/middleware.ts
  • apps/server/src/server/routes.ts
  • apps/server/src/server/services.ts
  • apps/server/src/services/achievement-catalog.ts
  • apps/server/src/services/achievement-evaluator.ts
  • apps/server/src/services/ava-classifier.ts
  • apps/server/src/services/ava-proactive.ts
  • apps/server/src/services/ava-responder.ts
  • apps/server/src/services/budget-service.ts
  • apps/server/src/services/chat-channel-service.ts
  • apps/server/src/services/gamification-service.ts
  • apps/server/src/services/inventory-service.ts
  • apps/server/src/services/maintenance-service.ts
  • apps/server/src/services/quest-generator-service.ts
  • apps/server/src/services/scheduler.module.ts
  • apps/server/src/services/sensor-registry-service.ts
  • apps/server/src/services/vault-service.ts
  • apps/server/src/services/vendor-service.ts
  • apps/server/src/services/weather-service.ts
  • apps/server/src/utils/health-score-calculator.ts
  • apps/server/src/utils/level-calculator.ts
  • apps/server/tests/gamification-routes.test.ts
  • apps/server/tests/gamification-service.test.ts
  • apps/server/tests/health-score-calculator.test.ts
  • apps/server/tests/level-calculator.test.ts
  • apps/server/tests/quest-generator-service.test.ts
  • apps/ui/index.html
  • apps/ui/package.json
  • apps/ui/scripts/prepare-server.mjs
  • apps/ui/src-tauri/Cargo.toml
  • apps/ui/src-tauri/build.rs
  • apps/ui/src-tauri/capabilities/default.json
  • apps/ui/src-tauri/icons/README.md
  • apps/ui/src-tauri/src/lib.rs
  • apps/ui/src-tauri/src/main.rs
  • apps/ui/src-tauri/tauri.conf.json
  • apps/ui/src/auto-updater.ts
  • apps/ui/src/components/gamification/AchievementBanner.stories.tsx
  • apps/ui/src/components/gamification/LevelUpOverlay.stories.tsx
  • apps/ui/src/components/gamification/StreakMilestoneToast.stories.tsx
  • apps/ui/src/components/gamification/XpToast.stories.tsx
  • apps/ui/src/components/gamification/celebrations.tsx
  • apps/ui/src/components/layout/sidebar.tsx
  • apps/ui/src/components/layout/sidebar/components/automaker-logo.tsx
  • apps/ui/src/components/layout/sidebar/hooks/use-navigation.ts
  • apps/ui/src/components/layout/sidebar/xp-bar.tsx
  • apps/ui/src/components/stories/mockData.ts
  • apps/ui/src/components/stories/mockProviders.tsx
  • apps/ui/src/components/views/budget-view/AddTransactionDialog.stories.tsx
  • apps/ui/src/components/views/budget-view/CategoryBreakdown.stories.tsx
  • apps/ui/src/components/views/budget-view/SummaryCards.stories.tsx
  • apps/ui/src/components/views/budget-view/TransactionList.stories.tsx
  • apps/ui/src/components/views/budget-view/add-transaction-dialog.tsx
  • apps/ui/src/components/views/budget-view/budget-view.tsx
  • apps/ui/src/components/views/budget-view/category-breakdown.tsx
  • apps/ui/src/components/views/budget-view/hooks/use-budget.ts
  • apps/ui/src/components/views/budget-view/index.ts
  • apps/ui/src/components/views/budget-view/summary-cards.tsx
  • apps/ui/src/components/views/budget-view/transaction-list.tsx
  • apps/ui/src/components/views/chat-channel-view/chat-channel-view.tsx
  • apps/ui/src/components/views/chat-channel-view/hooks/use-chat-channel.ts
  • apps/ui/src/components/views/chat-channel-view/message-bubble.tsx
  • apps/ui/src/components/views/chat-channel-view/message-input.tsx
  • apps/ui/src/components/views/dashboard-view.tsx
  • apps/ui/src/components/views/dashboard-view/health-score-widget.tsx
  • apps/ui/src/components/views/inventory-view/AddAssetDialog.stories.tsx
  • apps/ui/src/components/views/inventory-view/AssetCard.stories.tsx
  • apps/ui/src/components/views/inventory-view/AssetDetailPanel.stories.tsx
  • apps/ui/src/components/views/inventory-view/WarrantyReport.stories.tsx
  • apps/ui/src/components/views/inventory-view/add-asset-dialog.tsx
  • apps/ui/src/components/views/inventory-view/asset-card.tsx
  • apps/ui/src/components/views/inventory-view/asset-detail-panel.tsx
  • apps/ui/src/components/views/inventory-view/hooks/use-inventory.ts
  • apps/ui/src/components/views/inventory-view/inventory-view.tsx
  • apps/ui/src/components/views/inventory-view/warranty-report.tsx
  • apps/ui/src/components/views/maintenance-view/CompleteDialog.stories.tsx
  • apps/ui/src/components/views/maintenance-view/DueSummary.stories.tsx
  • apps/ui/src/components/views/maintenance-view/ScheduleCard.stories.tsx
  • apps/ui/src/components/views/maintenance-view/ScheduleDetailPanel.stories.tsx
  • apps/ui/src/components/views/maintenance-view/add-schedule-dialog.tsx
  • apps/ui/src/components/views/maintenance-view/complete-dialog.tsx
  • apps/ui/src/components/views/maintenance-view/due-summary.tsx
  • apps/ui/src/components/views/maintenance-view/hooks/use-maintenance.ts
  • apps/ui/src/components/views/maintenance-view/index.ts
  • apps/ui/src/components/views/maintenance-view/maintenance-view.tsx
  • apps/ui/src/components/views/maintenance-view/schedule-card.tsx
  • apps/ui/src/components/views/maintenance-view/schedule-detail-panel.tsx
  • apps/ui/src/components/views/profile-view/AchievementGrid.stories.tsx
  • apps/ui/src/components/views/profile-view/HealthBreakdown.stories.tsx
  • apps/ui/src/components/views/profile-view/LevelCard.stories.tsx
  • apps/ui/src/components/views/profile-view/QuestList.stories.tsx
  • apps/ui/src/components/views/profile-view/StreakDisplay.stories.tsx
  • apps/ui/src/components/views/profile-view/achievement-grid.tsx
  • apps/ui/src/components/views/profile-view/health-breakdown.tsx
  • apps/ui/src/components/views/profile-view/hooks/use-gamification.ts
  • apps/ui/src/components/views/profile-view/level-card.tsx
  • apps/ui/src/components/views/profile-view/profile-view.tsx
  • apps/ui/src/components/views/profile-view/quest-list.tsx
  • apps/ui/src/components/views/profile-view/streak-display.tsx
  • apps/ui/src/components/views/profile-view/xp-history.tsx
  • apps/ui/src/components/views/sensors-view/SensorCard.stories.tsx
  • apps/ui/src/components/views/sensors-view/hooks/use-send-command.ts
  • apps/ui/src/components/views/sensors-view/hooks/use-sensors.ts
  • apps/ui/src/components/views/sensors-view/index.ts
  • apps/ui/src/components/views/sensors-view/send-command-dialog.tsx
  • apps/ui/src/components/views/sensors-view/sensor-card.tsx
  • apps/ui/src/components/views/sensors-view/sensors-view.tsx
  • apps/ui/src/components/views/settings-view/developer/developer-section.tsx
  • apps/ui/src/components/views/vault-view/AddEntryDialog.stories.tsx
  • apps/ui/src/components/views/vault-view/VaultEntryCard.stories.tsx
  • apps/ui/src/components/views/vault-view/add-entry-dialog.tsx
  • apps/ui/src/components/views/vault-view/hooks/use-vault.ts
  • apps/ui/src/components/views/vault-view/index.ts
  • apps/ui/src/components/views/vault-view/vault-entry-card.tsx
  • apps/ui/src/components/views/vault-view/vault-view.tsx
  • apps/ui/src/components/views/vendors-view/VendorCard.stories.tsx
  • apps/ui/src/components/views/vendors-view/VendorDetailPanel.stories.tsx
  • apps/ui/src/hooks/use-os-detection.ts
  • apps/ui/src/lib/clients/auth.ts
  • apps/ui/src/lib/clients/gamification-client.ts
  • apps/ui/src/lib/http-api-client.ts
  • apps/ui/src/lib/local-storage.ts
  • apps/ui/src/lib/tauri-dialog.ts
  • apps/ui/src/lib/tauri-notification.ts
  • apps/ui/src/lib/tray-manager.ts
  • apps/ui/src/lib/utils/is-desktop-app.ts
  • apps/ui/src/main.ts
  • apps/ui/src/preload.ts
  • apps/ui/src/routes/__root.tsx
  • apps/ui/src/routes/budget.tsx
  • apps/ui/src/routes/chat-channel.tsx
  • apps/ui/src/routes/inventory.tsx
  • apps/ui/src/routes/maintenance.tsx
  • apps/ui/src/routes/profile.tsx
  • apps/ui/src/routes/sensors.tsx
  • apps/ui/src/routes/vault.tsx
  • apps/ui/vite.config.mts
  • docs/.vitepress/config.mts
  • docs/README.md
  • docs/concepts/agent-architecture.md
  • docs/concepts/agent-philosophy.md
  • docs/concepts/escalation-routing.md
  • docs/concepts/feature-lifecycle.md
  • docs/concepts/how-it-works.md
  • docs/concepts/index.md
  • docs/concepts/pipeline.md
  • docs/concepts/project-lifecycle.md
  • docs/concepts/prompt-engineering.md
  • docs/concepts/reliability.md
  • docs/deployment/backup.md
  • docs/deployment/docker.md
  • docs/deployment/tailscale.md
  • docs/disclaimer.md
  • docs/getting-started/first-asset.md
  • docs/getting-started/index.md
  • docs/getting-started/installation-fedora.md
  • docs/getting-started/installation.md
  • docs/guides/agent-manifests.md
  • docs/guides/agent-memory.md
  • docs/guides/authoring-skills.md
  • docs/guides/context-files.md
  • docs/guides/deployment-modes.md
  • docs/guides/feature-flags.md
  • docs/guides/flow-control.md
  • docs/guides/gotchas.md
  • docs/guides/index.md
  • docs/guides/writing-prompts-reference.md
  • docs/guides/writing-prompts.md
  • docs/index.md
  • docs/integrations/browser-extension.md
  • docs/integrations/claude-plugin.md
  • docs/integrations/discord.md
  • docs/integrations/github.md
  • docs/integrations/home-assistant.md
  • docs/integrations/index.md
  • docs/integrations/langfuse.md
  • docs/integrations/plugin-commands.md
  • docs/integrations/plugin-deep-dive.md
  • docs/integrations/plugin-quickstart.md
  • docs/integrations/templates/ha-register-sensors.yaml
  • docs/integrations/templates/ha-sensor-bridge.yaml
  • docs/integrations/weather.md
  • docs/internal/agents/adding-team-members.md
  • docs/internal/agents/adding-teammates.md
  • docs/internal/agents/ceremonies.md
  • docs/internal/agents/creating-agent-teams.md
  • docs/internal/agents/mcp-integration.md
  • docs/internal/agents/prompt-techniques.md
  • docs/internal/agents/sdk-integration.md
  • docs/internal/authority/index.md
  • docs/internal/authority/org-chart.md
  • docs/internal/authority/roles.md
  • docs/internal/dev/add-new-cursor-model.md
  • docs/internal/dev/ava-chat-system.md
  • docs/internal/dev/branch-strategy.md
  • docs/internal/dev/clean-code.md
  • docs/internal/dev/contribution-model.md
  • docs/internal/dev/creating-mcp-tools.md
  • docs/internal/dev/design-philosophy.md
  • docs/internal/dev/design-system.md
  • docs/internal/dev/desktop-testing.md
  • docs/internal/dev/distributed-sync.md
  • docs/internal/dev/docs-site.md
  • docs/internal/dev/docs-standard.md
  • docs/internal/dev/documentation-philosophy.md
  • docs/internal/dev/environment-setup.md
  • docs/internal/dev/event-ledger.md
  • docs/internal/dev/flows.md
  • docs/internal/dev/folder-pattern.md
  • docs/internal/dev/frontend-philosophy.md
  • docs/internal/dev/git-workflow.md
  • docs/internal/dev/inbox-system.md
  • docs/internal/dev/index.md
  • docs/internal/dev/instance-state.md
  • docs/internal/dev/integration-registry.md
  • docs/internal/dev/issue-management.md
  • docs/internal/dev/lead-engineer-pipeline.md
  • docs/internal/dev/metrics.md
  • docs/internal/dev/monorepo-architecture.md
  • docs/internal/dev/notes-panel.md
  • docs/internal/dev/notes-sync.md
  • docs/internal/dev/observability-package.md
  • docs/internal/dev/pr-remediation-loop.md
  • docs/internal/dev/release.md
  • docs/internal/dev/shared-packages.md
  • docs/internal/dev/system-architecture.md
  • docs/internal/dev/terminal.md
  • docs/internal/dev/testing-patterns.md
  • docs/internal/dev/tmux.md
  • docs/internal/dev/tool-package.md
  • docs/internal/dev/ui-architecture.md
  • docs/internal/dev/ui-standards.md
  • docs/internal/dev/versioning.md
  • docs/internal/index.md
  • docs/internal/protolabs/agency-architecture.md
  • docs/internal/protolabs/agency-overview.md
  • docs/internal/protolabs/antagonistic-review.md
  • docs/internal/protolabs/brand.md
  • docs/internal/protolabs/ci-cd-setup.md
  • docs/internal/protolabs/content-pipeline.md
  • docs/internal/protolabs/flow-development-pattern.md
  • docs/internal/protolabs/index.md
  • docs/internal/protolabs/landing-pages.md
  • docs/internal/protolabs/open-source-strategy.md
  • docs/internal/protolabs/setup-pipeline.md
  • docs/internal/server/actionable-items.md
  • docs/internal/server/antagonistic-review.md
  • docs/internal/server/automation-registry.md
  • docs/internal/server/ava-chat.md
  • docs/internal/server/calendar-api.md
  • docs/internal/server/channel-handlers.md
  • docs/internal/server/coderabbit-resolver-service.md
  • docs/internal/server/dora-metrics.md
  • docs/internal/server/git-workflow-service.md
  • docs/internal/server/github-merge-service.md
  • docs/internal/server/index.md
  • docs/internal/server/lead-engineer-service.md
  • docs/internal/server/merge-eligibility-service.md
  • docs/internal/server/peer-mesh-service.md
  • docs/internal/server/project-service.md
  • docs/internal/server/providers.md
  • docs/internal/server/quarantine-pipeline.md
  • docs/internal/server/rag-techniques.md
  • docs/internal/server/reactive-spawner.md
  • docs/internal/server/route-organization.md
  • docs/internal/server/utilities.md
  • docs/internal/server/work-intake-service.md
  • docs/internal/server/worktree-recovery-service.md
  • docs/internal/templates/browser-extension.md
  • docs/internal/templates/index.md
  • docs/modules/budget.md

📝 Walkthrough

Walkthrough

This pull request transforms the application from a protoLabs AI development studio into homeMaker, a comprehensive domestic home management hub. It introduces a shared SQLite database architecture, major domain features (gamification, budget, inventory, maintenance, vendors), AI chat integration, encrypted secrets vault, IoT sensor command/history capabilities, and migrates the desktop framework from Electron to Tauri. Extensive server routes, services, and UI components support all new features with event-driven XP awards and real-time updates.

Changes

Cohort / File(s) Summary
Documentation Updates
.automaker/context/CLAUDE.md, .automaker/context/coding-rules.md, CLAUDE.md, README.md
Complete rewrites establishing shared database patterns, gamification-centric workflow, new module guidelines (Inventory, Maintenance, Vendors, Gamification), environment variables (OpenWeatherMap), and feature documentation for home health score, IoT integrations, and AES-256-GCM encryption.
Database Infrastructure
apps/server/src/lib/homemaker-db.ts, apps/server/package.json
Introduces singleton SQLite database (homemaker.db) with WAL journaling, foreign key constraints, and comprehensive schema migrations for assets, maintenance, vendors, budget, vault, gamification, and sensor tables; adds helmet security dependency.
Security & Rate Limiting
apps/server/src/lib/rate-limiter.ts, apps/server/src/lib/vault-crypto.ts, apps/server/src/server/middleware.ts
Implements in-memory rate limiter with cooldown and hourly constraints, AES-256-GCM encryption for vault secrets, helmet middleware, and per-endpoint rate limiters (API, vault read/write, sensor report).
Gamification Services
apps/server/src/services/gamification-service.ts, apps/server/src/services/achievement-catalog.ts, apps/server/src/services/achievement-evaluator.ts, apps/server/src/services/quest-generator-service.ts
Core gamification engine managing profile, XP awards (with multipliers), achievements (with unlock conditions), quests (with progress tracking), streaks (maintenance and budget), and health score calculation with five-minute caching.
Domain Services
apps/server/src/services/inventory-service.ts, apps/server/src/services/maintenance-service.ts, apps/server/src/services/vendor-service.ts, apps/server/src/services/budget-service.ts, apps/server/src/services/vault-service.ts
SQLite-backed services for assets/warranties, recurring maintenance schedules, vendor directory, budget categories/transactions, and AES-256-GCM encrypted secrets with configurable retention and monetary values in cents.
AI & Integration Services
apps/server/src/services/ava-classifier.ts, apps/server/src/services/ava-responder.ts, apps/server/src/services/ava-proactive.ts, apps/server/src/services/chat-channel-service.ts, apps/server/src/services/weather-service.ts
AI chat pipeline classifying messages as home-management via Claude Haiku, generating contextualized responses via Sonnet, emitting proactive alerts for overdue maintenance/expiring warranties, and fetching weather data with sensor registration.
Sensor & Utility Services
apps/server/src/services/sensor-registry-service.ts, apps/server/src/utils/health-score-calculator.ts, apps/server/src/utils/level-calculator.ts
Sensor command queueing (set, toggle, reboot), reading history with aggregation (hour/day/week), health score calculation across four pillars (Maintenance, Inventory, Budget, Systems) with personalized hints, and 10-level progression system.
Event Listeners & Scheduler
apps/server/src/listeners/xp-event-listeners.ts, apps/server/src/services/scheduler.module.ts
XP event handlers triggered on domain mutations (maintenance completed, inventory created, budget transactions), daily maintenance tick aggregation, maintenance:tick event emission, and 30-minute weather polling.
Budget Routes
apps/server/src/routes/budget/... (index.ts, categories.ts, transactions.ts, summary.ts)
RESTful endpoints for budget categories (CRUD), transactions (create/list/delete with optional recurrence), monthly summaries with income/expense/balance calculations, and event emission on creation.
Inventory Routes
apps/server/src/routes/inventory/index.ts
Full CRUD inventory with search, filtering (category, location, warrantyExpiring), warranty reports, total value calculations, and asset-created/asset-updated event emissions.
Maintenance Routes
apps/server/src/routes/maintenance/index.ts
Complete REST API for recurring schedules with creation, listing, filtering (overdue, upcoming, by category), single retrieval, completion recording, history, due summaries, and maintenance:tick event emission.
Vendor Routes
apps/server/src/routes/vendors/index.ts
Vendor CRUD with full-text search, category filtering, asset linkage queries, and validation for phone/rating/category constraints.
Gamification Routes
apps/server/src/routes/gamification/index.ts, apps/server/src/routes/gamification/quests.ts
Profile retrieval, achievements listing/seen marking, health score calculation, quest CRUD (list, complete, generate) with validation and error handling.
Vault Routes
apps/server/src/routes/vault/... (create.ts, list.ts, get.ts, update.ts, delete.ts, search.ts, index.ts)
Encrypted secrets CRUD with zod validation, search across metadata, and rate-limiting per operation type.
Chat & Extended Routes
apps/server/src/routes/chat-channel/index.ts, apps/server/src/routes/chat/ava-tools.ts, apps/server/src/routes/chat/index.ts, apps/server/src/routes/sensors/index.ts
Chat channel message send/list, Ava home-management tools (inventory search, vendor lookup, maintenance queries, quest operations), and sensor command queue/poll/history endpoints with aggregation.
Service Container & Initialization
apps/server/src/server/services.ts, apps/server/src/server/routes.ts
Comprehensive service instantiation for all domains, dynamic route mounting, XP listener registration, and inter-service wiring (classifiers, responders, quest generators).
Server Tests
apps/server/tests/gamification-*.test.ts, apps/server/tests/health-score-calculator.test.ts, apps/server/tests/level-calculator.test.ts, apps/server/tests/quest-generator-service.test.ts
In-memory SQLite test suites covering profile operations, XP accumulation, streaks, achievements, quests, health scores across pillars, level progression, and quest generation with seasonal logic.
UI Build Migration
apps/ui/package.json, apps/ui/scripts/prepare-server.mjs, apps/ui/src/auto-updater.ts, apps/ui/src-tauri/...
Complete Electron-to-Tauri migration: removed Electron build scripts/updater, added Tauri CLI/plugins (dialog, notification, shell, updater), Cargo manifest with plugin dependencies, Rust lib/main, build script, capabilities, and tauri.conf.json config.
UI Core Updates
apps/ui/index.html, apps/ui/src/components/layout/sidebar/...
Branding change (protoLabs → homeMaker), streamlined home-focused navigation, new XpBar sidebar component with level badge and progress, and logo/accessibility label updates.
Gamification UI
apps/ui/src/components/gamification/... (AchievementBanner.stories.tsx, LevelUpOverlay.stories.tsx, StreakMilestoneToast.stories.tsx, XpToast.stories.tsx, celebrations.tsx)
Storybook stories and implementation for achievement notifications, level-up full-screen overlay with auto-dismiss, streak milestone toasts, XP progress toasts with confetti, and celebration provider orchestrating all gamification events.
Budget UI
apps/ui/src/components/views/budget-view/...
Complete budget management view with add-transaction dialog, SummaryCards (income/expenses/balance), CategoryBreakdown bar chart, TransactionList with pagination, React Query hooks, and comprehensive stories.
Inventory UI
apps/ui/src/components/views/inventory-view/...
Asset management with add-dialog, asset cards, detail panels (read/edit modes), warranty report widget, search, category/location filtering, WebSocket updates, and extensive story coverage.
Maintenance UI
apps/ui/src/components/views/maintenance-view/...
Maintenance scheduling UI with add/complete dialogs, due summaries (overdue/this-week/this-month/up-to-date), schedule cards with status badges, detail panels with completion history, filtering, and React Query mutations.
Chat & Profile UI
apps/ui/src/components/views/chat-channel-view/..., apps/ui/src/components/views/profile-view/... (dashboard-view/health-score-widget.tsx)
Chat UI with message bubbles, input, WebSocket sync, pagination; profile dashboard with achievement grid, health breakdown by pillar, level card, quest list, streak display, and XP history.
Sensors & Settings UI
apps/ui/src/components/views/sensors-view/..., apps/ui/src/components/views/settings-view/...
Sensor cards with state badges and real-time data, command dialog (set/toggle/reboot with JSON payload validation), and feature flag labels for gamification celebrations/sounds.
Mock Data & Stories
apps/ui/src/components/stories/mockData.ts, apps/ui/src/components/stories/mockProviders.tsx
Comprehensive mock data for all domains (50\+ constants covering assets, maintenance, vendors, budget, gamification, sensors, vault) and React Query provider decorator for Storybook isolation.

Sequence Diagrams

sequenceDiagram
    participant User
    participant Client as Client/UI
    participant API as Server/Routes
    participant Listener as XP Listeners
    participant Gamif as Gamification Service
    participant DB as SQLite DB
    participant Events as Event Emitter

    User->>Client: Complete maintenance task
    Client->>API: POST /maintenance/{id}/complete
    API->>DB: Record completion, advance schedule
    API->>Events: Emit maintenance:tick event
    Events->>Listener: maintenance:tick event received
    Listener->>Gamif: awardXp('maintenance_xp', amount, multiplier)
    Gamif->>DB: Insert xp_history, update gamification_profile (level-up?)
    Gamif->>Events: Emit xp-gained event
    Gamif->>Gamif: checkAchievements()
    Gamif->>DB: Evaluate & unlock earned_achievements
    Gamif->>Events: Emit achievement-unlocked (if applicable)
    Gamif->>Gamif: calculateHomeHealthScore(true)
    Gamif->>DB: Query maintenance on-time %, inventory count, etc.
    Gamif->>DB: Update profile.healthScore, emit health-score-updated
    Events->>Client: WebSocket: xp-gained, achievement-unlocked, health-score-updated
    Client->>Client: Trigger celebrations (toasts, confetti, overlay)
    Client->>User: Display XP toast, achievement banner, level-up modal
Loading
sequenceDiagram
    participant Calc as Health Score Calculator
    participant DB as SQLite DB
    participant Sensors as Sensor Registry
    
    Calc->>DB: Query maintenance schedules, completions (onTime %)
    DB-->>Calc: On-time rate, overdue penalties, streaks
    Calc->>Calc: Compute maintenance_score (0-25)
    
    Calc->>DB: Count assets, with photos/warranties
    DB-->>Calc: Asset inventory metrics
    Calc->>Calc: Compute inventory_score (0-25)
    
    Calc->>DB: Query budget categories, transactions (current month + 3mo trend)
    DB-->>Calc: Income, expenses, budget streaks
    Calc->>Calc: Compute budget_score (0-25)
    
    Calc->>DB: Count vault entries (security indicator)
    Calc->>Sensors: Get active sensor count & ratio
    Sensors-->>Calc: Sensor state metrics
    Calc->>Calc: Compute systems_score (0-25)
    
    Calc->>Calc: Aggregate: total = sum(pillars), hints from lowest pillars
    Calc-->>Calc: Return HomeHealthScore { total, maintenance, inventory, budget, systems, pillarHints, calculatedAt }
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Poem

🐰 A bunny's ode to home sweet home:

From proto dreams to cozy plans,
We've built a warren, patch and spans—
With levels earned and quests to chase,
Health scores bloom in your living space.
May XP flow and streaks run long,
Your homey sanctuary grows strong! 🏡✨

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant