hack0 reads hackathons, meetups, workshops and conferences from Luma calendars, Meetup groups and Eventbrite organizers, merges the same event seen in several places into one, and publishes a page for every event, city and topic. Curators feature the best ones for a weekly agenda; apps and agents read the same catalog through a REST API and an MCP server.
bun install
bun run dev # apps/web on localhost:3000Set DATABASE_URL in apps/web/.env.local to use the Postgres catalog; without it the site reads the hack0 Luma calendar with LUMA_API_KEY.
cd apps/web
bun run db:migrate # apply the Drizzle migrations
bun run scripts/seed-sources.ts # the starting set of calendarsbun run test # unit + Postgres integration (TEST_DATABASE_URL)
bun run typecheck
bun run lint # Biome
bun run quality # crafter-lintCI also builds the site against a seeded Postgres and requests every public route, which catches pages that only break in production.
Create a token in hack0.dev/admin, under API.
curl -H "Authorization: Bearer hack0_sk_..." \
"https://hack0.dev/api/v1/events?status=upcoming&country=PE&limit=20"| Endpoint | |
|---|---|
GET /api/v1/events |
Events, filtered by status, country, provider, calendar, from, to; paged with cursor |
GET /api/v1/events/:id |
One event with every source that lists it |
GET /api/v1/events/export |
The filtered catalog as CSV or JSON |
GET /api/v1/calendars |
Sources and their sync state |
POST /api/mcp |
MCP server: list_events, get_event, list_calendars |
Tokens allow 120 requests per minute and return x-ratelimit-* headers.
apps/web/ hack0.dev: Next.js, Drizzle on Neon, Vercel Workflow and Cron, Clerk for /admin
packages/cli/ @crafter/hack0, the agent-first CLI for workshop installs
docs/ architecture and the workshop distribution contract
- docs/architecture.md: how sources become pages, and what decides a listing
- docs/contract.md: workshop distribution
Built by Crafter Station. Apache-2.0