# share-svc Tiny Go + SQLite service that stores character-sheet JSON blobs and returns short, content-addressed IDs, so sheets share as `...?s=` instead of a giant inline `?c=` payload. ## API | Method | Path | Body | Response | | ------ | ------------ | ----------- | ------------------- | | POST | `/api/s` | sheet JSON | `{"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: ```sh 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: ```sh CORS_ORIGIN=http://localhost:8080 go run ./server ```