fix(journal): restore weather + events panels; hide daily-prep system msg in chat

The journal UI was over-stripped earlier — weather panel, current-conditions
poll, and the upcoming-events sidebar were all dropped. Restored those (calls
the new /api/journal/weather, /api/journal/weather/current,
/api/journal/weather/refresh, /api/journal/weather/geocode endpoints).

Also: the daily-prep system message was rendering as flat text inside
ChatPanel because there's no .role-system bubble styling. Added a hideMessage
guard in ChatMessage so daily-prep system messages don't render in the chat
stream — they're already shown above as a structured prep card.

News / RSS reactions / article-discuss are intentionally NOT in the journal
(scoped out per user direction). The broader RSS infrastructure cleanup is
a separate, larger task.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-26 12:22:51 -04:00
parent 873e70c7ea
commit cacfcac86a
5 changed files with 405 additions and 149 deletions
+8 -2
View File
@@ -42,7 +42,13 @@ function formatMs(ms: number | null | undefined): string {
}
const metadata = computed(() => (props.message.metadata ?? {}) as Record<string, unknown>);
void metadata;
// Hide daily-prep system messages — they're rendered separately as a structured
// card in JournalView. Without this filter they render as a flat unstyled block
// inside the chat (no .role-system bubble styling exists).
const hideMessage = computed(() =>
props.message.role === "system" && metadata.value.kind === "daily_prep"
);
const timingParts = computed((): string[] => {
const t = props.message.timing;
@@ -60,7 +66,7 @@ const timingParts = computed((): string[] => {
</script>
<template>
<div class="chat-message" :class="`role-${message.role}`">
<div v-if="!hideMessage" class="chat-message" :class="`role-${message.role}`">
<div class="message-group">
<div class="message-bubble">
<div class="message-header">