# task-board — MCP + web dashboard for assistant task state.
#
# Image is built on the host from the task-board git repo by the deploy
# playbook (`playbooks/deploy-task-board.yaml`), which clones into
# /opt/docker/build/task-board and runs `docker build -t task-board:local .`
# before installing this compose and bringing it up.
#
# SQLite state persists under ${TASK_BOARD_DATA_DIR} (bind-mounted) so
# container rebuilds don't lose task history.
#
# All tunables live in .env — edit that, not this file.

services:
  task-board:
    image: ${TASK_BOARD_IMAGE}
    container_name: task-board
    restart: unless-stopped
    ports:
      - "${TASK_BOARD_BIND:-0.0.0.0}:${TASK_BOARD_PORT}:7878"
    volumes:
      - ${TASK_BOARD_DATA_DIR}:/app/data
    environment:
      # Container always listens on 7878 internally; host port is the only knob.
      - TASK_BOARD_PORT=7878
      - TASK_BOARD_BIND=0.0.0.0
      - TASK_BOARD_DORMANT_AFTER=${TASK_BOARD_DORMANT_AFTER:-3600}
      - TASK_BOARD_ARCHIVE_TTL=${TASK_BOARD_ARCHIVE_TTL:-86400}
    healthcheck:
      test: ["CMD-SHELL", "python -c 'import urllib.request,sys; r=urllib.request.urlopen(\"http://127.0.0.1:7878/api/health\",timeout=3); sys.exit(0 if r.status==200 else 1)' || exit 1"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 15s
    networks:
      - tnet
    labels:
      - homepage.group=Toolchain
      - homepage.name=task-board
      - homepage.icon=mdi-view-dashboard-variant
      - homepage.description=Assistant task state dashboard (MCP + web UI)
      - homepage.href=http://10.250.50.70:${TASK_BOARD_PORT}

networks:
  tnet:
    name: traefik-net
    external: true
