Conversation
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>
- 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>
|
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:
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. |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (300)
📝 WalkthroughWalkthroughThis 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
Sequence DiagramssequenceDiagram
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
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 }
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Poem
✨ Finishing Touches
🧪 Generate unit tests (beta)
|
Summary
Full homeMaker platform build — 45 features across 9 milestones, from empty fork to production-ready home management app.
What's Included
Stats
Test plan
npm installcompletes without errorsnpm run dev:fullstarts UI + servernpm run storybookrenders all storiesSummary by CodeRabbit
Release Notes
New Features
Security