services: backend: build: context: ./backend dockerfile: Dockerfile target: dev expose: - "8000" volumes: - ./backend/src:/app/src - ./notebooks:/app/notebooks # Mount mcltspice for live development - ../mcp-ltspice/src/mcltspice:/app/mcltspice-lib:ro command: ["uv", "run", "uvicorn", "spicebook.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] networks: - default - caddy labels: caddy: "${SPICEBOOK_DOMAIN:-spicebook.localhost}" caddy.@api.path: "/api/* /health /docs /openapi.json /redoc" caddy.reverse_proxy_0: "@api {{upstreams 8000}}" frontend: build: context: ./frontend dockerfile: Dockerfile target: dev expose: - "4321" volumes: - ./frontend/src:/app/src - ./frontend/public:/app/public command: ["npm", "run", "dev", "--", "--host", "0.0.0.0"] networks: - default - caddy labels: caddy: "${SPICEBOOK_DOMAIN:-spicebook.localhost}" caddy.reverse_proxy_1: "{{upstreams 4321}}" caddy.reverse_proxy_1.flush_interval: "-1" caddy.reverse_proxy_1.transport: "http" caddy.reverse_proxy_1.transport.read_timeout: "0" caddy.reverse_proxy_1.transport.write_timeout: "0" caddy.reverse_proxy_1.transport.keepalive: "5m" caddy.reverse_proxy_1.transport.keepalive_idle_conns: "10" caddy.reverse_proxy_1.stream_timeout: "24h" caddy.reverse_proxy_1.stream_close_delay: "5s" networks: caddy: external: true