Andriy Oblivantsev 26de435ff1
CI / test (push) Successful in 4s
Fix MapLibre glyph source to OpenMapTiles fonts.
Switch OSM Liberty glyph URL template to fonts.openmaptiles.org so Roboto glyph ranges resolve without 404 errors in the demo.

Made-with: Cursor
2026-03-02 22:06:55 +00:00
2026-03-02 21:21:21 +00:00
2026-03-02 21:21:21 +00:00
2026-03-02 21:21:21 +00:00

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

Run tests via Docker (avoids local permission issues, e.g. var/):

docker compose --profile test run --rm test

Primary deployed base URL: https://tenerife.baby/.

Local default (for development): http://localhost:8122.

Optional environment variables:

  • ADDR (default :8122)
  • ADMIN_PUBLIC_KEYrequired for registration: bootstrap admin + service key for register-by-signature. Generate with ./bin/gen-admin-key.sh
  • SERVICE_PUBLIC_KEY (public key users sign to register; defaults to ADMIN_PUBLIC_KEY)

Deployment: Set ADMIN_PUBLIC_KEY before starting. Without it, /v1/service-key returns 503 and registration is disabled.

Docker Compose

Generate server keys (creates etc/server-service.*), then build and run:

./bin/gen-server-keys.sh
COMPOSE_BAKE=true docker compose up --build -d

Or use ./bin/up.sh which runs the key generation if needed.

This starts:

  • db (postgis/postgis) on 5432 inside the container, exposed as 7721 on the host for remote access
  • api on 8122 — uses PostgreSQL via DATABASE_URL (migrations run on startup)
  • minio (S3-compatible storage) with admin UI on 8774 and internal S3 API on 9000

Remote DB access (e.g. postgres://momswap:momswap@HOST_IP:7721/momswap?sslmode=disable): The init script etc/pg-init-remote.sh configures pg_hba.conf for remote connections on fresh installs. If the DB was initialized before that was added, run once: ./bin/fix-pg-remote.sh

Stop the service:

docker compose down

For local development with file watching/rebuild:

COMPOSE_BAKE=true docker compose up -d
COMPOSE_BAKE=true docker compose watch

Notes:

  • api service listens on 8122 inside the container, mapped to host 8122 (reverse proxy at https://tenerife.baby).
  • api service uses the production runtime image target.
  • api-dev profile uses the dev image target and Docker Compose watch.
  • DB defaults can be overridden via POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD.
  • S3 defaults can be overridden via S3_ENDPOINT, S3_BUCKET, S3_REGION, S3_ACCESS_KEY, S3_SECRET_KEY, S3_USE_PATH_STYLE, S3_USE_TLS.

Frontend

Frontend is served by the Go backend at runtime.

Example:

go run ./cmd/api

Then visit:

  • Production: https://tenerife.baby/web/
  • Local: http://localhost:8122/web/
  • Local Leaflet demo: http://localhost:8122/web/leaflet-demo.html
  • Local MapLibre GL + Three.js demo: http://localhost:8122/web/maplibre-demo.html

Documentation

Doc Description
docs/frontend-development.md Demo app (web/), client build, local dev
docs/typescript-frontend-integration.md TypeScript client API, integration flow, examples
docs/ed25519-security-use-cases.md Ed25519 auth flows, registration, signatures
docs/geo-auth-backend-plan.md Architecture and planning
docs/assets-storage-and-sharing.md Asset metadata, dedup, visibility rules, and properties.assets contract
docs/docker-minio-local-dev.md MinIO compose topology, bucket bootstrap, and local verification

API client library

Path: libs/geo-api-client

cd libs/geo-api-client
bun install
bun test
bun run build

CI

Workflow: .gitea/workflows/ci.yml

  • go test ./...
  • bun test in libs/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.
Description
No description provided
Readme 17 MiB
Languages
HTML 37.2%
CSS 35.2%
SCSS 17.8%
Go 4.7%
JavaScript 2.8%
Other 2.2%