Appearance
Mailbox UI — Hinata Studio Tab
Intent
Two-state interface:
- Concentrated — icon-only with unread badge (sidebar entry / topbar widget).
- Expanded — full detail modal: To / From / CCs / Subject / body / summary / "Generate Response" button.
Mock React/JSX captured below; treat as starting scaffold, not final.
Architecture
mermaid
graph TD
A[Mailbox Tab in Studio Sidebar] --> B[Mailbox Icon — Concentrated]
B -->|Click| C[Mailbox Expanded — Detail Modal]
C --> D[Email Metadata: To, From, CC, Subject]
C --> E[Body + Summary]
C --> F[Generate Response Button]
F --> G[Compose Modal — Draft Response]Component (scaffold from Minato 2026-05-22)
jsx
import React, { useState } from 'react';
import { Mail, X, Send, Zap } from 'lucide-react';
import './mailbox.css';
export default function MailboxUI() {
const [expanded, setExpanded] = useState(false);
const [selectedEmail, setSelectedEmail] = useState(null);
const [showCompose, setShowCompose] = useState(false);
const [draftResponse, setDraftResponse] = useState('');
// Mock email data — replace with live connector
const emails = [/* … */];
// CONCENTRATED VIEW — Mailbox Icon
if (!expanded) {
const unreadCount = emails.filter((e) => e.unread).length;
return (
<div className="mailbox-concentrated">
<button
className="mailbox-icon-button"
onClick={() => setExpanded(true)}
title={`Mailbox${unreadCount > 0 ? ` (${unreadCount} unread)` : ''}`}
>
<Mail size={20} />
{unreadCount > 0 && <span className="unread-badge">{unreadCount}</span>}
</button>
</div>
);
}
// EXPANDED VIEW — Full Mailbox (omitted in this stub)
}Data source
Existing /opt/jimmy-brain-ops/scripts/mail-actionable-archive.py already produces a daily JSONL of mail metadata at ~/Sandpit/hinata/mail-archive/YYYY-MM-DD.jsonl. The Mailbox UI's concentrated view reads this directly. Expanded view + Generate-Response requires email bodies — a separate ingestion job under #840024.
Pickup work
- Wire to existing mail-archive JSONL (no new ingestion needed for concentrated view).
- Decide Generate-Response provider — local Claude/Minato vs. inline composition.
- Status of #840024 (mail body archive) — needed before expanded view.
- CSS in line with design system tokens per display-format-standards.