diff --git a/public/app.js b/public/app.js index a2441fb..73f8977 100644 --- a/public/app.js +++ b/public/app.js @@ -89,11 +89,23 @@ async function handleSnooze(slotId, minutes) { } } +const ROAST_CACHE_KEY = "medis-roast-day"; + +async function loadRoast(day) { + try { + const cached = JSON.parse(sessionStorage.getItem(ROAST_CACHE_KEY) || "null"); + if (cached?.day === day && cached?.text) return cached; + const roast = await api.roast(); + sessionStorage.setItem(ROAST_CACHE_KEY, JSON.stringify({ day: roast.day, text: roast.text })); + return roast; + } catch { + return { text: "Dein Gebrain wartet auf Koffein und Medis." }; + } +} + async function refreshDashboard(stats) { - const [today, roast] = await Promise.all([ - api.today(), - api.roast().catch(() => ({ text: "Dein Gebrain wartet auf Koffein und Medis." })), - ]); + const today = await api.today(); + const roast = await loadRoast(today.day); renderSlots(today.slots, handleTake, handleSnooze); document.getElementById("roastText").textContent = roast.text; diff --git a/server/ai.py b/server/ai.py index c48e0be..c951a08 100644 --- a/server/ai.py +++ b/server/ai.py @@ -74,7 +74,7 @@ async def get_roast_of_the_day(db: aiosqlite.Connection, tz: ZoneInfo) -> dict[s source = "fallback" else: source = "ai" - await _set_cache(db, key, text) + await _set_cache(db, key, text) return {"text": text, "source": source, "day": day} @@ -98,6 +98,6 @@ async def get_oracle(db: aiosqlite.Connection, tz: ZoneInfo) -> dict[str, Any]: source = "fallback" else: source = "ai" - await _set_cache(db, key, text) + await _set_cache(db, key, text) return {"text": text, "source": source, "week": week}