Skip to content

Getting Started

This page takes you from a fresh clone to a running backend and frontend, both with hot reload. Local development is driven entirely by the root Makefile.

  • Docker + Compose — used to run PostgreSQL (with pgvector) and Mailpit locally. docker-compose or podman-compose both work.
  • Go 1.25.x — the Makefile pins GOTOOLCHAIN=go1.25.11, so Go downloads and uses that exact toolchain on demand even if your system Go is newer.
  • Node.js >= 20 — for the frontend (its engines field requires >=20).
  • pre-commit — required; commits are gated on it. Install with pipx install pre-commit or brew install pre-commit.
  • air — for backend hot reload. Install with go install github.com/air-verse/air@latest.
Terminal window
git clone https://github.com/vibexp/vibexp.git
cd vibexp

Do this once per clone, before your first commit. The hooks run the same checks CI runs.

Terminal window
pre-commit install
Terminal window
make backend-run-dev

This target:

  • starts PostgreSQL and Mailpit via Compose,
  • starts the API under air for hot reload on any .go change.

The local email inbox (Mailpit) UI is at http://localhost:8025, and the API serves on http://localhost:8080 (health check at http://localhost:8080/health).

In a second terminal:

Terminal window
make frontend-run-dev

This copies frontend/.env from .env.example if missing, installs dependencies if node_modules is absent, and starts the Vite dev server at http://localhost:5173.

Dev-login bypass (no WorkOS needed locally)

Section titled “Dev-login bypass (no WorkOS needed locally)”

You do not need a WorkOS account to develop locally. The dev defaults enable a dev-login bypass (DEV_LOGIN_ENABLED), so you can sign in and click around immediately. WorkOS / OIDC is only required for real deployments — see the self-hosting docs for production auth configuration.

Run these before committing (CI runs the same targets):

Terminal window
# Backend
make backend-test # go test -race ./...
make backend-lint # golangci-lint
make backend-check # lint + vulncheck + security scan
# Frontend
make frontend-test # vitest
make frontend-lint # eslint
make frontend-type-check # tsc