Our own meetup platform, replacing meetup.com. Events, sign ups, waitlist,
speakers and the history of everything we did before. Runs on
modernnerdplace.nl, on our own hardware, for the cost of the electricity.
Next.js 15 with the App Router, React 19, TypeScript, Tailwind, Prisma on PostgreSQL. Node 20.
cp .env.example .env
docker compose up -d postgres
npm ci
npm run prisma:migrate
npm run devThe site is then on http://localhost:3000. The database runs in Docker on
127.0.0.1:5432; everything else runs on the host, so hot reload works
normally.
To check the production image instead, docker compose up -d --build starts the
app container and the database together. Do that whenever you touch the
Dockerfile.
Useful scripts:
| Command | What it does |
|---|---|
npm run dev |
Dev server |
npm run typecheck |
tsc --noEmit |
npm run build |
prisma generate plus next build |
npm run prisma:migrate |
Create and apply a migration locally |
npm run prisma:studio |
Browse the database |
npm run seed |
Seed data |
npm run import:meetup |
Import the meetup.com history |
docs/deploy.mdhow it runs in production: Proxmox LXC, docker compose, Cloudflare tunnel, backup and restore, first organiser.docs/avg.mdwhich personal data this stores, and what still needs deciding now that we host it ourselves.AGENTS.mdconventions, and who owns which files.prisma/schema.prismathe data model, and the contract between all the parts.
CI runs the typecheck and the build on every push to main and on every pull
request, without a database.