30 Commits

Author SHA1 Message Date
2b455dece6 Use explicit fetch + GLTFLoader.parse for GLB model loading.
CI / test (push) Successful in 3s
This avoids internal loader fetch failures, preserves auth headers for private assets, and provides clearer HTTP errors before fallback rendering.

Made-with: Cursor
2026-03-02 22:58:13 +00:00
b1b11b47f7 Render image assets as textured planes in MapLibre demo.
CI / test (push) Successful in 4s
This loads image files via backend asset links (with auth when available), applies them as Three.js textures on plane meshes, and falls back to primitive placeholders if texture loading fails.

Made-with: Cursor
2026-03-02 22:56:51 +00:00
c70d05b583 Render cube placeholder when feature has no linked assets.
CI / test (push) Successful in 4s
This ensures map features remain visible in the MapLibre demo even when properties.assets is empty.

Made-with: Cursor
2026-03-02 22:55:39 +00:00
e3ccd9d252 Avoid GLTF external-resource fetch failures in MapLibre model rendering.
CI / test (push) Successful in 4s
This limits live 3D model loading to self-contained GLB assets and falls back gracefully for GLTF assets, with guidance to prefer GLB for reliable /download rendering.

Made-with: Cursor
2026-03-02 22:55:00 +00:00
63e7e73360 Auto-correct localhost API base on hosted frontend pages.
CI / test (push) Successful in 4s
This prevents stale localStorage geo_api_base values from forcing localhost API calls on production domains by defaulting to window.location.origin when appropriate.

Made-with: Cursor
2026-03-02 22:51:09 +00:00
d4464461b2 Fix hosted MapLibre demo API base and missing Three core module.
CI / test (push) Successful in 4s
This vendors three.core.js required by latest three.module.js and defaults the demo API base to window.location.origin when no local override is saved.

Made-with: Cursor
2026-03-02 22:49:49 +00:00
aec12ff6c5 Upgrade vendored Three.js and MapLibre to latest releases.
CI / test (push) Successful in 4s
This updates Three.js to 0.183.2 and MapLibre GL to 5.19.0, and rewires GLTFLoader utility imports to local vendored modules for browser module compatibility.

Made-with: Cursor
2026-03-02 22:48:19 +00:00
7a16083a2e Guard MapLibre Three.js render against zero-size framebuffers.
CI / test (push) Successful in 4s
This syncs renderer size on map resize and skips render frames when canvas or drawing buffer dimensions are zero to prevent GL_INVALID_FRAMEBUFFER_OPERATION errors.

Made-with: Cursor
2026-03-02 22:46:52 +00:00
800ca832e7 Fix local Three.js module resolution in MapLibre demo.
CI / test (push) Successful in 4s
This vendors BufferGeometryUtils, rewires GLTFLoader imports to local paths, and adds an import map fallback so bare three specifiers resolve correctly in browser.

Made-with: Cursor
2026-03-02 22:45:20 +00:00
e1107256e8 Vendor frontend CDN dependencies and serve them locally.
CI / test (push) Successful in 3s
This switches demo pages and modules to local web/vendor assets, fixes Three GLTFLoader local import resolution, and documents the runtime-data/agent commit workflow updates.

Made-with: Cursor
2026-03-02 22:43:27 +00:00
6f873100ef Load real GLB models in the MapLibre demo instead of placeholder geometry.
CI / test (push) Successful in 4s
This restores true 3D rendering from backend asset links and keeps runtime var data out of git/agent workflows.

Made-with: Cursor
2026-03-02 22:39:20 +00:00
5716d4adf6 Enable moving own features on MapLibre and switch to raster tiles.
CI / test (push) Successful in 4s
Add feature geometry PATCH API support and update MapLibre demo to use OSM raster tiles, load all public/owned features, and let logged-in users drag their own feature markers to persist new positions.

Made-with: Cursor
2026-03-02 22:28:44 +00:00
59c9a719e0 Add public GeoJSON features API and load public 3D objects on maps.
CI / test (push) Successful in 3s
Expose GET /v1/features/public (optional kind filter) and update Leaflet/MapLibre demos to render all public 3D assets globally, while still merging owner collections after login.

Made-with: Cursor
2026-03-02 22:21:21 +00:00
b833c2ac6e Load all collections on map after login.
CI / test (push) Successful in 3s
Both map demos now fetch all user collections and render their features/assets immediately on login, including 3D objects, instead of only showing a single selected collection.

Made-with: Cursor
2026-03-02 22:17:04 +00:00
50fa9a5a22 Make shared asset links open directly on map location.
CI / test (push) Successful in 3s
Copy Share Link now generates a demo URL with asset coordinates so recipients can open the map and immediately see the shared object placement.

Made-with: Cursor
2026-03-02 22:16:01 +00:00
111ed726d8 Use stable demotiles vector source for OSM Liberty demo style.
CI / test (push) Successful in 3s
Switch openmaptiles source URL to MapLibre demo TileJSON to avoid malformed vector tile parsing errors ("Unimplemented type: 4") in the web demo.

Made-with: Cursor
2026-03-02 22:11:00 +00:00
2d1d93c455 Add local MapLibre glyph fonts under web and use them in OSM Liberty style.
CI / test (push) Successful in 4s
Commit bundled PBF font ranges in web/fonts and point the style glyph template to local files to avoid external glyph 404s.

