A multi-author blog with post revisions, real-time collaborative editing, and quote-anchored comments. See PLAN.md for the full architecture and design rationale.
- Node.js 20+
- PostgreSQL 14+
-
Install dependencies:
npm install
-
Create a database and point
.envat it —.envis never committed and needs:DATABASE_URL="postgresql://user:password@localhost:5432/multiblog?schema=public" AUTH_SECRET="<openssl rand -base64 32>" APP_URL="http://localhost:3000" COLLAB_PORT=1234 NEXT_PUBLIC_COLLAB_URL="ws://localhost:1234" -
Generate the Prisma client and apply migrations:
npx prisma generate npx prisma migrate dev
npm run dev:allRuns the Next.js app (:3000) and the Hocuspocus real-time collab server
(:1234) together via concurrently — one Ctrl+C stops both. Individually:
npm run dev (web only) or npm run collab (collab only). npm run stop:all stops a dev:all you started elsewhere.
npx tsc --noEmit # typecheck
npx eslint . # lintNo test suite yet.
- PLAN.md — architecture, design decisions, and build progress.
- TODO.md — open items carrying enough context to act on directly.
- DEPLOY.md — deploying to a self-managed Linode/Ubuntu box.
- CACHING.md — caching behavior and trade-offs (ISR, etc.).
- PERFORMANCE.md — performance findings and the opt-in perf-logging tool.
- STYLE.md — styling conventions (colors, typography, CSS Modules vs. inline).
- TIPTAP.md — TipTap/ProseMirror gotchas.
- CLAUDE.md — notes for AI coding agents working in this repo.