chore: add CLAUDE.md with project guidance for Claude Code

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Julien Calixte
2026-02-09 21:14:23 +01:00
parent f5f02dbc6d
commit 575852c124

44
CLAUDE.md Normal file
View File

@@ -0,0 +1,44 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
litenote-jetstream is the backend for Litenote, a blogging platform built on the AT Protocol (Bluesky ecosystem). It has two processes:
1. **Jetstream listener** (`jetstream.ts`) — Subscribes to the AT Protocol firehose via `@skyware/jetstream`, filtering for `space.litenote.note` records. On create/update events, it upserts notes into a local SQLite database.
2. **HTTP API server** (`server.ts`) — An Oak (Deno HTTP framework) server on port 8080 that exposes read-only endpoints to query stored notes.
Both processes share the same SQLite database (`src/data/db.ts`).
## Commands
```bash
# Run jetstream listener (dev, with watch)
deno task jetstream
# Run API server (dev, with watch)
deno task server
# Run both for production (as in Docker)
deno task jetstream:prod & deno task server:prod
# Run database migration
deno task migrate
# Lint
deno lint
# Format
deno fmt
```
## Architecture
- **Runtime**: Deno (not Bun, despite the README). Uses `deno.json` for task definitions and import maps.
- **Database**: SQLite via `https://deno.land/x/sqlite/mod.ts`. DB path is configurable via `SQLITE_PATH` env var, defaults to `notes.db`.
- **Note schema**: Defined as an AT Protocol lexicon in `lexicons/space/litenote/note.json`. Notes have `title`, `content` (markdown), optional `images` (blob refs), `publishedAt`, and `createdAt`. Primary key is `(did, rkey)`.
- **API endpoints**:
- `GET /notes?cursor=&limit=` — paginated notes (all users)
- `GET /:did/notes?cursor=&limit=` — paginated notes for a specific DID
- **Pagination**: cursor-based using `rkey`, descending order.