diff --git a/frontend/src/components/dashboard/PulseSensorCard.tsx b/frontend/src/components/dashboard/PulseSensorCard.tsx index 3fd571d..18f4098 100644 --- a/frontend/src/components/dashboard/PulseSensorCard.tsx +++ b/frontend/src/components/dashboard/PulseSensorCard.tsx @@ -78,9 +78,9 @@ export function PulseSensorCard({ reading, history, thresholds, onClick }: Pulse onClick={handleClick} className={cn( "group relative overflow-hidden rounded-2xl cursor-pointer transition-all", - "bg-gradient-to-br from-slate-800/80 to-slate-900/80", - "border border-slate-700/50 hover:border-emerald-500/50", - "shadow-xl hover:shadow-2xl hover:shadow-emerald-500/10" + "bg-white dark:bg-gradient-to-br dark:from-slate-800/80 dark:to-slate-900/80", + "border border-slate-200 dark:border-slate-700/50 hover:border-emerald-500/50", + "shadow-sm dark:shadow-xl hover:shadow-md dark:hover:shadow-2xl hover:shadow-emerald-500/10" )} > {/* Header */} @@ -90,28 +90,28 @@ export function PulseSensorCard({ reading, history, thresholds, onClick }: Pulse
-

+

{reading.deviceName}

-

Pulse Grow Sensor

+

Pulse Grow Sensor

-
+
{isOffline ? 'OFFLINE' : 'LIVE'}
@@ -146,10 +146,10 @@ export function PulseSensorCard({ reading, history, thresholds, onClick }: Pulse {/* Temperature */}
-
+
Temp
@@ -157,21 +157,21 @@ export function PulseSensorCard({ reading, history, thresholds, onClick }: Pulse

{reading.temperature.toFixed(1)}°

{/* Humidity */} -
-
+
+
RH

{reading.humidity.toFixed(0)}%

@@ -180,15 +180,15 @@ export function PulseSensorCard({ reading, history, thresholds, onClick }: Pulse {/* VPD */}
-
+
VPD

{reading.vpd.toFixed(2)}

@@ -197,11 +197,11 @@ export function PulseSensorCard({ reading, history, thresholds, onClick }: Pulse {/* Dewpoint Row */}
-
+
- Dewpoint: {reading.dewpoint.toFixed(1)}°F + Dewpoint: {reading.dewpoint.toFixed(1)}°F
-
+
View Details
@@ -210,9 +210,9 @@ export function PulseSensorCard({ reading, history, thresholds, onClick }: Pulse {/* Timestamp Footer */}
-
+
Last reading - + {readingTime.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
diff --git a/frontend/src/pages/EnvironmentReportPage.tsx b/frontend/src/pages/EnvironmentReportPage.tsx index a09b418..90396c8 100644 --- a/frontend/src/pages/EnvironmentReportPage.tsx +++ b/frontend/src/pages/EnvironmentReportPage.tsx @@ -378,20 +378,21 @@ export default function EnvironmentReportPage() {
{/* Summary Stats */} -
+ {/* Summary Stats */} +
- Avg Temperature + Avg Temperature
-

+

{reportData?.devices[0]?.stats.temperature.avg.toFixed(1) || '--'}°F

-

+

Range: {reportData?.devices[0]?.stats.temperature.min.toFixed(1)}° – {reportData?.devices[0]?.stats.temperature.max.toFixed(1)}°

@@ -400,16 +401,16 @@ export default function EnvironmentReportPage() { initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ delay: 0.1 }} - className="p-5 rounded-2xl bg-white dark:bg-gradient-to-br dark:from-blue-500/20 dark:to-cyan-500/10 border border-blue-200 dark:border-blue-500/20 shadow-sm dark:shadow-none" + className="p-5 rounded-2xl bg-white dark:bg-slate-800/50 border border-slate-200 dark:border-slate-700/50 shadow-sm dark:shadow-none" >
- Avg Humidity + Avg Humidity
-

+

{reportData?.devices[0]?.stats.humidity.avg.toFixed(0) || '--'}%

-

+

Range: {reportData?.devices[0]?.stats.humidity.min.toFixed(0)}% – {reportData?.devices[0]?.stats.humidity.max.toFixed(0)}%

@@ -418,16 +419,16 @@ export default function EnvironmentReportPage() { initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ delay: 0.2 }} - className="p-5 rounded-2xl bg-white dark:bg-gradient-to-br dark:from-purple-500/20 dark:to-pink-500/10 border border-purple-200 dark:border-purple-500/20 shadow-sm dark:shadow-none" + className="p-5 rounded-2xl bg-white dark:bg-slate-800/50 border border-slate-200 dark:border-slate-700/50 shadow-sm dark:shadow-none" >
- Avg VPD + Avg VPD
-

+

{reportData?.devices[0]?.stats.vpd.avg.toFixed(2) || '--'} kPa

-

+

Range: {reportData?.devices[0]?.stats.vpd.min.toFixed(2)} – {reportData?.devices[0]?.stats.vpd.max.toFixed(2)}

@@ -436,16 +437,16 @@ export default function EnvironmentReportPage() { initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ delay: 0.3 }} - className="p-5 rounded-2xl bg-white dark:bg-gradient-to-br dark:from-amber-500/20 dark:to-yellow-500/10 border border-amber-200 dark:border-amber-500/20 shadow-sm dark:shadow-none" + className="p-5 rounded-2xl bg-white dark:bg-slate-800/50 border border-slate-200 dark:border-slate-700/50 shadow-sm dark:shadow-none" >
- Alerts + Alerts
-

+

{reportData?.alerts.total || 0}

-

+

{reportData?.alerts.resolved || 0} resolved

@@ -897,8 +898,8 @@ export default function EnvironmentReportPage() { {/* Recent Alerts List */} {reportData?.alertAnalytics?.recentAlerts && reportData.alertAnalytics.recentAlerts.length > 0 ? ( - - +
+ @@ -907,23 +908,23 @@ export default function EnvironmentReportPage() { - + {reportData.alertAnalytics.recentAlerts.slice(0, 15).map((alert, idx) => ( - - + - - - + + @@ -931,7 +932,7 @@ export default function EnvironmentReportPage() {
Time SeverityDuration
+
{new Date(alert.createdAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' })} - {alert.severity} {alert.type.replace('_', ' ')}{alert.message} + {alert.type.replace('_', ' ')}{alert.message} {alert.resolutionTimeMin ? `${alert.resolutionTimeMin.toFixed(1)}m` : '-'}
) : ( -

No recent alerts found for this period.

+

No recent alerts found for this period.

)}
diff --git a/frontend/src/pages/PulseTestPage.tsx b/frontend/src/pages/PulseTestPage.tsx index c2eff4e..ac84896 100644 --- a/frontend/src/pages/PulseTestPage.tsx +++ b/frontend/src/pages/PulseTestPage.tsx @@ -129,30 +129,30 @@ export default function PulseTestPage() { const currentReading = readings.find(r => r.deviceId === selectedDevice) || readings[0]; return ( -
+
{/* Header */} -
+
-

-
- +

+
+
Pulse Sensor Analytics

-

+

Real-time environmental monitoring with historical trends

{/* WebSocket Status */} -
+
{wsConnected ? ( - + ) : ( )} - + {wsConnected ? 'Live' : 'Offline'} {unreadCount > 0 && ( @@ -167,16 +167,16 @@ export default function PulseTestPage() {
{/* Error Message */} {error && ( -
+
{error}
)} @@ -185,41 +185,41 @@ export default function PulseTestPage() {
{/* Live Readings Panel */}
-

Live Sensors

+

Live Sensors

{readings.map((reading) => ( setSelectedDevice(reading.deviceId)} - className={`p-4 rounded-xl cursor-pointer transition-all ${selectedDevice === reading.deviceId - ? 'bg-emerald-500/20 border-2 border-emerald-500/50' - : 'bg-slate-800/50 border border-slate-700/50 hover:border-slate-600' + className={`p-4 rounded-xl cursor-pointer transition-all shadow-sm ${selectedDevice === reading.deviceId + ? 'bg-emerald-50 dark:bg-emerald-500/20 border-2 border-emerald-500/50' + : 'bg-white dark:bg-slate-800/50 border border-slate-200 dark:border-slate-700/50 hover:border-slate-300 dark:hover:border-slate-600' }`} >
-

{reading.deviceName}

+

{reading.deviceName}

-
- LIVE +
+ LIVE
-

Temp

+

Temp

{reading.temperature.toFixed(1)}°

-

RH

-

+

RH

+

{reading.humidity.toFixed(0)}%

-

VPD

+

VPD

{reading.vpd.toFixed(2)}

@@ -229,9 +229,9 @@ export default function PulseTestPage() { ))} {readings.length === 0 && !loading && ( -
- -

No sensors connected

+
+ +

No sensors connected

)}
@@ -240,17 +240,17 @@ export default function PulseTestPage() {
{/* Current Stats */} {currentReading && ( -
+
- - Temperature + + Temperature
-

+

{currentReading.temperature.toFixed(1)}°F

@@ -259,13 +259,13 @@ export default function PulseTestPage() { initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ delay: 0.1 }} - className="p-5 rounded-2xl bg-gradient-to-br from-blue-500/20 to-cyan-500/10 border border-blue-500/20" + className="p-5 rounded-2xl bg-white dark:bg-slate-800/30 border border-blue-100 dark:border-blue-500/10 shadow-sm dark:shadow-none" >
- - Humidity + + Humidity
-

+

{currentReading.humidity.toFixed(0)}%

@@ -274,29 +274,29 @@ export default function PulseTestPage() { initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ delay: 0.2 }} - className="p-5 rounded-2xl bg-gradient-to-br from-purple-500/20 to-pink-500/10 border border-purple-500/20" + className="p-5 rounded-2xl bg-white dark:bg-slate-800/30 border border-purple-100 dark:border-purple-500/10 shadow-sm dark:shadow-none" >
- - VPD + + VPD
-

+

{currentReading.vpd.toFixed(2)}

-

kPa

+

kPa

- - Dewpoint + + Dewpoint
-

+

{currentReading.dewpoint.toFixed(1)}°F

@@ -304,9 +304,9 @@ export default function PulseTestPage() { )} {/* Time Range Selector */} -
-

- +
+

+ Historical Trends

@@ -314,7 +314,7 @@ export default function PulseTestPage() {