Thanks for your interest in contributing! This guide will help you get started.
- Node.js 22+
- pnpm 10+ (
npm install -g pnpm) - Docker Desktop with Kubernetes enabled
git clone https://github.com/jonwiggins/optio.git
cd optio
pnpm install
# Start Kubernetes infrastructure
./scripts/setup-local.sh
# Start dev servers (API + Web)
pnpm devThe API runs on http://localhost:4000 and the web UI on http://localhost:3000.
docker build -t optio-agent:latest -f Dockerfile.agent .
# Load into K8s containerd (Docker Desktop)
docker save optio-agent:latest | docker exec -i desktop-control-plane ctr -n k8s.io image import --digests -apps/api/ Fastify API server + BullMQ workers
apps/web/ Next.js web UI
packages/ Shared libraries (types, runtime, adapters, providers)
helm/ Production Helm charts
images/ Agent container Dockerfiles
k8s/ Local dev K8s manifests
pnpm dev # Start API + Web with hot reload
pnpm turbo typecheck # Typecheck all packages
pnpm turbo test # Run tests
pnpm format # Format with Prettier
pnpm lint # Lint with ESLint# Edit apps/api/src/db/schema.ts, then:
cd apps/api && npx drizzle-kit generate # Generate migration
cd apps/api && npx drizzle-kit migrate # Apply migration- Create the route handler in
apps/api/src/routes/ - Register it in
apps/api/src/server.ts - Add the API client method in
apps/web/src/lib/api-client.ts
We use Conventional Commits. Commit messages are enforced by commitlint.
feat: add new feature
fix: fix a bug
docs: documentation changes
style: formatting, no code change
refactor: code change that neither fixes nor adds
perf: performance improvement
test: add or update tests
build: build system or dependencies
ci: CI configuration
chore: maintenance
- Fork the repo and create a feature branch
- Make your changes with tests
- Ensure
pnpm turbo typecheckandpnpm turbo testpass - Submit a PR using the template
- Wait for CI to pass and a maintainer review
- TypeScript with strict mode
- ESM modules (
.jsextensions in imports) - Prettier for formatting (runs on commit via Husky)
- Tailwind CSS v4 for styling
- Zustand for client state
- Zod for API validation
- Drizzle ORM for database
MIT — see LICENSE