feat: Hub overnight feed, expandable findings, and project task board
Hub Overnight Feed, Expandable Findings, and Project Task Board
Overview
Redesign the Sendy HQ hub (apps/hub/) to be a daily command center focused on overnight agent work. The homepage becomes a feed of recent overnight sessions showing summarized prompts and key findings, with expandable sections to dig deeper into each session’s branches, questions, and trace. Add a project sidebar/section linking to all ventures, and an “Up Next” task board aggregating suggested next steps from overnight reports and docs.
Deploy to a public Cloudflare Pages URL (hub.pages.dev) — already handled by the existing CI workflow.
Problem Statement / Motivation
The hub was scaffolded as a generic activity feed mixing blog posts, docs, and overnight reports equally. But the primary use case is: wake up in the morning, see what the agent did overnight, decide what to work on today, and share progress with Lana. The current design doesn’t prioritize this workflow — overnight reports are buried alongside docs, there’s no way to expand into findings without navigating to a separate page, and there’s no task board to guide daily work.
Proposed Solution
Page Structure
/ (Home) — Overnight Feed + Up Next
The homepage has two main sections:
-
Overnight Sessions Feed (primary, ~70% of page)
- Each session is a card showing:
- Date, mode badge (research/build), status badge
- The original prompt/task from
CLAUDE.md - Executive summary (first 2-3 paragraphs of
report.md) - Stats row: branches explored, questions answered/open, estimated tokens
- Expandable sections (collapsed by default, pure HTML
<details>):- Findings — each branch as a sub-card with title + first paragraph, linking to full finding
- Questions — open questions (highlighted) + answered questions (muted)
- Trace — chronological action log
- Full Report — complete rendered markdown
- Sessions sorted newest first, paginated or lazy-loaded if >10
- Each session is a card showing:
-
Up Next (sidebar on desktop, below feed on mobile)
- Aggregated “Suggested Next Directions” sections from overnight reports
- Each item shows: task description, source session, related project
- Items grouped by project when possible
- Manual entries supported via a simple
apps/hub/src/content/tasks/collection
/projects (replaces /businesses)
- Same grid of all ventures but renamed to “Projects” for internal clarity
- Each card links to the live site AND shows recent activity count (blog posts, overnight sessions mentioning this project)
/overnight/[slug] — Full Report Page (keep existing, improve styling)
- Full rendered report with table of contents
- Links back to feed
/docs and /docs/[slug] — Keep as-is, accessible from nav
Data Model Changes
Enhanced Overnight Content Schema:
// apps/hub/src/content.config.ts
const overnight = defineCollection({
loader: glob({ pattern: '**/*.md', base: './src/content/overnight' }),
schema: z.object({
title: z.string(),
date: z.coerce.date(),
mode: z.enum(['research', 'build']).default('research'),
status: z.enum(['complete', 'partial', 'failed']).default('complete'),
topic: z.string().optional(),
task: z.string().optional(), // original prompt from CLAUDE.md
branches: z.number().optional(), // count of exploration branches
questionsOpen: z.number().optional(),
questionsAnswered: z.number().optional(),
nextSteps: z.array(z.string()).default([]), // suggested next directions
relatedProjects: z.array(z.string()).default([]), // project slugs
}),
});
// New: tasks collection for Up Next board
const tasks = defineCollection({
loader: glob({ pattern: '**/*.md', base: './src/content/tasks' }),
schema: z.object({
title: z.string(),
project: z.string().optional(), // project slug
source: z.string().optional(), // overnight session slug
priority: z.enum(['high', 'medium', 'low']).default('medium'),
done: z.boolean().default(false),
}),
});
Enhanced Sync Script (scripts/sync-overnight.sh):
The sync script needs to extract richer data from overnight workspaces:
- Parse
CLAUDE.mdfor the original task/prompt - Count findings in
findings/directory - Parse
questions.mdfor open vs answered counts - Extract “Suggested Next Directions” section from
report.mdinto frontmatternextStepsarray - Detect related projects by matching business slugs in report text
- Include individual findings as sub-sections in the synced markdown (or as separate files)
Sync Script Enrichment
# Current: just copies report.md with minimal frontmatter
# Proposed: builds a rich composite document
# For each completed run:
# 1. Extract task from CLAUDE.md (everything after first heading)
# 2. Count findings/*.md files
# 3. Parse questions.md: count [ANSWERED] vs total
# 4. Extract "Suggested Next Directions" from report.md → nextSteps array
# 5. Scan report for business slugs → relatedProjects
# 6. Composite output:
# - Frontmatter with all extracted metadata
# - Full report.md content
# - --- separator ---
# - Each finding appended as ## Finding: <title>
# - Questions section
# - Trace section
UI Components
New Astro components in apps/hub/src/components/:
| Component | Purpose |
|---|---|
OvernightCard.astro | Single session card with expandable sections |
FindingsList.astro | Renders branch findings with summaries |
QuestionsList.astro | Open/answered questions with visual indicators |
UpNextBoard.astro | Task board grouped by project |
ProjectCard.astro | Project link card with activity badge |
StatsBadge.astro | Small stat indicator (branches, questions, etc.) |
All components use var(--brand-*) CSS tokens and <details> for expand/collapse (no JS needed).
Navigation Update
Sendy HQ [Feed] [Projects] [Overnight] [Docs]
- Feed =
/(default, overnight-focused) - Projects =
/projects(renamed from Businesses) - Overnight =
/overnight(full archive) - Docs =
/docs
Technical Considerations
Static Site / No JS Required:
- All expand/collapse uses native
<details>+<summary>HTML elements - Styled with Tailwind’s
open:variant for smooth transitions - Zero client-side JavaScript needed
Build-Time Aggregation:
aggregate.tsalready scans filesystem at build time — extend for richer overnight data- The
taskscollection is a simple markdown directory, manually curated or auto-generated by sync
Sync Script is the Bridge:
- The sync script is the single point where overnight workspace data enters the repo
- Enriching it means the Astro site stays simple (just reads frontmatter)
- Idempotent: re-running skips already-synced sessions
Deployment:
- Already works: hub deploys to
hub.pages.devvia existing GitHub Actions - No workflow changes needed
- Public URL is available immediately after first push
Acceptance Criteria
- Homepage shows overnight sessions as expandable cards with task, summary, stats
- Each card expands to show findings, questions, trace, and full report
- “Up Next” section aggregates next steps from overnight reports
-
/projectspage lists all ventures with live site links - Sync script extracts task, branches, questions, next steps from overnight workspaces
-
<details>expand/collapse works without JavaScript - Site builds successfully and deploys to
hub.pages.dev - Navigation updated: Feed, Projects, Overnight, Docs
Implementation Phases
Phase 1: Enhanced Sync Script
- Update
scripts/sync-overnight.shto extract rich metadata - Add composite document format (report + findings + questions + trace)
- Create
apps/hub/src/content/tasks/directory - Files:
scripts/sync-overnight.sh
Phase 2: Content Schema + Components
- Update
apps/hub/src/content.config.tswith enhanced schema + tasks collection - Create
OvernightCard.astro,FindingsList.astro,QuestionsList.astro,UpNextBoard.astro - Files:
apps/hub/src/content.config.ts,apps/hub/src/components/*.astro
Phase 3: Pages
- Redesign
/(index.astro) with overnight feed + Up Next sidebar - Rename
/businesses→/projectswith activity badges - Update
HubLayout.astronav links - Files:
apps/hub/src/pages/index.astro,apps/hub/src/pages/projects.astro,apps/hub/src/layouts/HubLayout.astro
Phase 4: Polish
- Style
<details>expand/collapse with Tailwindopen:variants - Add empty states for when no overnight sessions exist yet
- Verify build + preview
- Files:
apps/hub/src/styles/brand.css
Success Metrics
- Morning workflow: open hub → see overnight work → expand interesting findings → check Up Next → start working (under 2 minutes)
- Lana can browse the hub and understand what’s been happening without any technical context
- All content auto-publishes when pushed to main
Dependencies & Risks
- No overnight runs yet: The
~/overnight-runs/directory is empty. Need to run at least one overnight session to generate real data. Can create sample content for development. - Sync is manual: User must run
sync-overnight.shand commit. Could be automated with a pre-build hook or GitHub Action, but manual is fine for now. - Report format may vary: Early overnight reports may not have consistent “Suggested Next Directions” sections. Sync script should handle missing sections gracefully.
Sources & References
- Existing hub site:
apps/hub/src/(all files) - Overnight skill:
.claude/skills/overnight/SKILL.md(report format, findings structure) - Dashboard data model:
scripts/overnight-dashboard.py(status JSON with findings, questions, branches) - UI token conventions:
docs/solutions/ui-patterns/astro-page-brand-token-consistency.md - Deployment:
.github/workflows/deploy.yml(auto-deploy to Cloudflare Pages)