Files
backend/README.md
Andriy Oblivantsev c2aa716ed8
CI / test (push) Successful in 5s
Switch local API port to 8122 and keep DB internal.
Update runtime defaults, compose mappings, frontend defaults, and developer docs to use port 8122 while keeping PostGIS reachable only via the internal compose network.

Made-with: Cursor
2026-03-01 12:12:44 +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: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) on 5432
  • api on 8122, 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: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 test in libs/geo-api-client