A platform to create and manage events, meetups and communities. This repository holds the first iteration: a TypeScript monorepo with a modular-monolith API and a Next.js web app that together cover one end-to-end flow — sign in, create an event, publish it, let attendees register on a public page, and review the attendee list.
- Organizer login with a database-backed session (httpOnly cookie).
- Create, update and publish events with a configurable registration form.
- Public event page with SSR for sharing and SEO.
- Public (or auth-gated) attendee registration with capacity and duplicate checks.
- Organizer dashboard and admin view with the attendee list.
Three bounded contexts carry real code: identities, events, registrations. The rest of the product (communities, proposals, volunteers, check-ins, live interactions…) lives in the roadmap, not as empty folders.
| Area | Choice |
|---|---|
| Monorepo | pnpm workspaces + Turborepo |
| API | Node.js, Fastify, hand-wired composition root |
| Domain | Plain TypeScript, no framework imports |
| Persistence | PostgreSQL + Drizzle ORM (drizzle-kit migrations) |
| Web | Next.js App Router, React, TanStack Query |
| Contracts/validation | Zod (shared between API and web) |
| Tests | Vitest (unit/use-case/integration), Playwright (E2E) |
pnpm install
pnpm db:up # start Postgres (docker) — see docs for the user-space alt
pnpm db:migrate
pnpm db:seed # demo organizer + a published event
pnpm dev # API on :3001, web on :3000Sign in with the seeded organizer: organizer@meetup.test / password123.
Full setup, including the user-space Postgres alternative, is in docs/development/getting-started.md.
apps/
api/ Fastify API: identities, events, registrations, shared, bootstrap
web/ Next.js App Router web client
packages/
shared-kernel/ Result, ids, errors, Zod contracts shared by api + web
config/ tsconfig base, eslint, prettier
testing/ Vitest base config and helpers
docs/ Architecture, domain, features, ADRs, roadmap
- Architecture overview
- Module boundaries
- Dependency rules
- Domain glossary
- API reference
- Testing strategy
- Roadmap (phases 0–10)
- Architecture decision records
pnpm lint # eslint across the workspace
pnpm typecheck # tsc --noEmit per package
pnpm test # unit + use-case tests
pnpm test:integration # Drizzle repos against a real Postgres
pnpm --filter @meetup/web test:e2e # Playwright main flow