{
  "schemaVersion": "rapidkit.infra-stack.v1",
  "description": "Canonical workspace infrastructure service catalog and module/env resolution rules.",
  "futureProfiles": [
    "frontend-dev",
    "edge-proxy"
  ],
  "services": {
    "postgres": {
      "displayName": "PostgreSQL",
      "category": "database",
      "image": "postgres:16-alpine",
      "ports": [
        {
          "name": "sql",
          "host": 5432,
          "container": 5432
        }
      ],
      "env": {
        "POSTGRES_USER": "rapidkit",
        "POSTGRES_PASSWORD": "rapidkit",
        "POSTGRES_DB": "rapidkit"
      },
      "volumes": [
        "postgres_data:/var/lib/postgresql/data"
      ],
      "healthcheck": {
        "test": [
          "CMD-SHELL",
          "pg_isready -U rapidkit -d rapidkit"
        ],
        "interval": "10s",
        "timeout": "5s",
        "retries": 5
      },
      "connectionEnv": {
        "DATABASE_URL": "postgresql://rapidkit:rapidkit@localhost:5432/rapidkit",
        "RAPIDKIT_DB_POSTGRES_URL": "postgresql://rapidkit:rapidkit@localhost:5432/rapidkit"
      }
    },
    "redis": {
      "displayName": "Redis",
      "category": "cache",
      "image": "redis:7-alpine",
      "ports": [
        {
          "name": "redis",
          "host": 6379,
          "container": 6379
        }
      ],
      "command": [
        "redis-server",
        "--appendonly",
        "yes"
      ],
      "volumes": [
        "redis_data:/data"
      ],
      "healthcheck": {
        "test": [
          "CMD",
          "redis-cli",
          "ping"
        ],
        "interval": "10s",
        "timeout": "3s",
        "retries": 5
      },
      "connectionEnv": {
        "REDIS_URL": "redis://localhost:6379/0",
        "CELERY_BROKER_URL": "redis://localhost:6379/0",
        "CELERY_RESULT_BACKEND": "redis://localhost:6379/1"
      }
    },
    "mongo": {
      "displayName": "MongoDB",
      "category": "database",
      "image": "mongo:7",
      "ports": [
        {
          "name": "mongo",
          "host": 27017,
          "container": 27017
        }
      ],
      "volumes": [
        "mongo_data:/data/db"
      ],
      "connectionEnv": {
        "MONGODB_URI": "mongodb://localhost:27017/rapidkit",
        "MONGO_URL": "mongodb://localhost:27017/rapidkit"
      }
    },
    "mysql": {
      "displayName": "MySQL",
      "category": "database",
      "image": "mysql:8.4",
      "ports": [
        {
          "name": "mysql",
          "host": 3306,
          "container": 3306
        }
      ],
      "env": {
        "MYSQL_ROOT_PASSWORD": "rapidkit",
        "MYSQL_DATABASE": "rapidkit",
        "MYSQL_USER": "rapidkit",
        "MYSQL_PASSWORD": "rapidkit"
      },
      "healthcheck": {
        "test": [
          "CMD",
          "mysqladmin",
          "ping",
          "-h",
          "127.0.0.1",
          "-urapidkit",
          "-prapidkit"
        ],
        "interval": "10s",
        "timeout": "5s",
        "retries": 5
      },
      "connectionEnv": {
        "DATABASE_URL": "mysql://rapidkit:rapidkit@localhost:3306/rapidkit"
      }
    },
    "rabbitmq": {
      "displayName": "RabbitMQ",
      "category": "queue",
      "image": "rabbitmq:3-management-alpine",
      "ports": [
        {
          "name": "amqp",
          "host": 5672,
          "container": 5672
        },
        {
          "name": "management",
          "host": 15672,
          "container": 15672
        }
      ],
      "healthcheck": {
        "test": [
          "CMD",
          "rabbitmq-diagnostics",
          "-q",
          "ping"
        ],
        "interval": "15s",
        "timeout": "10s",
        "retries": 5
      },
      "connectionEnv": {
        "CELERY_BROKER_URL": "amqp://guest:guest@localhost:5672//",
        "RABBITMQ_URL": "amqp://guest:guest@localhost:5672//"
      }
    },
    "mailpit": {
      "displayName": "Mailpit (SMTP dev)",
      "category": "communication",
      "image": "axllent/mailpit:latest",
      "ports": [
        {
          "name": "smtp",
          "host": 1025,
          "container": 1025
        },
        {
          "name": "ui",
          "host": 8025,
          "container": 8025
        }
      ],
      "connectionEnv": {
        "SMTP_HOST": "localhost",
        "SMTP_PORT": "1025",
        "MAIL_URL": "smtp://localhost:1025"
      }
    },
    "minio": {
      "displayName": "MinIO (S3-compatible)",
      "category": "storage",
      "image": "minio/minio:latest",
      "ports": [
        {
          "name": "s3",
          "host": 9000,
          "container": 9000
        },
        {
          "name": "console",
          "host": 9001,
          "container": 9001
        }
      ],
      "command": [
        "server",
        "/data",
        "--console-address",
        ":9001"
      ],
      "env": {
        "MINIO_ROOT_USER": "rapidkit",
        "MINIO_ROOT_PASSWORD": "rapidkit-dev"
      },
      "volumes": [
        "minio_data:/data"
      ],
      "connectionEnv": {
        "AWS_S3_ENDPOINT": "http://localhost:9000",
        "S3_ENDPOINT_URL": "http://localhost:9000"
      }
    }
  },
  "moduleMappings": {
    "free/database/db_postgres": [
      "postgres"
    ],
    "free/database/db_mongo": [
      "mongo"
    ],
    "free/database/db_mysql": [
      "mysql"
    ],
    "free/cache/redis": [
      "redis"
    ],
    "free/tasks/celery": [
      "redis"
    ],
    "free/tasks/workflow_engine": [
      "postgres",
      "redis"
    ],
    "free/tasks/queue_platform": [
      "redis"
    ],
    "free/tasks/event_bus": [
      "redis"
    ],
    "free/communication/webhook_platform": [
      "postgres",
      "redis"
    ],
    "free/communication/email": [
      "mailpit"
    ],
    "free/business/storage": [
      "minio"
    ],
    "free/security/audit_policy": [
      "postgres"
    ],
    "free/business/approval_engine": [
      "postgres",
      "redis"
    ]
  },
  "envVarMappings": {
    "DATABASE_URL": [
      "postgres"
    ],
    "RAPIDKIT_DB_POSTGRES_URL": [
      "postgres"
    ],
    "REDIS_URL": [
      "redis"
    ],
    "CELERY_BROKER_URL": [
      "redis"
    ],
    "CELERY_RESULT_BACKEND": [
      "redis"
    ],
    "MONGODB_URI": [
      "mongo"
    ],
    "MONGO_URL": [
      "mongo"
    ],
    "MYSQL_URL": [
      "mysql"
    ],
    "RABBITMQ_URL": [
      "rabbitmq"
    ],
    "SMTP_HOST": [
      "mailpit"
    ],
    "MAIL_URL": [
      "mailpit"
    ],
    "AWS_S3_ENDPOINT": [
      "minio"
    ],
    "S3_ENDPOINT_URL": [
      "minio"
    ]
  }
}
