← Emberline
Enterprise pack

Implementation and use

ATLAS sells a snapshot. Emberline sells the desk: the watch, the fail-closed brief, the archive, and the commercial envelope around Hub SKUs.

Value beyond ATLAS

If you only need one invoke, buy atlas.watchbox.check@v1 / atlas.fire.weather@v1 and stop. Emberline is for a named box over time.

LayerWhat you get
Watch opsNamed bbox, 15/30/60 cadence, quiet hours, on_match vs always_brief.
Fail-closed briefEmpty LIVE stays empty. SIM never appears. Badges: not a perimeter, forecast, or evacuation order.
ArchiveCiteable JSON, run-to-run delta, cite pack (PDF + SHA256), raw Hub payloads.
Receipt checkEd25519 material verified when present (emberline_verified).
DeliveryHTTPS webhooks (HMAC t=,v1=), Slack, desk PWA push. Email is not a channel. SMTP is desk-only later.
EnvelopePlan caps, prepaid emb_ desk keys, one Hub key for the org.

always_brief on a tight cadence will burn a Team plan. on_match is the default that can be profitable.

Implementation

Local

cp .env.example .env
make up
# http://localhost:8080

Development compose may seed a demo owner. Production compose will not boot with that seed or the default JWT secret.

Production

export JWT_SECRET=… POSTGRES_PASSWORD=… HUB_API_KEY=… PAY_MINT_SECRET=…
export PUBLIC_URL=https://emberlinedesk.com
export CORS_ORIGINS=https://emberlinedesk.com
docker compose -f docker-compose.yml -f docker-compose.prod.yml up --build -d

Terminate TLS in front of nginx. Do not publish :5432 or :8000. HUB_MODE=live refuses invokes without a key.

Mint a prepaid key

POST /api/pay/mint
X-Emberline-Mint: $PAY_MINT_SECRET
{"plan":"solo","days":30,"payment_ref":"np_invoice_123"}

Show desk_key once. Duplicate payment_ref → 409. Buyer redeems at login or POST /api/auth/redeem.

Usage

  1. Sign in with password or desk key.
  2. Create a watch. Cap bbox at 40° × 30°. Prefer on_match.
  3. Optional quiet hours 22-06. Runs continue; alerts pause.
  4. Optional Slack / HTTPS hooks — https and public DNS only. Copy the HMAC secret immediately.
  5. Read briefs from Archive. A quiet run is not a safety guarantee.

HTTPS alert header: X-Emberline-Signature: t=<unix>,v1=<hex> over {ts}.{body}.

API surface

Cookie emberline_session or Authorization: Bearer. Production hides OpenAPI.

PathPurpose
POST /api/auth/login | /redeem | /logoutSession
GET/POST /api/watchesList / create
POST /api/watches/{id}/run402 if monthly cap hit
GET /api/briefs/{id}Citeable brief (auth)
GET /api/public/briefs/{token}Unlisted share; token ≠ id
GET /api/billing/usageMeter, not a charge
GET /api/push/statusVAPID public key + whether this session subscribed
POST /api/pay/mintOperator mint

Operations

Markdown sources live in the repository under docs/enterprise/.