# Dashboard Redesign Proposal — Data-Driven, Time-Aware UX

**Date:** 2026-03-06
**Context:** At 2:22 AM after refresh, dashboard shows "5,357 events" — mostly from yesterday. The dashboard should be time-contextualized by default, like Gmail or Slack.

---

## The Core Problem

The dashboard dumps the entire event buffer on refresh. It doesn't know what "today" means.
At 2:22 AM, you expect to see today's few events. Instead you see 5,357 — meaningless.

**Principle:** Show today by default, let the user time-travel on demand.

---

## 1. Time-Contextualized Default View

**On refresh, the dashboard should scope to "Today."**

```
Instead of:  "Live · 5357 events"
Show:        "Today, Mar 6 · 47 events since midnight · Last activity: 12 min ago"
```

The buffer still seeds from DB (for scroll-back), but the **visible scope** defaults to today.
The status line should communicate:
- How many events **today** (not total in buffer)
- When was the **last event** (relative: "30s ago", "2 hours ago")
- What **day** you're looking at

At 2:22 AM: `"Today, Mar 6 · 23 events · Last: 30s ago (background scan)"`
— immediately tells you it's a quiet night.

---

## 2. Smart Bottom Bar — Context-Sensitive Controls

The bottom bar should adapt to the current mode.

### LIVE mode (default on refresh)
```
● LIVE   Today, Mar 6  ·  47 events  ·  Last: 30s ago          [M] [⚙] [31 creatures]
```
- No speed controls (you're live, not replaying)
- Decay/Clear/Lightning move to a ⚙ settings popover
- Day context + meaningful event count front and center
- "31 creatures" as a subtle badge

### Day drill-down mode (clicked "Yesterday")
```
← Back   Yesterday, Mar 5  ·  1,388 events  ·  3 conversations       [▶ Replay] [M]
```
- Shows what day you're exploring
- Meaningful summary: "3 conversations" > "1,388 events"
- Replay button appears only when relevant

### Replay mode (playing back a day)
```
[⏸]  0.5x  1x  2x  4x   ·   Yesterday 14:32:05   ·   Event 847/1388       [● Go Live]
```
- Speed controls visible ONLY during replay
- Scrubber shows progress through the day
- "Go Live" button to jump back to now

### Current vs Proposed

| Element | Current | Proposed |
|---------|---------|----------|
| Status | "2s ago · 5357 events" | "Today, Mar 6 · 47 events · Last: 30s ago" |
| Speed controls | Always visible | Only in replay mode |
| Debug tools | Always visible (Decay, Clear, ⚡) | Behind ⚙ settings icon |
| Creature count | Prominent "31 creatures" | Subtle badge |
| Day context | None | "Today, Mar 6" always shown |

---

## 3. Navigator — Data-Driven Time Hierarchy

The right navigator should reflect actual data shape, not raw event bubbles.

### Proposed Structure
```
┌─────────────────────────┐
│  TODAY                   │
│  Mar 6 · 47 events      │  ← current scope, highlighted
│  ○ ○ ○  (3 bubbles)     │  ← only today's creature events
│                          │
│  YESTERDAY               │
│  Mar 5 · 1,388 events   │  ← click to drill in
│  3 conversations         │  ← data-derived summary
│                          │
│  Tue, Mar 3              │
│  25,513 events           │
│  Heavy processing day    │  ← auto-generated label
│                          │
│  Mon, Mar 2              │
│  158 events              │
│  Quiet day               │
└─────────────────────────┘
```

### Key Changes
- **"Today" is always the first section** — even if it has 0 events
- **Per-day summaries** derived from data ("3 conversations", "Heavy processing", "Quiet day")
- **Bubble count scoped to the current day** — today at 2 AM shows 3 bubbles, not 5,357
- **Relative labels computed dynamically** — "Yesterday" = latest day before today

### Day Summary Logic (derived from event data)
```
if events > 10000: "Heavy processing day"
elif conversations > 3: "{n} conversations"
elif events > 500: "Active day"
elif events > 50: "Light activity"
elif events > 0: "Quiet day"
else: "No activity"
```

---

## 5. Memory Zone — Day-Scoped Entity Summary

Instead of showing all entities always, show context-appropriate information.

### When Today Has Activity
```
┌─ MEMORY · Today, Mar 6 ──────────────────────┐
│                                                │
│  2 new entities born today                     │
│  ● "morning walk" (event)                      │
│  ● "exercise routine" (topic)                  │
│                                                │
│  46 entities total · 23 active this week       │
└────────────────────────────────────────────────┘
```

### When Today Is Quiet (2:22 AM)
```
┌─ MEMORY · Today, Mar 6 ──────────────────────┐
│                                                │
│  No new entities today (yet)                   │
│  46 entities total across 4 days               │
│                                                │
│  Yesterday's highlights:                       │
│  13 born · 6 active · 4 dormant               │
│  ● "Sangam" (place) · "greeting" (event)      │
└────────────────────────────────────────────────┘
```

### When Drilling Into a Past Day
```
┌─ MEMORY · Yesterday, Mar 5 ──────────────────┐
│                                                │
│  13 born · 6 active · 4 dormant · 23 hidden   │
│                                                │
│  [person] ●● ●+9                               │
│  [topic]  ●● ●●+4                              │
│  [emotion] ●●● ●+6                             │
│  [event]  ●●+3                                  │
└────────────────────────────────────────────────┘
```

---

## 6. Implementation Priority

### Phase A: Quick Wins (bottom bar + status) — 1 session
1. Status line: "Today, Mar 6 · N events · Last: Xs ago"
2. Compute `todayEventCount` from buffer (filter by today's date)
3. Compute `lastActivityAgo` from latest event timestamp
4. Hide speed controls in LIVE mode (show on replay only)
5. Move Decay/Clear/Lightning behind ⚙ icon

### Phase B: Navigator Day Scope — 1 session
1. Default bubble view to today's events only
2. Add "Today" as first entry in history section
3. Data-derived day summaries ("3 conversations", "Quiet day")
4. Bubble count = today's events, not full buffer

### Phase D: Memory Zone Summary Card — 1 session
1. Summary text overlay on memory zone canvas
2. Day-scoped entity counts (born/active/dormant)
3. "Yesterday's highlights" when today is empty
4. Entity name highlights for born-today entities

---

## Design Principles

| # | Principle | Example |
|---|-----------|---------|
| 1 | **Today first** | Default scope = since midnight |
| 2 | **Numbers that mean something** | "47 events today" not "5357 events" |
| 3 | **Show, don't count** | Creature brightness > event counter |
| 4 | **Progressive disclosure** | Summary → drill-down → replay |

| 7 | **Context-sensitive controls** | Replay controls only during replay |

---

## Open Questions

- Should "Today" auto-expand on refresh, or show as a collapsed row like other days?
Answer: Auto-Expand on refresh

- Should the LIVE view only show events from the last N minutes (rolling window) or all of today?
Answer: All of today, and when yesterday is selected the LIVE should change to REVIEW, because how can yesterday be Live ?

- Should creature sleeping state persist across refresh, or re-derive from buffer?
Answer: Let us not touch the creatures, focus only on the bottom bar for the moment.

- Should the bottom bar show conversation count (requires counting session boundaries in events)?
Answer: Converstations would be nice

- How to derive "3 conversations" from raw events? Count unique session_id groups? Time gaps > 5 min?
Answer: I would count unique session_id groups, if such a thing exists, or we can differ this "Show conversation count" to the future