- Implemented new Header 6 style Navbar with dropdowns
- Replaced Sidebar in Layout with Navbar
- Retained Mobile Bottom Nav for floor operations
- Updated visual theme to light/dark glassmorphism
- Implemented self-contained UserDropdown in Navbar
- Added ChevronDown icon for better UX
- Adjusted padding to prevent text overlapping with floating label
- Fixed floating label position for non-empty select element
- Restored missing AlertTriangle import
- Extracted VisitorKioskShell from VisitorCheckIn
- Updated VisitorKioskPage to use shell for Home, Returning, and Success modes
- Implemented light-mode glassmorphism styles for Kiosk buttons
- Ensured consistent user experience across the entire Kiosk flow
- Implemented AuraUI 'Sign Up 1' as new Visitor Check-In flow
- Integrated high-tech split-screen layout with 'Secure Facility' branding
- Moved camera and form logic to self-contained VisitorCheckIn component
- Updated VisitorKioskPage to route to new experience
- Created reusable LODText component with distance-based opacity controls
- Integrated LODText into SmartRack for section, row, and column labels
- Labels now fade out gracefully as the camera moves away to reduce clutter
- Added historical stage calculation logic to PlantSystem
- Wired TimelineSlider date to 3D scene props
- Plants now visually progress through lifecycle stages (Clone -> Veg -> Flower) based on selected date
- Mocked planting dates deterministically based on plant ID seed
- Implemented responsive header with collapsible sidebar toggle
- Added mobile-optimized styles for PlantDataCard (full-width bottom sheet)
- Adjusted positioning of map controls and legend for mobile screens
- Added mobile interaction improvements (auto-close sidebar on select)
- Refined typography and spacing for touch targets
- PlantDataCard.tsx: Deterministic mock data seeding via plant ID
- Added Batch ID, Batch Name, and Last Updated timestamp
- Improved sparkline history generation for realism
- Enhanced UI with glassmorphic refinements and animations
- Contextual actions styling
- SummaryOverlay: Increased distanceFactor for better scaling at distance
- Added animations and glassmorphic refinements
- Enhanced room badges with pulsing alert indicators
- Section summary is now more prominent on hover
- SummaryOverlay.tsx: New component for room and section summaries
- Integrated SectionSummary in SmartRack with hover interaction
- Integrated RoomSummaryOverlay in RoomObject for room-level counts
- Aggregated plant counts and health scores per section/room
- VitalGauge.tsx: New component with:
- SVG sparkline charts showing historical trend
- Gradient fill under sparkline
- Trend arrows (up/down/stable)
- Pulsing current value dot
- Hover tooltips with optimal/range info
- Color-coded status (green/yellow/red)
- VitalsGrid: Convenient wrapper for common vitals
- VitalGaugeMini: Compact version for lists
- Consistent mock values per plant (seeded by ID)
- LifecycleTimeline.tsx: Full SVG-animated component
- 6 stage nodes with connecting lines
- Current stage pulsing animation w/ glow
- Completed stages show checkmarks
- Day tracking and harvest estimation
- LifecycleTimelineMini: Compact version for lists
- Updated PlantDataCard to use new component
- Add sectionId to SearchResult interface
- Search handler now looks up section by ID first
- Falls back to code/name lookup for backwards compatibility
- Fixes beacon offset in Room B (duplicate section codes)
- Create coordinates.ts with centralized SCALE constant
- Add calculatePlantCoords() helper matching SmartRack grid logic
- Refactor all beacon position calcs to use helper
- Uses col*colSpacing where colSpacing = width/(maxCols+1)
- This matches how plants are actually rendered in PlantSystem
- Remove ROOM_FOCUS preset (wasn't rendering correctly)
- Keep Overhead and Isometric views which work well
- FocusTarget now zooms within current preset
- Text navigation provides room selection
- New HierarchyNav component with Facility→Building→Floor→Rooms path
- Back button and breadcrumb trail in nav header
- Replace old room list with drilldown navigation
- Each level shows children with chevron indicators
- Add sectionCode to PlantSearch SearchResult
- handleSearchSelect now passes room/section to selectedPlant.breadcrumb
- This makes breadcrumb visible in plant info panel
- Changed searchIndex from useMemo to useState
- Added useEffect to rebuild index when floorData changes
- Added debug output showing index size in 'no results' message
- Should fix search returning empty results
- Pass facility/building/floor/room context through component tree
- HierarchyContext interface in SmartRack
- Breadcrumb now includes full path: Facility → Building → Floor → Room → Section → Tier
- RoomObject now calculates actual bounds from section positions
- FacilityScene centers content based on actual section bounds
- SmartRack positions plants proportionally within sections
- Fixes plants rendering outside room boxes
- Create HierarchyBreadcrumb component for navigation
- Fix SmartRack plant positioning within section bounds
- Add breadcrumb data to PlantPosition type
- Display breadcrumb path in plant selection panel
- Pass roomName through component hierarchy
- Create CameraPresets.tsx with preset views and UI selector
- Replace free camera controls with preset-based system
- Add smooth animated transitions between camera positions
- Update Facility3DViewerPage with preset selector buttons
- Remove unused WASD keyboard controls
- Add SCALE constant (0.1) to convert pixel coords to world units
- Fix stage coloring: use FLOWERING/DRYING/CURING instead of FLOWER/DRY/CURE
- Apply scaling to FacilityScene, RoomObject, SmartRack consistently
- Plants now render inside their proper rooms
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.
- 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
- 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
Photo Management (per specs/photo-management.md):
- Sharp integration for 3-size compression (thumb/medium/full)
- WebP output with 80-90% quality
- Client-side compression with browser-image-compression
- PhotoUpload component with camera/drag-drop support
- Upload API with bulk support and stats endpoint
Testing:
- Backend: Jest tests for all major API endpoints
- Frontend: Vitest tests for utilities and API clients
- CI: Updated Forgejo workflow for test execution
Specs (100% coverage):
- visitor-management.md (Phase 8)
- messaging.md (Phase 9)
- audit-and-documents.md (Phase 10)
- accessibility-i18n.md (Phase 11)
- hardware-integration.md (Phase 12)
- advanced-features.md (Phase 13)
Documentation:
- OpenAPI 3.0 spec (docs/openapi.yaml)
- All endpoints documented with schemas
Added PlantTouchPoint and IPMSchedule models. Implemented touch-points and IPM controllers/routes. Updated frontend with Dashboard feed and IPM widgets.