research-notes/blog/CLAUDE.md
jordan ec0b89206f
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
feat: add audio playback and enhanced note UI with sidebar navigation
- Add AudioSection component with media player and waveform visualization
- Add NoteContent component with inline link support and syntax highlighting
- Add NoteSidebar with collapsible sections for navigation
- Add SidebarContext for managing sidebar state
- Update note page layout to use new component architecture
- Add assets utility for GCS audio/video URL generation
- Update content library with audio/skill/prompt type support
- Add vision.md with editorial guidelines
- Update .gitignore with additional security patterns
- Add upload-asset.sh script for GCS asset management

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 11:08:25 -07:00

116 lines
3.2 KiB
Markdown

# A Research Journal
Personal research projects exploring unfamiliar territory with AI.
**Parent context:** See `../CLAUDE.md` for project-wide routing.
## Development
```bash
npm install
npm run dev
```
Open http://localhost:19197
## Architecture
This blog uses a data-driven architecture:
- **Content lives in `content/`** - YAML metadata + Markdown prose
- **Components in `src/components/`** - Reusable DRY components
- **Dynamic routes** - Notes use `[slug]` for SSG
## Content Structure
```
content/
├── projects/
│ └── maxwell.yaml # Project metadata
├── notes/
│ ├── 001-picking-a-problem/
│ │ ├── meta.yaml # Prompts, navigation, metadata
│ │ └── content.md # Prose content
│ └── 002-building-the-scaffolding/
│ ├── meta.yaml
│ ├── content.md
│ └── files/ # Expandable file contents
│ ├── vision.md
│ ├── architecture.md
│ └── roadmap.md
└── white-paper/
└── outline.yaml # Structured sections
```
## Routes
- `/` - Journal home (list of projects)
- `/maxwell` - Maxwell project landing
- `/maxwell/white-paper` - Formal paper outline
- `/maxwell/notes/[slug]` - Individual research notes (dynamic)
## Adding a Note
1. Create `content/notes/NNN-slug/` directory
2. Add `meta.yaml` with prompts, navigation, filesCreated
3. Add `content.md` with prose
4. Add `files/` directory if filesCreated references files
5. Update previous note's `meta.yaml` navigation.next
## Key Files
| File | Purpose |
|------|---------|
| `src/lib/content.ts` | Content loaders (getProject, getNoteBySlug, etc.) |
| `src/components/layout/PageLayout.tsx` | Page wrapper |
| `src/components/layout/BackNav.tsx` | Back navigation |
| `src/components/notes/NoteHeader.tsx` | Note header (#id, date, title) |
| `src/components/notes/PromptsSection.tsx` | Prompts with copy buttons |
| `src/components/notes/FilesSection.tsx` | Expandable files |
| `src/components/notes/NoteFooter.tsx` | Prev/next navigation |
| `src/components/white-paper/OutlineSection.tsx` | Outline sections |
| `src/components/copyable.tsx` | CopyButton, CopyableBlock, ExpandableFile |
## Inline Links
Reference sidebar items in content.md:
- `[[prompt:id]]` — link to a prompt by its id
- `[[file:name.md]]` — link to a file by its name
- `[[skill:name]]` — link to a skill by its name
- `[[audio:file.m4a]]` — link to an audio file by its name
Click scrolls to item + highlights for 1.5s.
## Note meta.yaml Schema
```yaml
id: "001"
slug: 001-picking-a-problem
date: "2026-02-06"
title: Picking a Problem
preview: "Short description for list view"
prompts:
- id: unique-id
label: Button label
content: |
Prompt content here
filesCreated:
- name: filename.md
description: What this file is
audioFiles: # optional
- name: filename.m4a
title: "Display title"
description: "What this covers"
source: NotebookLM # optional badge
navigation:
prev: null # or { slug, id, title }
next:
slug: 002-building-the-scaffolding
id: "002"
title: Understanding the Project
```