diff --git a/frontend/src/components/RestDaysWidget.jsx b/frontend/src/components/RestDaysWidget.jsx
new file mode 100644
index 0000000..d04ff90
--- /dev/null
+++ b/frontend/src/components/RestDaysWidget.jsx
@@ -0,0 +1,120 @@
+import { useState, useEffect } from 'react'
+import { useNavigate } from 'react-router-dom'
+import { api } from '../utils/api'
+import dayjs from 'dayjs'
+import 'dayjs/locale/de'
+dayjs.locale('de')
+
+const FOCUS_ICONS = {
+ muscle_recovery: '๐ช',
+ cardio_recovery: '๐',
+ mental_rest: '๐ง',
+ deload: '๐',
+ injury: '๐ฉน',
+}
+
+const FOCUS_LABELS = {
+ muscle_recovery: 'Muskelregeneration',
+ cardio_recovery: 'Cardio-Erholung',
+ mental_rest: 'Mentale Erholung',
+ deload: 'Deload',
+ injury: 'Verletzungspause',
+}
+
+const FOCUS_COLORS = {
+ muscle_recovery: '#D85A30',
+ cardio_recovery: '#378ADD',
+ mental_rest: '#7B68EE',
+ deload: '#E67E22',
+ injury: '#E74C3C',
+}
+
+export default function RestDaysWidget() {
+ const [todayRestDays, setTodayRestDays] = useState([])
+ const [loading, setLoading] = useState(true)
+ const nav = useNavigate()
+
+ useEffect(() => {
+ loadTodayRestDays()
+ }, [])
+
+ const loadTodayRestDays = async () => {
+ try {
+ const today = dayjs().format('YYYY-MM-DD')
+ const allRestDays = await api.listRestDays(7) // Last 7 days
+ const todayOnly = allRestDays.filter(d => d.date === today)
+ setTodayRestDays(todayOnly)
+ } catch (err) {
+ console.error('Failed to load rest days:', err)
+ } finally {
+ setLoading(false)
+ }
+ }
+
+ if (loading) {
+ return (
+
+
๐ Ruhetage
+
+ Lรคdt...
+
+
+ )
+ }
+
+ return (
+
+
๐ Ruhetage
+
+ {todayRestDays.length === 0 ? (
+
+ Heute kein Ruhetag geplant
+
+ ) : (
+
+ {todayRestDays.map(day => {
+ const focus = day.rest_config?.focus || 'mental_rest'
+ const icon = FOCUS_ICONS[focus] || '๐
'
+ const label = FOCUS_LABELS[focus] || focus
+ const color = FOCUS_COLORS[focus] || '#888'
+
+ return (
+
+
{icon}
+
+
+ {label}
+
+ {day.note && (
+
+ {day.note}
+
+ )}
+
+
+ )
+ })}
+
+ )}
+
+
+
+ )
+}
diff --git a/frontend/src/pages/Dashboard.jsx b/frontend/src/pages/Dashboard.jsx
index 7c86135..35462f5 100644
--- a/frontend/src/pages/Dashboard.jsx
+++ b/frontend/src/pages/Dashboard.jsx
@@ -12,6 +12,7 @@ import TrialBanner from '../components/TrialBanner'
import EmailVerificationBanner from '../components/EmailVerificationBanner'
import TrainingTypeDistribution from '../components/TrainingTypeDistribution'
import SleepWidget from '../components/SleepWidget'
+import RestDaysWidget from '../components/RestDaysWidget'
import { getInterpretation, getStatusColor, getStatusBg } from '../utils/interpret'
import Markdown from '../utils/Markdown'
import dayjs from 'dayjs'
@@ -477,6 +478,11 @@ export default function Dashboard() {
+ {/* Rest Days Widget */}
+
+
+
+
{/* Training Type Distribution */}
{activities.length > 0 && (
diff --git a/frontend/src/pages/RestDaysPage.jsx b/frontend/src/pages/RestDaysPage.jsx
index d8ad303..4f793f2 100644
--- a/frontend/src/pages/RestDaysPage.jsx
+++ b/frontend/src/pages/RestDaysPage.jsx
@@ -356,9 +356,14 @@ export default function RestDaysPage() {
const isEditing = editing?.id === day.id
const focus = day.rest_config?.focus || 'mental_rest'
const preset = PRESETS.find(p => p.id === focus)
+ const isToday = day.date === dayjs().format('YYYY-MM-DD')
return (
-
+
{isEditing ? (
@@ -399,8 +404,22 @@ export default function RestDaysPage() {
alignItems: 'center',
marginBottom: 8,
}}>
-
- {dayjs(day.date).format('DD. MMMM YYYY')}
+
+
+ {dayjs(day.date).format('DD. MMMM YYYY')}
+
+ {isToday && (
+
+ HEUTE
+
+ )}