Made-with: Cursor
2026-03-02 22:08:01 +00:00
26de435ff1 Fix MapLibre glyph source to OpenMapTiles fonts.
CI / test (push) Successful in 4s
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
cd63ea142f Fix OSM Liberty sprite and glyph paths for /web hosting.
CI / test (push) Successful in 5s
Use relative sprite URLs and a working glyph endpoint so MapLibre no longer requests missing /web/styles/* or /web/assets/fonts/* resources.

Made-with: Cursor
2026-03-02 22:05:05 +00:00
0c76e867ae Allow anonymous public asset downloads and adopt OSM Liberty style for MapLibre demo.
CI / test (push) Successful in 4s
Public asset links now work without bearer auth while private assets remain protected, and the demo ships with the local osm-liberty-gl-style assets for consistent tile rendering.

Made-with: Cursor
2026-03-02 21:56:31 +00:00
a666f1233d Refresh docs and client for backend-routed asset uploads.
CI / test (push) Successful in 5s
This updates developer docs and web demos to use backend upload endpoints, adds a client upload helper, and aligns integration tests with the no-direct-MinIO URL flow.

Made-with: Cursor
2026-03-02 21:51:47 +00:00
e981a334ea Add MapLibre demo and route uploads through backend.
CI / test (push) Successful in 5s
This introduces a MapLibre GL + Three.js web demo for object placement and sharing, and changes asset upload flow to use backend upload endpoints so clients no longer receive direct MinIO URLs.

Made-with: Cursor
2026-03-02 21:48:08 +00:00
efe5907adc Update docs and defaults for tenerife.baby domain.
CI / test (push) Successful in 3s
This replaces old momswap.produktor.duckdns.org references with tenerife.baby and refreshes the TypeScript integration guide to reflect the current asset upload, sharing, and relative-link flow.

Made-with: Cursor
2026-03-02 21:31:21 +00:00
1292f204a4 Extend TypeScript client and add Leaflet asset demo.
CI / test (pull_request) Successful in 3s
This adds typed asset APIs to the geo client, covers the 3D/image upload-share flow in integration tests, and introduces a simple Leaflet web demo that places objects on map features and manages sharing visibility via backend links.

Made-with: Cursor
2026-03-02 21:21:52 +00:00
8a3cd2c27e Import pk from camera, QR visibility toggles, docs
CI / test (push) Successful in 5s
- Add Import pk from camera: scan QR → restore pb → auto login → refresh
- Add scanner.js (jsQR) for camera QR decode
- QR visibility: pk shown by default, pb hidden by default (toggles)
- Update docs/frontend-development.md with scanner, Import pk, QR behavior

Made-with: Cursor
2026-03-01 14:05:43 +00:00
ef3957b618 Demo app, collections/features CRUD, QR codes, docs
CI / test (push) Successful in 4s
Demo app (web/):
- Collections: select, rename, remove (x button per row), delete
- Features: add point (lon/lat validation), remove, list in selected collection
- QR codes for pk (private) and pb (public) keys
- Restore public key from private key
- 409 Conflict handled for already-registered login
- Title: Momswap Geo Backend Use-Cases Test

Backend:
- PATCH /v1/collections/{id} for rename
- DELETE /v1/collections/{id}
- Clearer lon/lat validation errors (-180..180, -90..90)

Client:
- updateCollection, deleteCollection, derivePublicKey

Docs:
- docs/frontend-development.md (demo app, local dev)
- README links to all docs

Made-with: Cursor
2026-03-01 13:41:54 +00:00
18328706bd Server keys in etc/, bind in docker compose
CI / test (push) Successful in 5s
- bin/gen-server-keys.sh: generate Ed25519 keypair to etc/server-service.{pub,key,env}
- main.go: read keys from file (ADMIN_PUBLIC_KEY_FILE) when env empty
- docker-compose: env_file etc/server-service.env, mount etc/
- bin/up.sh: auto-run gen-server-keys if etc/server-service.env missing
- ErrRegistrationNotConfigured for clearer 503 when keys not set
- etc/README.md, etc/.gitignore
- bin/gen-admin-key.sh for one-off key gen
- .env.example

Made-with: Cursor
2026-03-01 13:02:40 +00:00
a5a97a0ad9 Add register-by-signature, web fixes, bin scripts, docs
CI / test (push) Successful in 5s
- Register by signing service key: GET /v1/service-key, POST /v1/auth/register-by-signature
- Login auto-attempts register first for new users
- Web: default API URL momswap.produktor.duckdns.org, /libs/ static handler
- Docker: webbuild stage for geo-api-client, copy web+libs to runtime
- Bin scripts: test.sh, run.sh, up.sh, down.sh
- docs/ed25519-security-use-cases.md: use cases, message formats, examples
- SERVICE_PUBLIC_KEY env (defaults to ADMIN_PUBLIC_KEY)

Made-with: Cursor
2026-03-01 12:59:02 +00:00
c2aa716ed8 Switch local API port to 8122 and keep DB internal.
CI / test (push) Successful in 5s
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
6e2becb06a Implement geo backend, TS client, frontend, and CI tests.
Add a Go HTTP API with Ed25519 auth and invitation onboarding, user-scoped GeoJSON Point management, a Bun-tested @noble/ed25519 TypeScript client, static Vue/Vuetify frontend integration, and a Gitea CI workflow running both Go and Bun test suites.

Made-with: Cursor
2026-03-01 11:41:21 +00:00