Files
fabula-ultima-html/server
Drew Malzahn 410eb3a5a8 chore: Add deploy plumbing for the share service
Add a hardened systemd unit, a Caddy reverse-proxy snippet that maps
/fabula/api/* to the loopback service, and Justfile build-server/
deploy-server recipes that build a static binary and ship + restart it.
Includes server/README documenting the API, config, and deploy steps.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 02:01:37 +00:00
..

share-svc

Tiny Go + SQLite service that stores character-sheet JSON blobs and returns short, content-addressed IDs, so sheets share as ...?s=<id> instead of a giant inline ?c= payload.

API

Method Path Body Response
POST /api/s sheet JSON {"id":"<id>"}
GET /api/s/{id} sheet JSON

IDs are base64url(sha256(json))[:12], so identical sheets dedupe and re-sharing is idempotent. Payloads are stored deflated in a single SQLite file.

Config (env)

Var Default Notes
ADDR :8090 Listen address. The unit binds 127.0.0.1:8090.
DB_PATH shares.db SQLite file path.
CORS_ORIGIN (unset) Set to allow a cross-origin dev frontend.

Deploy

From the repo root:

just deploy-server                 # build (linux/amd64) + ship + restart
just go-arch=arm64 deploy-server   # if the host is arm64

That installs /usr/local/bin/share-svc and share-svc.service, then daemon-reload + enable --now + restart. The SQLite DB lives in /var/lib/share-svc/ (created by the unit's StateDirectory).

One-time Caddy setup

Add the /fabula/api/* reverse-proxy block from Caddyfile.snippet to your site block (before the static /fabula/* handler) and reload Caddy.

Local dev

webpack serve (port 8080) does not serve /api/*, so ?s= sharing falls back to inline ?c= links. To exercise short links locally, run the service and point the frontend at it:

CORS_ORIGIN=http://localhost:8080 go run ./server