Issue:
Bug: Fix: populating the docker related changes from main to stable release 



Some docker related changes were made in the main branch, these need to be included in the stable release too.

Pull request description:
This PR contains the docker compose file changes for stable release. The PRs included in this file are

- https://github.com/juspay/hyperswitch/pull/7762
- https://github.com/juspay/hyperswitch/pull/7839
- https://github.com/juspay/hyperswitch/pull/7841
- https://github.com/juspay/hyperswitch/pull/7653

Testing:

Patch:
diff --git a/README.md b/README.md
index 72ac7e0e3a7..3033263e578 100644
--- a/README.md
+++ b/README.md
@@ -41,8 +41,8 @@ Single API to access the payments ecosystem and its features
 ## Table of Contents
 
 1. [Introduction](#introduction)
-2. [Architectural Overview](#architectural-overview) 
-3. [Try Hyperswitch](#try-hyperswitch)  
+2. [Try Hyperswitch](#try-hyperswitch)
+3. [Architectural Overview](#architectural-overview) 
 4. [Support, Feature requests & Bugs](#support-feature-requests)  
 5. [Our Vision](#our-vision)  
 6. [Versioning](#versioning)  
@@ -63,51 +63,37 @@ Here are the key components of Hyperswitch that deliver the whole solution:
 
 Read more at [Hyperswitch docs](https://docs.hyperswitch.io/).
 
-<a href="#architectural-overview">
-  <h2 id="architectural-overview">Architectural Overview</h2>
-</a>
-<img src="./docs/imgs/features.png" />
-<img src="./docs/imgs/non-functional-features.png" />
-
-<img src="./docs/imgs/hyperswitch-architecture-v1.png" />
-
 <a href="#try-hyperswitch">
   <h2 id="try-hyperswitch">Try Hyperswitch</h2>
 </a>
 
 ### 1. Local Setup
 
-You can run Hyperswitch on your system using Docker compose after cloning this repository. 
+#### One-Click Setup (Recommended)
+
+You can run Hyperswitch on your system with a single command using our one-click setup script:
 
 ```shell
 git clone --depth 1 --branch latest https://github.com/juspay/hyperswitch
 cd hyperswitch
-docker compose up -d
+scripts/setup.sh
 ```
 
-Check out the [local setup guide][local-setup-guide] for a more details on setting up the entire stack or component wise. This takes 15-mins and gives the following output 
-```shell
-[+] Running 2/2
-✔ hyperswitch-control-center Pulled 2.9s
-✔ hyperswitch-server Pulled 3.0s
-[+] Running 6/0
-
-✔ Container hyperswitch-pg-1 Created 0.0s
-✔ Container hyperswitch-redis-standalone-1 Created 0.0s
-✔ Container hyperswitch-migration_runner-1 Created 0.0s
-✔ Container hyperswitch-hyperswitch-server-1 Created 0.0s
-✔ Container hyperswitch-hyperswitch-web-1 Created 0.0s
-✔ Container hyperswitch-hyperswitch-control-center-1 Created 0.0s
-
-Attaching to hyperswitch-control-center-1, hyperswitch-server-1, hyperswitch-web-1, migration_runner-1, pg-1, redis-standalone-1
-```
-You've now setup Hyperswitch in your local machine. In order to verify that the server is up and running hit the health endpoint:
-```shell
-curl --head --request GET 'http://localhost:8080/health'
-```
-The expected response here is a `200 OK` status code. This indicates that the server and all of its dependent services are functioning correctly.
-Now, you can access the Control Center in your browser at `http://localhost:9000`.
-The next step is to configure a connector with the Hyperswitch Control Center and try a payment.
+The above script will:
+- Check for prerequisites (Docker Compose/Podman)
+- Set up necessary configurations
+- Let you select a deployment profile:
+  - **Standard**: Recommended - App server + Control Center + Web SDK.
+  - **Full**: Standard + Monitoring + Scheduler.
+  - **Standalone App Server**: Core services only (Hyperswitch server, PostgreSQL, Redis)
+- Start the selected services
+- Check service health
+- Provide access information
+
+The next step is to [configure a connector][configure-a-connector] with the Hyperswitch Control Center and [try a payment][try-a-payment].
+
+Check out the [local setup guide][local-setup-guide] for more details on setting up the entire stack or component wise.
+
 
 ### 2. Deployment on cloud
 
@@ -136,6 +122,14 @@ We support deployment on GCP and Azure via Helm charts which takes 30-45mins. Yo
 
 You can experience the product by signing up for our [hosted sandbox](https://app.hyperswitch.io/). The signup process accepts any email ID and provides access to the entire Control Center. You can set up connectors, define workflows for routing and retries, and even try payments from the dashboard.
 
+<a href="#architectural-overview">
+  <h2 id="architectural-overview">Architectural Overview</h2>
+</a>
+<img src="./docs/imgs/features.png" />
+<img src="./docs/imgs/non-functional-features.png" />
+
+<img src="./docs/imgs/hyperswitch-architecture-v1.png" />
+
 [docs-link-for-enterprise]: https://docs.hyperswitch.io/hyperswitch-cloud/quickstart
 [docs-link-for-developers]: https://docs.hyperswitch.io/hyperswitch-open-source/overview
 [contributing-guidelines]: docs/CONTRIBUTING.md
@@ -144,7 +138,8 @@ You can experience the product by signing up for our [hosted sandbox](https://ap
 [learning-resources]: https://docs.hyperswitch.io/learn-more/payment-flows
 [local-setup-guide]: /docs/try_local_system.md
 [docker-compose-scheduler-monitoring]: /docs/try_local_system.md#running-additional-services
-
+[configure-a-connector]: https://docs.hyperswitch.io/hyperswitch-open-source/account-setup/using-hyperswitch-control-center#add-a-payment-processor
+[try-a-payment]: https://docs.hyperswitch.io/hyperswitch-open-source/account-setup/test-a-payment
 
 <a href="support-feature-requests">
   <h2 id="support-feature-requests">Support, Feature requests & Bugs</h2>
diff --git a/docker-compose.yml b/docker-compose.yml
index cb39b23b133..cc58c38e88a 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -8,6 +8,20 @@ networks:
 
 services:
   ### Dependencies
+  prestart-hook:
+    image: curlimages/curl-base:latest
+    container_name: prestart-hook
+    entrypoint:
+      [
+        "/bin/sh",
+        "-c",
+        "apk add --no-cache bash && /bin/bash /prestart_hook.sh",
+      ]
+    volumes:
+      - ./scripts/prestart_hook.sh:/prestart_hook.sh
+    networks:
+      - router_net
+
   pg:
     image: postgres:latest
     ports:
@@ -51,7 +65,7 @@ services:
     environment:
       # format -> postgresql://DB_USER:DB_PASSWORD@HOST:PORT/DATABASE_NAME
       - DATABASE_URL=postgresql://db_user:db_pass@pg:5432/hyperswitch_db
-  
+
   mailhog:
     image: mailhog/mailhog
     networks:
@@ -86,6 +100,23 @@ services:
       start_period: 5s
       timeout: 5s
 
+  poststart-hook:
+    image: curlimages/curl-base:latest
+    container_name: poststart-hook
+    depends_on:
+      hyperswitch-server:
+        condition: service_healthy # Ensures it only starts when `hyperswitch-server` is healthy
+    entrypoint:
+      [
+        "/bin/sh",
+        "-c",
+        "apk add --no-cache bash jq && /bin/bash /poststart_hook.sh",
+      ]
+    volumes:
+      - ./scripts/poststart_hook.sh:/poststart_hook.sh
+    networks:
+      - router_net
+
   hyperswitch-producer:
     image: docker.juspay.io/juspaydotin/hyperswitch-producer:standalone
     pull_policy: always
@@ -153,20 +184,13 @@ services:
     pull_policy: always
     ports:
       - "9050:9050"
-      - "9060:9060"
-      - "5252:5252"
     networks:
       - router_net
     depends_on:
       hyperswitch-server:
         condition: service_healthy
     environment:
-      - HYPERSWITCH_PUBLISHABLE_KEY=placeholder_publishable_key
-      - HYPERSWITCH_SECRET_KEY=placeholder_api_key
-      - HYPERSWITCH_SERVER_URL=http://localhost:8080
-      - HYPERSWITCH_SERVER_URL_FOR_DEMO_APP=http://hyperswitch-server:8080
-      - HYPERSWITCH_CLIENT_URL=http://localhost:9050
-      - SELF_SERVER_URL=http://localhost:5252
+      - ENABLE_LOGGING=true
       - SDK_ENV=local
       - ENV_LOGGING_URL=http://localhost:3103
       - ENV_BACKEND_URL=http://localhost:8080
@@ -421,3 +445,25 @@ services:
     volumes:
       - ./config/vector.yaml:/etc/vector/vector.yaml
       - /var/run/docker.sock:/var/run/docker.sock
+
+  hyperswitch-demo:
+    image: docker.juspay.io/juspaydotin/hyperswitch-react-demo-app:latest
+    pull_policy: always
+    ports:
+      - "9060:9060"
+      - "5252:5252"
+    networks:
+      - router_net
+    depends_on:
+      hyperswitch-server:
+        condition: service_healthy
+      hyperswitch-web:
+        condition: service_healthy
+    environment:
+      - HYPERSWITCH_PUBLISHABLE_KEY=placeholder_publishable_key
+      - HYPERSWITCH_SECRET_KEY=placeholder_api_key
+      - PROFILE_ID=placeholder_profile_id
+      - HYPERSWITCH_CLIENT_URL=http://localhost:9050
+      - HYPERSWITCH_SERVER_URL=http://localhost:8080
+    labels:
+      logs: "promtail"
diff --git a/scripts/docker_output.sh b/scripts/docker_output.sh
new file mode 100755
index 00000000000..80d178ca75b
--- /dev/null
+++ b/scripts/docker_output.sh
@@ -0,0 +1,33 @@
+#! /usr/bin/env bash
+set -euo pipefail
+
+# Define the URL to check service availability (adjust HOST and PORT if needed)
+HOST="localhost"
+PORT="8080"
+SERVICE_URL="http://${HOST}:${PORT}/health"
+
+MAX_RETRIES=70
+RETRY_COUNT=0
+
+# Wait until the service is available or retries are exhausted
+while ! curl --silent --fail "${SERVICE_URL}" > /dev/null; do
+    if (( RETRY_COUNT >= MAX_RETRIES )); then
+        echo ""
+        echo "Service failed to start. Kindly check the logs."
+        echo "You can view the logs using the command: docker-compose logs -f <service name>"
+        exit 1
+    fi
+    printf "."
+    sleep 2
+    ((RETRY_COUNT++))
+done
+
+# Define ANSI 24-bit (true color) escape sequences for Light Sky Blue
+LIGHT_SKY_BLUE="\033[38;2;135;206;250m"
+RESET="\033[0m"
+
+# Print the service URLs with only the links colored
+echo -e "Control Centre running at ${LIGHT_SKY_BLUE}http://localhost:9000${RESET}"
+echo -e "App server running at ${LIGHT_SKY_BLUE}http://localhost:8080${RESET}"
+echo -e "Web-SDK running at ${LIGHT_SKY_BLUE}http://localhost:5252/HyperLoader.js${RESET}"
+echo -e "Mailhog running at ${LIGHT_SKY_BLUE}http://localhost:8025${RESET}"
\ No newline at end of file
diff --git a/scripts/poststart_hook.sh b/scripts/poststart_hook.sh
new file mode 100755
index 00000000000..dcd06aa02bc
--- /dev/null
+++ b/scripts/poststart_hook.sh
@@ -0,0 +1,65 @@
+#! /usr/bin/env bash
+set -euo pipefail
+
+# Configuration
+PLATFORM="docker-compose" # Change to "helm" or "cdk" as needed
+VERSION="unknown"
+STATUS=""
+SERVER_BASE_URL="http://hyperswitch-server:8080"
+HYPERSWITCH_HEALTH_URL="${SERVER_BASE_URL}/health"
+HYPERSWITCH_DEEP_HEALTH_URL="${SERVER_BASE_URL}/health/ready"
+WEBHOOK_URL="https://hyperswitch.gateway.scarf.sh/${PLATFORM}"
+
+# Fetch health status
+echo "Fetching app server health status..."
+HEALTH_RESPONSE=$(curl --silent --fail "${HYPERSWITCH_HEALTH_URL}") || HEALTH_RESPONSE="connection_error"
+
+if [[ "${HEALTH_RESPONSE}" == "connection_error" ]]; then
+    STATUS="error"
+    ERROR_MESSAGE="404 response"
+
+    curl --get "${WEBHOOK_URL}" \
+        --data-urlencode "version=${VERSION}" \
+        --data-urlencode "status=${STATUS}" \
+        --data-urlencode "error_message=${ERROR_MESSAGE}"
+
+    echo "Webhook sent with connection error."
+    exit 0
+fi
+
+# Fetch Hyperswitch version
+VERSION=$(curl --silent --output /dev/null --request GET --write-out '%header{x-hyperswitch-version}' "${HYPERSWITCH_DEEP_HEALTH_URL}" | sed 's/-dirty$//')
+
+echo "Fetching Hyperswitch health status..."
+HEALTH_RESPONSE=$(curl --silent "${HYPERSWITCH_DEEP_HEALTH_URL}")
+
+# Prepare curl command
+CURL_COMMAND=("curl" "--get" "${WEBHOOK_URL}" "--data-urlencode" "version=${VERSION}")
+
+# Check if the response contains an error
+if [[ "$(echo "${HEALTH_RESPONSE}" | jq --raw-output '.error')" != 'null' ]]; then
+    STATUS="error"
+    ERROR_TYPE=$(echo "${HEALTH_RESPONSE}" | jq --raw-output '.error.type')
+    ERROR_MESSAGE=$(echo "${HEALTH_RESPONSE}" | jq --raw-output '.error.message')
+    ERROR_CODE=$(echo "${HEALTH_RESPONSE}" | jq --raw-output '.error.code')
+
+    CURL_COMMAND+=(
+        "--data-urlencode" "status=${STATUS}"
+        "--data-urlencode" "error_type=${ERROR_TYPE}"
+        "--data-urlencode" "error_message=${ERROR_MESSAGE}"
+        "--data-urlencode" "error_code=${ERROR_CODE}"
+    )
+else
+    STATUS="success"
+    CURL_COMMAND+=("--data-urlencode" "status=${STATUS}")
+
+    for key in $(echo "${HEALTH_RESPONSE}" | jq --raw-output 'keys_unsorted[]'); do
+        value=$(echo "${HEALTH_RESPONSE}" | jq --raw-output --arg key "${key}" '.[$key]')
+        CURL_COMMAND+=("--data-urlencode" "'${key}=${value}'")
+    done
+fi
+
+# Send the webhook request
+bash -c "${CURL_COMMAND[*]}"
+
+echo "Webhook notification sent."
diff --git a/scripts/prestart_hook.sh b/scripts/prestart_hook.sh
new file mode 100755
index 00000000000..c4eb16efd8c
--- /dev/null
+++ b/scripts/prestart_hook.sh
@@ -0,0 +1,14 @@
+#! /usr/bin/env bash
+set -euo pipefail
+
+# Define the URL and parameters
+PLATFORM="docker-compose"
+WEBHOOK_URL="https://hyperswitch.gateway.scarf.sh/${PLATFORM}"
+VERSION="unknown"
+STATUS="initiated"
+
+# Send the GET request
+curl --get "${WEBHOOK_URL}" --data-urlencode "version=${VERSION}" --data-urlencode "status=${STATUS}"
+
+# Print confirmation
+echo "Request sent to ${WEBHOOK_URL} with version=${VERSION} and status=${STATUS}"
diff --git a/scripts/setup.sh b/scripts/setup.sh
new file mode 100755
index 00000000000..c40c5365c90
--- /dev/null
+++ b/scripts/setup.sh
@@ -0,0 +1,241 @@
+#! /usr/bin/env bash
+set -euo pipefail
+
+# ANSI color codes for pretty output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[0;33m'
+BLUE='\033[0;34m'
+BOLD='\033[1m'
+NC='\033[0m' # No Color
+
+# Alias for docker to use podman
+alias docker=podman
+
+# Function to print colorful messages
+echo_info() {
+    echo -e "${BLUE}[INFO]${NC} $1"
+}
+
+echo_success() {
+    echo -e "${GREEN}[SUCCESS]${NC} $1"
+}
+
+echo_warning() {
+    echo -e "${YELLOW}[WARNING]${NC} $1"
+}
+
+echo_error() {
+    echo -e "${RED}[ERROR]${NC} $1"
+}
+
+show_banner() {
+    echo -e "${BLUE}${BOLD}"
+    echo "" 
+    echo "        #             "
+    echo "        # #    #  ####  #####    ##   #   #  "
+    echo "        # #    # #      #    #  #  #   # #   "
+    echo "        # #    #  ####  #    # #    #   #    "
+    echo "  #     # #    #      # #####  ######   #    "
+    echo "  #     # #    # #    # #      #    #   #    "
+    echo "   #####   ####   ####  #      #    #   #    "
+    echo "" 
+    echo "" 
+    echo "  #     # #   # #####  ###### #####   ####  #    # # #####  ####  #    # "
+    echo "  #     #  # #  #    # #      #    # #      #    # #   #   #    # #    # "
+    echo "  #     #   #   #    # #####  #    #  ####  #    # #   #   #      ###### "
+    echo "  #######   #   #####  #      #####       # # ## # #   #   #      #    # "
+    echo "  #     #   #   #      #      #   #  #    # ##  ## #   #   #    # #    # "
+    echo "  #     #   #   #      ###### #    #  ####  #    # #   #    ####  #    # "
+    echo ""                                                                                                           
+    sleep 1
+    echo -e "${NC}"
+    echo -e "🚀 ${BLUE}One-Click Docker Setup${NC} 🚀"
+    echo
+}
+
+# Detect Docker Compose version
+detect_docker_compose() {
+    # Check Docker or Podman
+    if command -v docker &> /dev/null; then
+        CONTAINER_ENGINE="docker"
+        echo_success "Docker is installed."
+    elif command -v podman &> /dev/null; then
+        CONTAINER_ENGINE="podman"
+        echo_success "Podman is installed."
+    else
+        echo_error "Neither Docker nor Podman is installed. Please install one of them to proceed."
+        echo_info "Visit https://docs.docker.com/get-docker/ or https://podman.io/docs/installation for installation instructions."
+        echo_info "After installation, re-run this script: scripts/setup.sh"
+        exit 1
+    fi
+
+    # Check Docker Compose or Podman Compose
+    if $CONTAINER_ENGINE compose version &> /dev/null; then
+        DOCKER_COMPOSE="$CONTAINER_ENGINE compose"
+        echo_success "Compose is installed for $CONTAINER_ENGINE."
+    else
+        echo_error "Compose is not installed for $CONTAINER_ENGINE. Please install $CONTAINER_ENGINE compose to proceed."
+        if [ "$CONTAINER_ENGINE" = "docker" ]; then
+            echo_info "Visit https://docs.docker.com/compose/install/ for installation instructions."
+        elif [ "$CONTAINER_ENGINE" = "podman" ]; then
+            echo_info "Visit https://podman-desktop.io/docs/compose/setting-up-compose for installation instructions."
+        fi
+        echo_info "After installation, re-run this script: scripts/setup.sh"
+        exit 1
+    fi
+}
+
+check_prerequisites() {
+    # Check curl
+    if ! command -v curl &> /dev/null; then
+        echo_error "curl is not installed. Please install curl to proceed."
+        exit 1
+    fi
+    echo_success "curl is installed."
+    
+    # Check ports
+    required_ports=(8080 9000 9050 5432 6379 9060)
+    unavailable_ports=()
+    
+    for port in "${required_ports[@]}"; do
+        if command -v nc &> /dev/null; then
+            if nc -z localhost "$port" 2>/dev/null; then
+                unavailable_ports+=("$port")
+            fi
+        elif command -v lsof &> /dev/null; then
+            if lsof -i :"$port" &> /dev/null; then
+                unavailable_ports+=("$port")
+            fi
+        else
+            echo_warning "Neither nc nor lsof available to check ports. Skipping port check."
+            break
+        fi
+    done
+    
+    if [ ${#unavailable_ports[@]} -ne 0 ]; then
+        echo_warning "The following ports are already in use: ${unavailable_ports[*]}"
+        echo_warning "This might cause conflicts with Hyperswitch services."
+        read -p "Do you want to continue anyway? (y/n): " -n 1 -r
+        echo
+        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+            exit 1
+        fi
+    else
+        echo_success "All required ports are available."
+    fi
+}
+
+setup_config() {
+    if [ ! -f "config/docker_compose.toml" ]; then
+        echo_error "Configuration file 'config/docker_compose.toml' not found. Please ensure the file exists and is correctly configured."
+        exit 1
+    fi
+}
+
+select_profile() {    
+    echo ""    
+    echo "Select a setup option:"
+    echo -e "1) Standard Setup: ${BLUE}[Recommended]${NC} Ideal for quick trial. Services included: ${BLUE}App Server, Control Center, Unified Checkout, PostgreSQL and Redis${NC}"
+    echo -e "2) Full Stack Setup: Ideal for comprehensive end-to-end payment testing. Services included: ${BLUE}Everything in Standard, Monitoring and Scheduler${NC}"
+    echo -e "3) Standalone App Server: Ideal for API-first integration testing. Services included: ${BLUE}App server, PostgreSQL and Redis)${NC}"
+    echo ""
+    local profile_selected=false
+    while [ "$profile_selected" = false ]; do
+        read -p "Enter your choice (1-3): " profile_choice
+        profile_choice=${profile_choice:-1}
+        
+        case $profile_choice in
+            1)
+                PROFILE="standard"
+                profile_selected=true
+                ;;
+            2)
+                PROFILE="full"
+                profile_selected=true
+                ;;
+            3)
+                PROFILE="standalone"
+                profile_selected=true
+                ;;
+            *)
+                echo_error "Invalid choice. Please enter 1, 2, or 3."
+                ;;
+        esac
+    done
+    
+    echo "Selected setup: $PROFILE"
+}
+
+start_services() {
+    
+    case $PROFILE in
+        standalone)
+            $DOCKER_COMPOSE up -d pg redis-standalone migration_runner hyperswitch-server
+            ;;
+        standard)
+            $DOCKER_COMPOSE up -d
+            ;;
+        full)
+            $DOCKER_COMPOSE --profile scheduler --profile monitoring --profile olap up -d
+            ;;
+    esac
+}
+
+check_services_health() {
+    # Wait for the hyperswitch-server to be healthy
+    MAX_RETRIES=30
+    RETRY_INTERVAL=5
+    RETRIES=0
+    
+    while [ $RETRIES -lt $MAX_RETRIES ]; do
+        if curl --silent --head --request GET 'http://localhost:8080/health' | grep "200 OK" > /dev/null; then
+            echo_success "Hyperswitch server is healthy!"
+            print_access_info  # Call print_access_info only when the server is healthy
+            return
+        fi
+        
+        RETRIES=$((RETRIES+1))
+        if [ $RETRIES -eq $MAX_RETRIES ]; then
+            echo ""
+            echo_error "${RED}${BOLD}Hyperswitch server did not become healthy in the expected time."
+            echo -e "Check logs with: $DOCKER_COMPOSE logs hyperswitch-server, Or reach out to us on slack(https://hyperswitch-io.slack.com/) for help."
+            echo -e "The setup process will continue, but some services might not work correctly.${NC}"
+            echo ""
+        else
+            echo "Waiting for server to become healthy... ($RETRIES/$MAX_RETRIES)"
+            sleep $RETRY_INTERVAL
+        fi
+    done
+}
+
+print_access_info() {
+    echo ""
+    echo -e "${GREEN}${BOLD}Setup complete! You can access Hyperswitch services at:${NC}"
+    echo ""
+    
+    if [ "$PROFILE" != "standalone" ]; then
+        echo -e "  • ${GREEN}${BOLD}Control Center${NC}: ${BLUE}${BOLD}http://localhost:9000${NC}"
+    fi
+    
+    echo -e "  • ${GREEN}${BOLD}App Server${NC}: ${BLUE}${BOLD}http://localhost:8080${NC}"
+    
+    if [ "$PROFILE" != "standalone" ]; then
+        echo -e "  • ${GREEN}${BOLD}Unified Checkout${NC}: ${BLUE}${BOLD}http://localhost:9060${NC}"
+    fi
+    
+    if [ "$PROFILE" = "full" ]; then
+        echo -e "  • ${GREEN}${BOLD}Monitoring (Grafana)${NC}: ${BLUE}${BOLD}http://localhost:3000${NC}"
+    fi
+    echo ""
+    echo_info "To stop all services, run: $DOCKER_COMPOSE down"
+}
+
+# Main execution flow
+show_banner
+detect_docker_compose
+check_prerequisites
+setup_config
+select_profile
+start_services
+check_services_health  # This will call print_access_info if the server is healthy