Work, without the weight.
Nimbus is a realtime kanban issue tracker for teams who would rather ship than click through menus. Create a workspace, invite members, and move issues through Todo, In Progress, In Review, and Done — with realtime sync, optimistic UI, and role-based access control.
- Workspaces — multi-tenant workspaces with invite-link onboarding and owner/admin/member role hierarchy
- Authentication — JWT access tokens with rotating refresh tokens in httpOnly cookies, a dedicated refresh endpoint, silent access-token refresh, and per-route rate limiting
- Membership — invite, join, role assignment, and member management with strict RBAC
- Issues — full CRUD with status/priority/assignee fields, filtering, pagination, and search
- Realtime kanban board — in development
Turborepo monorepo, managed with Bun.
| Layer | Technology |
|---|---|
| Web app | Next.js 16, React 19, App Router |
| API | Express 5, TypeScript (ESM) |
| Database | PostgreSQL via Drizzle ORM (Neon serverless) |
| Cache / rate limiting | Redis (optional, in-memory fallback) |
| Shared code | @nimbus/types (Zod schemas), @nimbus/ui (components) |
apps/
web/ Main product app (port 3000)
docs/ Documentation app (port 3001)
api/ Express API (port 4000)
packages/
types/ Shared Zod schemas and TypeScript types
ui/ Shared React components
eslint-config/ Flat ESLint configs
typescript-config/ Shared tsconfigs
Prerequisites: Bun 1.3.14+
bun installConfigure the API environment (see apps/api/.env.example):
cp apps/api/.env.example apps/api/.env.localThe API loads .env and .env.local (in that order) from apps/api/ and fails fast if DATABASE_URL, JWT_ACCESS_SECRET, or JWT_REFRESH_SECRET are missing. See apps/api/.env.example for the full variable list — including WEB_APP_ORIGIN, which controls the allowed CORS origins.
Apply database migrations:
cd apps/api && bunx drizzle-kit pushStart development servers:
turbo dev # all apps
turbo dev --filter=api # API only
turbo dev --filter=web # web app onlyturbo lint
turbo check-types
turbo buildThere is no test framework; verification is lint, type-check, build, and manual testing.