# GSPro Remote Development Script # Starts both backend and frontend servers for development Write-Host "GSPro Remote Development Environment" -ForegroundColor Green Write-Host "=====================================" -ForegroundColor Green Write-Host "" # Check if Python is installed $pythonVersion = python --version 2>$null if (-not $pythonVersion) { Write-Host "ERROR: Python is not installed or not in PATH" -ForegroundColor Red Write-Host "Please install Python 3.11+ from https://www.python.org/" -ForegroundColor Yellow exit 1 } Write-Host "✓ Python found: $pythonVersion" -ForegroundColor Green # Check if Node.js is installed $nodeVersion = node --version 2>$null if (-not $nodeVersion) { Write-Host "ERROR: Node.js is not installed or not in PATH" -ForegroundColor Red Write-Host "Please install Node.js 20+ from https://nodejs.org/" -ForegroundColor Yellow exit 1 } Write-Host "✓ Node.js found: $nodeVersion" -ForegroundColor Green # Check if npm is installed $npmVersion = npm --version 2>$null if (-not $npmVersion) { Write-Host "ERROR: npm is not installed or not in PATH" -ForegroundColor Red exit 1 } Write-Host "✓ npm found: $npmVersion" -ForegroundColor Green Write-Host "" # Get the script directory (project root) $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $projectRoot = Split-Path -Parent $scriptDir $backendDir = Join-Path $projectRoot "backend" $frontendDir = Join-Path $projectRoot "frontend" # Function to check if a port is in use function Test-Port { param($port) $tcpClient = New-Object System.Net.Sockets.TcpClient try { $tcpClient.Connect("localhost", $port) $tcpClient.Close() return $true } catch { return $false } } # Check if backend port is already in use if (Test-Port 5005) { Write-Host "WARNING: Port 5005 is already in use. Backend server might already be running." -ForegroundColor Yellow Write-Host "Do you want to continue anyway? (Y/N): " -NoNewline $response = Read-Host if ($response -ne "Y" -and $response -ne "y") { exit 0 } } # Check if frontend port is already in use if (Test-Port 5173) { Write-Host "WARNING: Port 5173 is already in use. Frontend server might already be running." -ForegroundColor Yellow Write-Host "Do you want to continue anyway? (Y/N): " -NoNewline $response = Read-Host if ($response -ne "Y" -and $response -ne "y") { exit 0 } } # Setup backend Write-Host "Setting up Backend..." -ForegroundColor Cyan Set-Location $backendDir # Check if virtual environment exists $venvPath = Join-Path $backendDir ".venv" if (-not (Test-Path $venvPath)) { Write-Host "Creating Python virtual environment..." -ForegroundColor Yellow python -m venv .venv if ($LASTEXITCODE -ne 0) { Write-Host "ERROR: Failed to create virtual environment" -ForegroundColor Red exit 1 } } # Activate virtual environment and install dependencies Write-Host "Installing backend dependencies..." -ForegroundColor Yellow $activateScript = Join-Path $venvPath "Scripts\Activate.ps1" if (Test-Path $activateScript) { & $activateScript } else { Write-Host "ERROR: Virtual environment activation script not found" -ForegroundColor Red exit 1 } # Check if requirements are installed $pipList = pip list 2>$null if (-not ($pipList -like "*fastapi*")) { Write-Host "Installing Python packages..." -ForegroundColor Yellow pip install -e . 2>&1 | Out-Null if ($LASTEXITCODE -ne 0) { Write-Host "ERROR: Failed to install backend dependencies" -ForegroundColor Red Write-Host "Try running: pip install -e . manually in the backend directory" -ForegroundColor Yellow exit 1 } } Write-Host "✓ Backend dependencies installed" -ForegroundColor Green # Setup frontend Write-Host "" Write-Host "Setting up Frontend..." -ForegroundColor Cyan Set-Location $frontendDir # Check if node_modules exists if (-not (Test-Path "node_modules")) { Write-Host "Installing frontend dependencies..." -ForegroundColor Yellow npm install 2>&1 | Out-Null if ($LASTEXITCODE -ne 0) { Write-Host "ERROR: Failed to install frontend dependencies" -ForegroundColor Red Write-Host "Try running: npm install manually in the frontend directory" -ForegroundColor Yellow exit 1 } } Write-Host "✓ Frontend dependencies installed" -ForegroundColor Green Write-Host "" # Start servers Write-Host "Starting Development Servers..." -ForegroundColor Cyan Write-Host "================================" -ForegroundColor Cyan Write-Host "" # Start backend server in a new PowerShell window Write-Host "Starting Backend Server on http://localhost:5005" -ForegroundColor Green $backendScript = @" Write-Host 'GSPro Remote Backend Server' -ForegroundColor Cyan Write-Host '===========================' -ForegroundColor Cyan Write-Host '' Write-Host 'Server: http://localhost:5005' -ForegroundColor Yellow Write-Host 'API Docs: http://localhost:5005/api/docs' -ForegroundColor Yellow Write-Host 'mDNS: http://gsproapp.local:5005' -ForegroundColor Yellow Write-Host '' Set-Location '$backendDir' & '$activateScript' python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 5005 --log-level info "@ $backendScriptPath = Join-Path $env:TEMP "gspro-backend.ps1" $backendScript | Out-File -FilePath $backendScriptPath -Encoding UTF8 Start-Process powershell -ArgumentList "-NoExit", "-ExecutionPolicy", "Bypass", "-File", $backendScriptPath # Give backend a moment to start Start-Sleep -Seconds 2 # Start frontend server in a new PowerShell window Write-Host "Starting Frontend Server on http://localhost:5173" -ForegroundColor Green $frontendScript = @" Write-Host 'GSPro Remote Frontend Server' -ForegroundColor Cyan Write-Host '============================' -ForegroundColor Cyan Write-Host '' Write-Host 'UI: http://localhost:5173' -ForegroundColor Yellow Write-Host '' Set-Location '$frontendDir' npm run dev "@ $frontendScriptPath = Join-Path $env:TEMP "gspro-frontend.ps1" $frontendScript | Out-File -FilePath $frontendScriptPath -Encoding UTF8 Start-Process powershell -ArgumentList "-NoExit", "-ExecutionPolicy", "Bypass", "-File", $frontendScriptPath Write-Host "" Write-Host "Development servers starting..." -ForegroundColor Green Write-Host "" Write-Host "Access Points:" -ForegroundColor Cyan Write-Host " Frontend UI: http://localhost:5173" -ForegroundColor White Write-Host " Backend API: http://localhost:5005" -ForegroundColor White Write-Host " API Docs: http://localhost:5005/api/docs" -ForegroundColor White Write-Host " mDNS Access: http://gsproapp.local:5005" -ForegroundColor White Write-Host "" Write-Host "Press any key to stop watching for changes..." -ForegroundColor Yellow # Wait for user input $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") # The servers are running in separate windows, so they'll keep running # This script can exit, and the user can close the server windows manually Write-Host "" Write-Host "Note: The servers are still running in separate windows." -ForegroundColor Yellow Write-Host "Close those windows to stop the servers." -ForegroundColor Yellow