diff --git a/.github/workflows/codespaces-ci.sh b/.github/workflows/codespaces-ci.sh
index 8484e7a3c..4c0d02236 100755
--- a/.github/workflows/codespaces-ci.sh
+++ b/.github/workflows/codespaces-ci.sh
@@ -1,19 +1,101 @@
 #!/bin/bash
+set -e
 
 GITHUB_REPOSITORY="Azure-Samples/contoso-real-estate"
 BRANCH="codespaces-ci"
-APP_PORT="4280"
+CODESPACE_NAME="nightly-build-$(date +%s)"
+CODESPACE_ID=""
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+NC='\033[0m' # No Color
 
-# gh auth login --with-token $GITHUB_TOKEN
+# login to GitHub CLI
+echo "Login to GitHub CLI..."
+echo ${{ $GITHUB_TOKEN }} | gh auth login --with-token
+
+echo "Check auth status..."
+gh auth status
+
+# create a codespace
+echo "Create a codespace "$CODESPACE_NAME" for $GITHUB_REPOSITORY on branch $BRANCH..."
 gh codespace create \
     --repo $GITHUB_REPOSITORY \
     --branch $BRANCH \
+    --display-name $CODESPACE_NAME \
     --retention-period "1h" \
-    --display-name "Contoso Real Estate Nightly" \
-    --idle-timeout "30m" \
+    --idle-timeout "1h" \
     --machine "largePremiumLinux" \
     --status \
     --default-permissions
 
-# gh codespace stop -R $GITHUB_REPOSITORY
-# gh codespace delete -R $GITHUB_REPOSITORY
+CODESPACE_ID=$(gh codespace list -R $GITHUB_REPOSITORY --jq ".[] | select(.displayName == \"$CODESPACE_NAME\")" --json displayName,name) | jq -r '.name'
+echo "Codespace created and started: $CODESPACE_ID"
+
+# connect to the codespace and start the app
+# gh codespace ssh -c $CODESPACE_ID "npm start --prefix /workspaces/contoso-real-estate" &
+echo "Running all services..."
+
+# Wait for the app to start
+echo "Waiting 30s for all ports to be fowarded..."
+# sleep 30
+
+# Get a list of URLs for all services
+
+# check all services are running
+nb_services_down=0
+max_retries=5
+while [ $nb_services_down > 0 ]; do
+
+    echo -ne "Fetching registered services..."
+    services=$(gh cs ports -c $CODESPACE_ID --json label,browseUrl | jq -r '.[] | select(.label != "") | .browseUrl')
+    nb_services=$(echo "$services" | awk 'END { print NR }')
+    echo " Found $nb_services"
+
+    nb_services_down=0
+    echo "---------------------------------------------------------------------------------------------------------" 
+    for service in $services; do
+        echo -ne "Inspecting: $service ... "
+        status=$(curl -H "X-Github-Token: $GITHUB_TOKEN" -s -o /dev/null -w  "%{http_code}" $service)
+
+        if [ $status == 200 ] || [ $status == 404 ]; then
+            echo -e "${GREEN}$status OK${NC}"
+        else
+            echo -e "${RED}$status ERROR${NC}"
+            ((nb_services_down++))
+        fi
+    done
+
+    if [ $nb_services_down == 0 ]; then
+        echo "All services are running!"
+        break
+    fi
+
+    if [ $max_retries == 0 ]; then
+        echo "Max retries reached, exiting..."
+        break
+    fi
+
+    echo "---------------------------------------------------------------------------------------------------------"
+    echo "Found $nb_services_down services down..."
+    echo "Wait 10s before retrying... (retries left: $max_retries)"
+    sleep 10
+    ((max_retries--))
+done
+
+
+# print all codespaces logs
+echo "Fetching codespace logs before exiting..."
+gh codespace logs -c $CODESPACE_ID 
+
+# stop and delete the codespace
+echo "Stopping and deleting codespace $CODESPACE_ID..."
+gh codespace stop -R $GITHUB_REPOSITORY
+gh codespace delete -R $GITHUB_REPOSITORY
+
+if [ $nb_services_down > 0 ]; then
+    echo -e "${RED}ERROR: Some services are still down, exiting with error.${NC}"
+    exit 1
+else
+    echo -e "${GREEN}OK: All services are running, exiting with success.${NC}"
+    exit 0
+fi
\ No newline at end of file