CI / test (push) Successful in 7s
- Map host 8122 to api container for reverse proxy at momswap.produktor.duckdns.org - Remove buildx cache_from/cache_to to allow docker build on default driver - Document reverse proxy setup in frontend integration guide - Update README with port mapping notes - bun.lock: add deps from bun install for geo-api-client Made-with: Cursor
2.5 KiB
2.5 KiB
Momswap Geo Backend
Go backend service for user-owned GeoJSON feature collections with Ed25519 authentication and invitation-based onboarding.
What is implemented
- Ed25519 challenge-response auth (
/v1/auth/challenge,/v1/auth/login) - Hybrid invitation onboarding (signed invite payload + inviter lineage)
- User registration with ownership proof (
/v1/auth/register) - Per-user collections and Point feature CRUD endpoints
- Static no-build frontend (
web/) using Vue + Vuetify from CDN - Reusable TypeScript API client (
libs/geo-api-client) using@noble/ed25519 - Bun tests for the TS client and Go tests for API flows
- Gitea CI workflow running Go and Bun test suites
Quick start
go test ./...
go run ./cmd/api
Primary deployed base URL: https://momswap.produktor.duckdns.org/.
Local default (for development): http://localhost:8122.
Optional environment variables:
ADDR(default:8122)ADMIN_PUBLIC_KEY(bootstrap initial inviter/admin user)
Docker Compose
Build and run the backend service:
COMPOSE_BAKE=true docker compose up --build -d
This starts:
db(postgis/postgis) on5432apion8122, wired withDATABASE_URLto thedbservice
Stop the service:
docker compose down
For local development with auto-rebuild on file changes:
COMPOSE_BAKE=true docker compose --profile dev up --watch
Notes:
apiservice listens on8122inside the container, mapped to host8122(reverse proxy athttps://momswap.produktor.duckdns.org).apiservice uses the productionruntimeimage target.api-devprofile uses thedevimage target and Docker Compose watch.- DB defaults can be overridden via
POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORD.
Frontend
Frontend is served by the Go backend at runtime.
Example:
go run ./cmd/api
Then visit:
- Production:
https://momswap.produktor.duckdns.org/web/ - Local:
http://localhost:8122/web/
API client library
Path: libs/geo-api-client
cd libs/geo-api-client
bun install
bun test
bun run build
Frontend TypeScript integration guide:
docs/typescript-frontend-integration.md
CI
Workflow: .gitea/workflows/ci.yml
go test ./...bun testinlibs/geo-api-client
Testing policy
- Keep fast unit tests as the default (
go test ./...). - If a test requires a real Postgres instance, use embedded/ephemeral Postgres in the test process or test fixture lifecycle.
- Do not require manually running an external Postgres container for routine test runs.