Files
backend/README.md
Andriy Oblivantsev a2aae391ad
CI / test (push) Successful in 5s
Add PostGIS compose service and update public integration docs.
Wire API services to PostGIS in docker-compose, broaden CORS handling for cross-origin clients, and align developer docs with the production momswap URL.

Made-with: Cursor
2026-03-01 12:08:47 +00:00

2.2 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:8080.

Optional environment variables:

  • ADDR (default :8080)
  • 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) on 5432
  • api on 8080, wired with DATABASE_URL to the db service

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:

  • api service uses the production runtime image target.
  • api-dev profile uses the dev image target and Docker Compose watch.
  • Build cache is persisted at .docker/buildx-cache via cache_from/cache_to.
  • 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:8080/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 test in libs/geo-api-client