77b5eb86c8
Add CLAUDE.md with repo guidance and architecture notes Add new post "The Haircut Nobody Mentioned" Adjust pubDate for Clearing the Queue and Knowing Your Worth Remove draft flag from Knowing Your Worth Fix frontmatter in Building as Avoidance
38 lines
2.4 KiB
Markdown
38 lines
2.4 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
npm run dev # Start dev server (http://localhost:4321)
|
|
npm run build # Type-check (astro check) + production build
|
|
npm run preview # Preview the production build locally
|
|
```
|
|
|
|
There are no test or lint commands beyond `astro check` (run as part of `build`).
|
|
|
|
## Architecture
|
|
|
|
**Cozy Den** is the personal site for hiddenden.cafe. It's an Astro 4 project in `hybrid` output mode with a Node.js standalone adapter, which means most pages are statically generated at build time but API routes under `src/pages/api/` run as server-side handlers at runtime.
|
|
|
|
### Key directories
|
|
|
|
- `src/content/` — Astro Content Collections (blog, coffee, links, guestbook). Schemas and Zod validation live in `src/content/config.ts`. Blog posts support frontmatter fields for tags, categories, series, audio URLs, and featured-essay flags.
|
|
- `src/pages/api/` — SSR API endpoints. `api/guestbook/submit.ts` handles guestbook POST submissions; `api/admin/` handles admin session auth.
|
|
- `src/lib/` — All shared TypeScript utilities: `db.ts` (SQLite setup/schema), `auth.ts` (admin sessions), `guestbook.ts` (submission logic), `spam.ts` (honeypot + keyword pattern detection + input sanitization), `blog.ts`, `readingTime.ts`.
|
|
- `src/layouts/BaseLayout.astro` — Root layout; defines all global CSS custom properties (Catppuccin Mocha palette, typography, spacing).
|
|
- `src/components/` — Reusable `.astro` components (Card, Nav, Section, ServiceItem, SupportItem).
|
|
|
|
### Database
|
|
|
|
SQLite via `better-sqlite3`. Tables: `guestbook_entries` (moderated submissions), `admin_sessions` (expiring tokens), `rate_limit` (per-IP), `audit_log`. The schema is initialized in `src/lib/db.ts` on first run — no separate migration step.
|
|
|
|
### Styling
|
|
|
|
Vanilla CSS only — no Tailwind. All colour tokens are CSS variables on `:root` using the Catppuccin Mocha palette, with `prefers-color-scheme` overrides for light mode. Animations respect `prefers-reduced-motion`. Fonts are monospace (JetBrains Mono / Fira Code / SF Mono).
|
|
|
|
### Deployment
|
|
|
|
The site runs as a Docker container (standalone Node on port 3000) behind Nginx. The image is pushed to `git.hiddenden.cafe`. Copy `.env.example` to `.env` for TTS API keys (Google / Mistral / OpenAI) used by `scripts/tts_generate.py` when generating audio versions of blog posts.
|