Pace is an open-source project management platform for tracking work items, running cycles, and managing product roadmaps without the overhead of managing the tool itself.
This repository is the Pace application and its gradual backend migration. The web application remains compatible with the existing product while API modules move from Django to Go (Gin + GORM) against the same PostgreSQL schema.
- Work items — create, organize, and track tasks with rich text, files, and relationships.
- Cycles — plan iterations and monitor progress with cycle views and burn-down charts.
- Modules — break large projects into smaller, manageable units.
- Views — save and share filters for the issues that matter most.
- Pages — capture ideas and turn notes into actionable work.
- Analytics — understand project health and remove blockers with real-time insights.
See CONTRIBUTING.md for local development instructions. The existing Docker and Kubernetes deployment configuration is still supported while the migration is in progress.
For the Go API, see apps/api/README.md.
The migration is intentionally incremental. Django remains the behavioral reference and continues to serve every module that has not passed contract and integration verification in Go.
| Stage | Scope | Status |
|---|---|---|
| PR #1 | Pace brand update | Complete |
| PR #2 | Go API foundation (Gin, GORM, PostgreSQL, proxy wiring) | Complete |
| PR #8 | Authentication (/auth/) |
Complete |
| PR #9 | User, profile, and account APIs | Complete |
| PR #10 | Core Workspace APIs | Complete |
| PR #11 | Workspace Themes | In review |
Migration rules:
- One business module gets one independent branch and pull request.
- Only one migration pull request is open at a time; the next module starts after the current module is merged into
main. - Django behavior is the compatibility baseline for URLs, status codes, JSON, permissions, sessions, cookies, and database side effects.
- A module is cut over only after contract and integration tests pass against the existing Django schema.
- Unmigrated routes continue to be served by Django; migration work does not require a flag day.
cd apps/api
go test -count=1 ./...
go test -race -count=1 ./...
go vet ./...To verify GORM writes against a disposable PostgreSQL database that already has the Django schema, opt in with a connection string:
AUTH_TEST_DATABASE_URL=postgres://... \
go test -count=1 ./internal/auth \
-run TestGORMRepositoryAgainstDjangoSchema
USER_TEST_DATABASE_URL=postgres://... \
go test -count=1 ./internal/user \
-run TestUserModelsAgainstDjangoSchema
WORKSPACE_TEST_DATABASE_URL=postgres://... \
go test -count=1 ./internal/workspace \
-run TestWorkspaceModelsAgainstDjangoSchemaOpen an issue or pull request in the Pace repository. Please read CONTRIBUTING.md before submitting changes. Security issues should be reported privately to the maintainers rather than disclosed in a public issue.
This project is licensed under the GNU Affero General Public License v3.0.