Files
Primora/CONTRIBUTING.md
Tomas DvorakandDevin 4f66c72121 docs: slim README, move detail into per-app and contributor docs
README down to the Containr skeleton: header, three-screenshot row
(rest behind <details>), features, architecture, quick start, links.
Dropped tables and sections already covered by QUICK_START.md.
Native dev commands and repo layout moved to CONTRIBUTING.md;
CLI/MCP usage moved to new per-app READMEs.

Authored By: TDvorak <[email protected]>

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-21 16:46:32 +02:00

2.7 KiB

Contributing

Setup

See QUICK_START.md. The short version:

cp .env.example .env
docker compose up -d --build

For native development run only the infrastructure in Docker and start the three services yourself:

docker compose up -d postgres dragonfly mailpit   # infrastructure only
cd apps/backend && go run ./cmd/server            # API on :8080
npm run dev:auth                                  # auth on :3001
npm run dev:frontend                              # dashboard (Vite)

Point the frontend at the stack via apps/frontend/.env.local:

VITE_API_BASE_URL=http://localhost/api/v1
VITE_AUTH_BASE_URL=http://localhost/auth

Or skip the backend entirely: ?demo=true runs a fully client-side workspace.

Workflow

  1. Fork, branch from main, keep changes scoped.

  2. Run the quality gate before opening a PR:

    npm run check
    

    This runs backend tests, the frontend typecheck, all workspace builds, and verifies generated code has not drifted.

  3. If you changed database queries or migrations, run npm run generate:sqlc. If you changed apps/backend/openapi/openapi.yaml, run npm run generate:client. Commit the regenerated output with your change.

Repository layout

apps/
  backend/     Go + Gin API, sqlc, migrations, object storage
  auth/        Better Auth on Hono (sessions, JWT, OAuth, mail)
  frontend/    SolidJS + Tailwind dashboard
  cli/         `primora` CLI - login, context, projects, buckets, objects, keys, audit
  mcp/         `@primora/mcp` - MCP stdio server exposing `primora_*` tools
  desktop/     Tauri 2 shell - connects to a deployment URL, tray presence
packages/
  api-client/  OpenAPI-generated TypeScript client (do not hand-edit)
  shared-types/
infra/nginx/   Reverse proxy config
scripts/       setup.sh, verify-production-ready.sh

Conventions

  • Generated code is never hand-edited — packages/api-client/src/generated and apps/backend/internal/database/db are outputs, not sources.
  • Go — gofmt, go vet clean; table-driven tests where they fit.
  • SolidJS — Composition via signals, <Show>/<For> control flow, no manual DOM manipulation. Styles come from the design tokens in apps/frontend/src/index.css — new colors/surfaces belong there, not in ad-hoc hex values.
  • API changes — update openapi.yaml first, then implement. The spec is the contract.
  • Keep commits focused; describe why, not what.

Reporting bugs

Open an issue with the failing endpoint or view, what you expected, what you got, and docker compose logs output for the relevant service.

Security

Do not open public issues for vulnerabilities — see SECURITY.md.