-
- {room.targetTemp || '—'}
-
°F
+ {rooms.map(room => {
+ const style = getHeaderStyle(room.type);
+ return (
+
+ {/* Color-coded Header */}
+
+
+
+ {room.name?.replace('[DEMO] ', '')}
+
+ {room.sqft?.toLocaleString()} sqft • {room.capacity || '—'} cap
-
Temp
-
-
-
-
-
- {room.targetHumidity || '—'}
-
%
+
+
+ {room.type}
+
+
-
Humidity
-
- {/* Secondary: Batch Count */}
-
-
-
0 ? 'bg-success' : 'bg-subtle'}`} />
-
- {room.batches?.length || 0} {room.batches?.length === 1 ? 'batch' : 'batches'}
-
+ {/* Sensor Data - Prominent */}
+
+
+
+
+
+ {room.targetTemp || '—'}
+ °F
+
+
Temp
+
+
+
+
+
+ {room.targetHumidity || '—'}
+ %
+
+
Humidity
+
+
+
+ {/* Batch Count */}
+
+
+
0 ? 'bg-success' : 'bg-subtle'}`} />
+
+ {room.batches?.length || 0} {room.batches?.length === 1 ? 'batch' : 'batches'}
+
+
+
View →
+
- {room.batches?.length > 0 && (
-
View →
- )}
-
-
- ))}
+
+ );
+ })}
)}
diff --git a/frontend/src/router.tsx b/frontend/src/router.tsx
index c0a5f4a..fc893e9 100644
--- a/frontend/src/router.tsx
+++ b/frontend/src/router.tsx
@@ -11,6 +11,7 @@ import DashboardPage from './pages/DashboardPage';
// Lazy load all other pages to reduce initial bundle
const DailyWalkthroughPage = lazy(() => import('./pages/DailyWalkthroughPage'));
const RoomsPage = lazy(() => import('./pages/RoomsPage'));
+const RoomDetailPage = lazy(() => import('./pages/RoomDetailPage'));
const BatchesPage = lazy(() => import('./pages/BatchesPage'));
const BatchDetailPage = lazy(() => import('./pages/BatchDetailPage'));
const TimeclockPage = lazy(() => import('./pages/TimeclockPage'));
@@ -107,6 +108,10 @@ export const router = createBrowserRouter([
path: 'rooms',
element:
}>
,
},
+ {
+ path: 'rooms/:id',
+ element:
}>
,
+ },
{
path: 'batches',
element:
}>
,