generated from Nicholai/astro-template
82 lines
2.4 KiB
Markdown
82 lines
2.4 KiB
Markdown
# CLAUDE.md
|
|
|
|
Development guidance for this Astro template repository.
|
|
|
|
## Commands
|
|
|
|
### Core Development
|
|
```bash
|
|
pnpm dev # Development server
|
|
pnpm build # Build for production
|
|
pnpm preview # Preview build with Wrangler
|
|
pnpm deploy # Deploy to Cloudflare Pages
|
|
```
|
|
|
|
### Utilities
|
|
```bash
|
|
pnpm commit # AI-powered commit messages
|
|
pnpm convert:avif:all # Convert all images to AVIF
|
|
pnpm convert:avif:jpeg
|
|
pnpm convert:avif:png
|
|
pnpm cf-typegen # Generate Cloudflare types
|
|
```
|
|
|
|
## Change Documentation
|
|
|
|
**IMPORTANT**: Update `dev/continuity.md` when making changes to document:
|
|
- What changed and why
|
|
- Decisions made
|
|
- Next steps
|
|
|
|
## Architecture
|
|
|
|
Minimal Astro template with content-driven architecture:
|
|
|
|
### Content Layer (`src/content/`)
|
|
- **blog/** - MDX blog posts with schema validation
|
|
- **sections/** - Homepage sections (hero, experience, skills, featured-project)
|
|
- **pages/** - Page-specific content (contact)
|
|
|
|
Schema defined in `src/content.config.ts`
|
|
|
|
### Component Layer
|
|
- **Core UI**: BlogCard, FormattedDate, Navigation, Footer, GridOverlay
|
|
- **Blog**: BlogFilters, ReadingProgress, TableOfContents, PostNavigation, RelatedPosts
|
|
- **Sections**: Hero, Experience, Skills, FeaturedProject
|
|
|
|
### Routes
|
|
- Static routes in `src/pages/`
|
|
- Dynamic blog routes via `[...slug].astro`
|
|
- Layouts in `src/layouts/`
|
|
|
|
## Data Flow
|
|
|
|
**Blog Index** (`src/pages/blog/index.astro`):
|
|
1. Fetch all posts via `getCollection('blog')`
|
|
2. Sort by pubDate (newest first)
|
|
3. Identify featured post (first with `featured: true`)
|
|
4. Render featured hero + filterable grid
|
|
5. Extract categories for filter UI
|
|
|
|
**Individual Posts** (`src/pages/blog/[...slug].astro`):
|
|
1. `getStaticPaths()` generates routes
|
|
2. Calculate previous/next posts (by date)
|
|
3. Find related posts (matching category/tags, limit 3)
|
|
4. Calculate reading time (200 wpm)
|
|
5. Pass to `BlogPost` layout
|
|
|
|
## Image Handling
|
|
- `src/assets/` - Processed by Astro (relative paths)
|
|
- `public/media/` - Served as-is (absolute paths like `/media/file.mp4`)
|
|
- AVIF conversion utility available
|
|
|
|
## Deployment
|
|
- Cloudflare Pages adapter configured
|
|
- Image service: "compile" mode
|
|
- Platform proxy enabled for development
|
|
|
|
## Utility Scripts
|
|
|
|
- **`src/utils/convert-to-avif.js`** - Image optimization
|
|
- **`src/utils/git-commit.js`** - AI commit message generation (requires OpenRouter API key in `src/utils/.env`)
|