Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
- 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>
116 lines
3.2 KiB
Markdown
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
|
|
```
|