Social content calendar for RaidGuild publishing plans, drafts, media links, statuses, channel targets, and agent-created events.
The app is a Next.js App Router build using the system-weaver RaidGuild visual system: dark operational UI, compact shadcn controls, Space Grotesk headings, Inter body text, JetBrains Mono labels, teal primary actions, and sharp 4px radii.
- Next.js App Router
- TypeScript
- Tailwind CSS
- shadcn/ui
- React Big Calendar
- date-fns
- Drizzle ORM
- PostgreSQL
- zod
- Vitest
Install dependencies:
npm installCreate a local environment file:
cp .env.example .envSet:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/raidguild_calendar
BARD_CALENDAR_AGENT_API_TOKEN=replace-with-long-random-token
NEXT_PUBLIC_APP_NAME=RaidGuild Content CalendarRun migrations:
npm run db:migrateStart the app:
npm run devIf your machine hits the Linux file watcher limit with next dev, use the production server instead:
npm run build
npm startnpm run dev # Start Next dev server
npm run build # Production build
npm start # Start production server
npm run lint # ESLint
npm test # Vitest test suite
npm run db:generate # Generate Drizzle migrations
npm run db:migrate # Apply Drizzle migrationsHuman UI endpoints:
GET /api/events
POST /api/events
PATCH /api/events/:id
DELETE /api/events/:idAgent endpoints:
GET /api/agent/events
POST /api/agent/events
PATCH /api/agent/events/:id
PUT /api/agent/events/upsertAgent endpoints require:
Authorization: Bearer <BARD_CALENDAR_AGENT_API_TOKEN>See AGENT.md for supported filters, request examples, and response shape.
Health check:
GET /api/healthThe main table is publishing_events.
Migration files live in:
src/lib/db/migrationsThe app expects PostgreSQL in local development and Railway Postgres in production.
- The MVP UI is intentionally unauthenticated.
BARD_CALENDAR_AGENT_API_TOKENmust never be exposed to client code.- Event timestamps are accepted as ISO 8601 strings at the API boundary and stored as
timestamptz. - The calendar supports month and week views.