sirenamc/stackline

Stackline, a team task board you run from the web or from Claude/ChatGPT. FastAPI + DataK3 + appid + Models + MCP.

A remix template · 0 remixes · Remix sirenamc/stackline

.dodil/deploy.yaml

# How CI deploys every copy of this repo. Names render from the copy's own repo and org.
version: 1
create_if_missing: true
apps:
  - name: "${{ dodil.repo }}"
    image: "{registry}/{org}/{repo}:{sha}"
    port: 8080
    resources: { tier: small }
    scaling: { max_replicas: 2 }
    # The gateway signs people in through the pool and passes who they are to the app.
    # public_invoke lets Claude/ChatGPT discover the sign-in metadata; the app itself
    # refuses every route without a signed-in person (except /healthz and the metadata).
    user_pool: "${{ dodil.repo }}-users"
    public_invoke: true
    health: { path: /healthz }
    env:
      BUCKET: "${{ dodil.repo }}-data"
      PG_HOST: pg.uk-lon-1.dodil.io
      DODIL_USER_POOL: "${{ dodil.org }}/${{ dodil.repo }}-users"
      MODELS_BASE: https://api.dodil.io/v1
      CHAT_MODEL: kimi-k2.7-code
      EMBED_MODEL: jina-embeddings-v4
      # The public demo runs only in the copy whose pool is DEMO_POOL (this one). A remix gets
      # its own pool, so these three accounts are never shown or honoured there.
      DEMO_POOL: sirenamc/stackline-users
      DEMO_ACCOUNTS: demo.owner@example.com,demo.member@example.com,demo.viewer@example.com
      DEMO_PASSWORD: stackline-demo
      DODIL_SERVICE_ACCOUNT_ID: "${{ secrets.DODIL_SERVICE_ACCOUNT_ID }}"
      DODIL_SERVICE_ACCOUNT_SECRET: "${{ secrets.DODIL_SERVICE_ACCOUNT_SECRET }}"
when:
  branches: [main]
  require_checks: all