#!/usr/bin/env bash # If executed from a local file (e.g. double-clicking init_project.command in Finder), # switch to the directory where the script resides. if [ -f "$0" ]; then cd "$(dirname "$0")" || exit 1 fi # Set macOS Terminal window title printf "\033]0;Gamuda Citizen Developer - Bootstrapper (macOS)\007" echo "===================================================================" echo "🚀 WELCOME TO GAMUDA'S CITIZEN DEVELOPER BOOTSTRAPPER (macOS) 🚀" echo "===================================================================" echo "" echo "Please ensure you have FORKED the master template repository on GitLab first." echo "" # ------------------------------------------------------------------- # 1. COLLECT USER INPUTS SECURELY # ------------------------------------------------------------------- while true; do read -r -p "👉 Paste your Forked GitLab Repository URL (e.g. https://ag-gitlab.gamuda.app/username/my-app.git): " FORK_URL < /dev/tty # Trim leading/trailing whitespace FORK_URL="$(echo "$FORK_URL" | xargs)" if [ -n "$FORK_URL" ]; then break fi echo "❌ Repository URL cannot be empty." done while true; do read -r -p "👉 Enter your New Project / Folder Name (e.g. concrete-tracker): " NEW_PROJECT_NAME < /dev/tty NEW_PROJECT_NAME="$(echo "$NEW_PROJECT_NAME" | xargs)" if [ -n "$NEW_PROJECT_NAME" ]; then break fi echo "❌ Project Name cannot be empty." done while true; do read -r -p "👉 Enter your Firebase / GCP Project ID (e.g. gtc-myproject-dev): " FIREBASE_PROJECT_ID < /dev/tty FIREBASE_PROJECT_ID="$(echo "$FIREBASE_PROJECT_ID" | xargs)" if [ -n "$FIREBASE_PROJECT_ID" ]; then break fi echo "❌ Firebase Project ID cannot be empty." done read -r -p "👉 Enter your Google ADC Billing/Quota Project ID (Press Enter to default to ${FIREBASE_PROJECT_ID}): " BILLING_PROJECT_ID < /dev/tty BILLING_PROJECT_ID="$(echo "$BILLING_PROJECT_ID" | xargs)" if [ -z "$BILLING_PROJECT_ID" ]; then BILLING_PROJECT_ID="$FIREBASE_PROJECT_ID" fi echo "" echo "-------------------------------------------------------------------" echo "📋 CONFIRMED CONFIGURATION PARAMETERS:" echo " 🔗 GitLab Fork: ${FORK_URL}" echo " 🏗️ New Project: ${NEW_PROJECT_NAME}" echo " 🔥 Firebase Project: ${FIREBASE_PROJECT_ID}" echo " 💳 ADC Quota Project: ${BILLING_PROJECT_ID}" echo "-------------------------------------------------------------------" echo "" # ------------------------------------------------------------------- # 2. CREATE PROJECT DIRECTORY & CLONE THEIR FORK # ------------------------------------------------------------------- echo "📁 Creating project directory '${NEW_PROJECT_NAME}'..." mkdir -p "$NEW_PROJECT_NAME" cd "$NEW_PROJECT_NAME" || exit 1 echo "🛸 Initializing repository and pulling from your GitLab Fork..." git init git config http.sslVerify false git remote remove origin >/dev/null 2>&1 || true git remote add origin "$FORK_URL" if ! git pull origin master; then git pull origin main if [ $? -ne 0 ]; then echo "❌ Git pull failed! Please check your GitLab URL, credentials, or VPN." read -r -p "Press Enter to exit..." _ < /dev/tty exit 1 fi fi # ------------------------------------------------------------------- # 3. APPLY DETERMINISTIC CONFIGURATIONS (REPLACE PLACEHOLDERS) # ------------------------------------------------------------------- echo "🔧 Personalizing template configuration..." if [ -f ".firebaserc" ]; then sed -i.bak "s|gamuda-citizen-dev-template|${FIREBASE_PROJECT_ID}|g" .firebaserc && rm -f .firebaserc.bak fi echo "📝 Creating local development env configurations..." mkdir -p functions cat < functions/.env.development VITE_API_URL=http://localhost:5001/${FIREBASE_PROJECT_ID}/asia-southeast1/api GCLOUD_PROJECT=${FIREBASE_PROJECT_ID} EOF mkdir -p client cat < client/.env.development VITE_API_URL=http://localhost:5001/${FIREBASE_PROJECT_ID}/asia-southeast1/api EOF if [ -f "client/index.html" ]; then sed -i.bak "s|Gamuda Citizen Developer|${NEW_PROJECT_NAME}|g" client/index.html && rm -f client/index.html.bak fi # ------------------------------------------------------------------- # 4. COMMIT AND PUSH CUSTOMIZATIONS BACK TO THEIR FORK # ------------------------------------------------------------------- echo "⬆️ Pushing your personalized configurations back to your GitLab Fork..." git add . git commit -m "chore: initial bootstrap personalization for ${NEW_PROJECT_NAME}" git push origin master >/dev/null 2>&1 || true git push origin main >/dev/null 2>&1 || true # ------------------------------------------------------------------- # 5. COMPLETE BOOTSTRAPPING & INSTRUCT HAND-OFF # ------------------------------------------------------------------- echo "" echo "===================================================================" echo " 🎉 BASE TEMPLATE BOOTSTRAPPED SUCCESSFULLY 🎉" echo "===================================================================" echo "" echo " 👉 NEXT STEPS:" echo " 1. Open your project folder in Antigravity 2.0 / VS Code:" echo " $(pwd)" echo " 2. Run the onboarding command:" echo "" echo " /init" echo "" echo " Antigravity will automatically handle the npm installation," echo " validate your Google ADC credentials, and boot up your local" echo " development servers safely!" echo "" echo "===================================================================" echo "" read -r -p "Press Enter to close..." _ < /dev/tty