- Replaces 3D viewer component with maintenance placeholder
- Preserves METRC integration and other active features
- Prevents application hard crash for users
- Added METRC status badge to BatchesPage
- Implemented real 3D Facility Viewer using React Three Fiber
- Visualizes plants, rooms, sections from live data
- Added seed-metrc-demo.js for populating realistic METRC plant data
- Created metrcApi.ts client for all METRC endpoints
- Created MetrcDashboardPage with Overview, Plant Locations, Audit tabs
- Shows demo mode banner when METRC API not connected
- CSV export for manual METRC upload
- Plant location table with sync status
- Audit trail with location change history
- Added METRC to navigation under Compliance section
- Removed category field usage (doesn't exist in Prisma schema)
- Changed grouping from category to type
- Removed GUIDE type (not in backend)
- Updated filter dropdown with correct types
- Added Facility3DViewerPage with interactive 3D scene
- Shows floors, rooms, sections, and plant positions
- Color-coded by room type and position status
- Orbit controls for rotation/zoom/pan
- Floor selector dropdown
- Stats panel showing totals
- Added /layout/floors/:id/3d API endpoint
- Fixed TypeScript issues in DocumentsPage
- Added /walkthroughs/today API endpoint
- Show clear status when walkthrough is already completed
- Show 'Continue Walkthrough' for in-progress ones
- Added facility-3d-viewer.md spec
- Installed React Three Fiber dependencies
Breadcrumbs:
- Added Breadcrumbs to main Layout (appears on ALL pages)
- Dynamic route support (/batches/:id, /rooms/:id)
- Proper navigation hierarchy
Daily Walkthrough:
- Enhanced layout with progress bar
- Photo capture from camera or file upload
- Notes fields for each check
- Improved touch targets and mobile UX
Removed inline breadcrumbs from individual pages since
they now come from the global Layout.
- Room cards now have colored header backgrounds per type (VEG=green, FLOWER=purple, DRY=amber, CURE=orange, etc.)
- Cards are clickable, linking to /rooms/:id
- New RoomDetailPage with gradient header, sensor metrics with sparklines, active batches list
- Backend: GET /rooms/:id endpoint returns room with batches
- Temp/humidity now large and center with colored icons
- Size and capacity compressed to header subtitle
- Batch count with status indicator dot
- Cleaner visual hierarchy
Backend:
- Add getBatchById controller with touch points and IPM schedule
- Add GET /batches/:id route
Frontend:
- Update Batch interface to include touchPoints
- BatchDetailPage now uses real touch points from API
- Better error handling on batch load failure
- All sections (reservoirs, irrigation, plant health) on one scrollable page
- Collapsible sections with progress indicators
- Compact inline check rows (no oversized tank visualizations)
- Thin level indicator bars instead of large tank graphics
- Fixed submit button at bottom
- Edit mode per row for quick adjustments
- Complete UI refactor with charcoal/bone color palette
- Add Space Grotesk font for headlines, Inter for body
- Update all 24+ pages with new design system
- Add LinearPrimitives reusable components
- Improve dark mode support throughout
- Add subtle micro-animations and transitions
- Larger QR code on kiosk success screen (280px)
- Redesigned badge page with card flip feature
- Front: Visitor info, photo, badge number, duration
- Back: QR code for security scan, checkout link
- Added photo capture to kiosk registration
- Camera access with preview
- Capture, retake, and submit photo
- Site branding on badge page (777 Wolfpack)
- Better status indicators and UI polish
- Fixed 'qrcode.react' import in VisitorKioskPage (named export)
- Added 'badgeExpiry' to VisitorLog interface in visitorsApi
- Added 'tiers' to LayoutSection interface in layoutStore
- NOTE: This fixes the build failure on nexus-vector
- Renamed Management Page to Visitor Panopticon
- Added Revoke button to active visitors
- Added Revoke Modal with reason capture
- Updated status display to show REVOKED status
- Added public /badges/:id route with BadgePage component
- Updated VisitorKiosk to display QR code upon check-in
- Backend now returns visitId in check-in response
- Added qrcode.react dependency
- Lazy load all pages for 24% bundle size reduction (575KB → 436KB)
- Created templates: PageTemplate, ComponentTemplate, WidgetTemplate
- Updated RoomsPage and IPMDashboardPage with PageHeader
- All routes wrapped in Suspense with PageLoader component
- Fixed malformed router.tsx structure
- Refactored navigation with grouped sections (Operations, Cultivation, Analytics, etc.)
- Added RBAC-based navigation filtering by user role
- Created DevTools panel for quick user switching during testing
- Added collapsible sidebar sections on desktop
- Mobile: bottom nav bar (4 items + More) with slide-up sheet
- Enhanced seed data with [DEMO] prefix markers
- Added multiple demo users: Owner, Manager, Cultivator, Worker
- Fixed domain to runfoo.run
- Added Audit Log and SOP Library pages to navigation
- Created usePermissions hook and RoleBadge component
Added PlantTouchPoint and IPMSchedule models. Implemented touch-points and IPM controllers/routes. Updated frontend with Dashboard feed and IPM widgets.