Tenant management: - POST /api/tenants — create tenant (creator becomes owner) - GET /api/tenants — list tenants for authenticated user - GET /api/tenants/:id — tenant details with access check - POST /api/tenants/:id/invite — invite user by email (owner/admin) - DELETE /api/tenants/:id/members/:uid — remove member - GET /api/tenants/:id/members — list members New packages: - internal/services/tenant_service.go — CRUD on tenants + user_tenants - internal/handlers/tenant_handler.go — HTTP handlers with auth checks - internal/auth/tenant_resolver.go — X-Tenant-ID header middleware, defaults to user's first tenant for scoped routes Authorization: owners/admins can invite and remove members. Cannot remove the last owner. Users can remove themselves. TenantResolver applies to resource routes (cases, deadlines, etc.) but not tenant management routes.
KanzlAI-mGMT
Kanzleimanagement online — law firm management for deadlines, appointments, and case tracking.
Structure
backend/ Go API server
frontend/ Next.js 15 (TypeScript, Tailwind CSS)
Development
make dev-backend # Go server on :8080
make dev-frontend # Next.js dev server
make build # Build both
make lint # Lint both
make test # Test both
Tech Stack
- Frontend: Next.js 15, TypeScript, Tailwind CSS
- Backend: Go
- Database: Supabase (PostgreSQL) —
kanzlaischema - Deploy: Dokploy on mLake (kanzlai.msbls.de)
Description
Languages
TypeScript
51.8%
Go
47.8%
Dockerfile
0.1%
CSS
0.1%