rgboards/rg-boards

Lanes, team task boards you run from the web or from Claude/ChatGPT (MCP). FastAPI + DataK3 + appid + Dodil Models.

A remix template · 0 remixes · Remix rgboards/rg-boards

.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 }
    # Ignite scales to zero when idle. Ask for a 15-minute scale-down so a person clicking
    # around pays the cold start once (measured 2026-10-30: the pod still left after ~5 min idle).
    scaling: { max_replicas: 2, scaledown_period_secs: 900 }
    # 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.6
      # The sign-in page lists the shared demo accounts only on the instance whose pool holds
      # them (the author's live demo). A remix has its own pool, so its page never shows them.
      DEMO_POOL: rgboards/rg-boards-users
      DODIL_SERVICE_ACCOUNT_ID: "${{ secrets.DODIL_SERVICE_ACCOUNT_ID }}"
      DODIL_SERVICE_ACCOUNT_SECRET: "${{ secrets.DODIL_SERVICE_ACCOUNT_SECRET }}"
when:
  branches: [main]
  require_checks: all