# ============================================================================
# docker-compose.dev.yml — Synapse DEV homeserver for RFC-001 P1 (presence)
# ============================================================================
#
#   *** DEV-ONLY. LOCAL SANDBOX. Do NOT point this at, or run alongside, any
#       live/production homeserver. ***
#
# Single-instance Synapse (RFC-002 Mode B, federation OFF) + an optional
# Element web client for the human view (A4). Brought up by ./dev-up.sh, which
# renders config into ./.data (gitignored) first.
#
# Isolated by design: dedicated project name + network + high host ports so it
# never collides with other stacks on the box (A5).
#
#   Host ports:  ${MATRIX_HTTP_PORT:-18008}  -> Synapse 8008 (plain HTTP)
#                ${MATRIX_TLS_PORT:-18448}   -> Synapse 8448 (self-signed TLS)
#                ${ELEMENT_PORT:-18080}      -> Element web (profile: element)
# ----------------------------------------------------------------------------
name: matrix-p1-dev

services:
  synapse:
    image: matrixdotorg/synapse:latest
    container_name: matrix-p1-synapse
    restart: 'no'
    # Run against the rendered config in /data (dev-up.sh puts it there).
    environment:
      SYNAPSE_CONFIG_DIR: /data
      SYNAPSE_CONFIG_PATH: /data/homeserver.yaml
    volumes:
      - ./.data:/data
    ports:
      - '127.0.0.1:${MATRIX_HTTP_PORT:-18008}:8008'
      - '127.0.0.1:${MATRIX_TLS_PORT:-18448}:8448'
    networks:
      - matrix-p1-net
    healthcheck:
      test: ['CMD-SHELL', 'curl -fsS http://localhost:8008/health || exit 1']
      interval: 3s
      timeout: 5s
      retries: 40
      start_period: 5s

  # Optional human view (A4). `docker compose --profile element up -d element`.
  element:
    image: vectorim/element-web:latest
    container_name: matrix-p1-element
    restart: 'no'
    profiles: [element]
    volumes:
      - ./.data/element-config.json:/app/config.json:ro
    ports:
      - '127.0.0.1:${ELEMENT_PORT:-18080}:80'
    networks:
      - matrix-p1-net

networks:
  matrix-p1-net:
    name: matrix-p1-net
    driver: bridge
