#!/usr/bin/env bash # Bootstrap a local dev environment for Padelnomics. # # Usage: ./scripts/dev_setup.sh # # Checks prerequisites, installs deps, creates .env, runs migrations, # seeds test data, and builds CSS. set -euo pipefail cd "$(dirname "$0")/../.." # -- Colors & helpers ------------------------------------------------------- RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' BOLD='\033[1m' NC='\033[0m' info() { echo -e "${BLUE}==>${NC} ${BOLD}$1${NC}"; } ok() { echo -e "${GREEN} ✓${NC} $1"; } warn() { echo -e "${YELLOW} !${NC} $1"; } fail() { echo -e "${RED} ✗${NC} $1"; exit 1; } # -- Prerequisites ----------------------------------------------------------- info "Checking prerequisites" command -v python3 >/dev/null 2>&1 || fail "python3 not found. Install Python 3.12+." command -v uv >/dev/null 2>&1 || fail "uv not found. Install: https://docs.astral.sh/uv/getting-started/installation/" PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")') ok "python3 ${PYTHON_VERSION}" ok "uv $(uv --version 2>/dev/null | head -1)" # -- Install dependencies ---------------------------------------------------- info "Installing Python dependencies" uv sync ok "Dependencies installed" # -- .env -------------------------------------------------------------------- if [ -f .env ]; then warn ".env already exists — skipping creation" else info "Creating .env from .env.example" cp .env.example .env # Auto-generate SECRET_KEY SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))") sed -i "s/^SECRET_KEY=.*/SECRET_KEY=${SECRET_KEY}/" .env ok "SECRET_KEY generated" # Prompt for optional keys echo "" echo -e "${BOLD}Optional API keys${NC} (press Enter to skip — everything works without them)" echo "" read -rp " Paddle API key (for checkout testing): " PADDLE_API_KEY if [ -n "$PADDLE_API_KEY" ]; then sed -i "s/^PADDLE_API_KEY=.*/PADDLE_API_KEY=${PADDLE_API_KEY}/" .env ok "PADDLE_API_KEY set" read -rp " Paddle client token: " PADDLE_CLIENT_TOKEN [ -n "$PADDLE_CLIENT_TOKEN" ] && sed -i "s/^PADDLE_CLIENT_TOKEN=.*/PADDLE_CLIENT_TOKEN=${PADDLE_CLIENT_TOKEN}/" .env fi read -rp " Resend API key (for email testing): " RESEND_API_KEY if [ -n "$RESEND_API_KEY" ]; then sed -i "s/^RESEND_API_KEY=.*/RESEND_API_KEY=${RESEND_API_KEY}/" .env ok "RESEND_API_KEY set" fi echo "" ok ".env created" fi # -- Migrations --------------------------------------------------------------- info "Running database migrations" uv run python -m padelnomics.migrations.migrate ok "Migrations applied" # -- Seed data ---------------------------------------------------------------- info "Seeding development data" uv run python -m padelnomics.scripts.seed_dev_data ok "Dev data seeded" # -- Paddle setup (optional) -------------------------------------------------- if grep -q '^PADDLE_API_KEY=.\+' .env 2>/dev/null; then echo "" read -rp "$(echo -e "${BLUE}==>${NC} Set up Paddle sandbox products? [y/N] ")" SETUP_PADDLE if [[ "$SETUP_PADDLE" =~ ^[Yy]$ ]]; then uv run python -m padelnomics.scripts.setup_paddle ok "Paddle products created" fi fi # -- CSS build ---------------------------------------------------------------- info "Building CSS" make css-build ok "CSS built" # -- Summary ------------------------------------------------------------------ echo "" echo -e "${GREEN}${BOLD}Setup complete!${NC}" echo "" echo " Start all services: ./scripts/dev_run.sh" echo "" echo " URLs:" echo " App: http://localhost:5000" echo " Dev login: http://localhost:5000/auth/dev-login?email=dev@localhost" echo " Admin: http://localhost:5000/admin (password: admin)" echo "" echo " Seeded accounts:" echo " dev@localhost — dev user (use dev-login link above)" echo "" echo " Email:" if grep -q '^RESEND_API_KEY=.\+' .env 2>/dev/null; then echo " Resend configured — emails sent via API" echo " Test addresses: delivered@resend.dev, bounced@resend.dev" else echo " No Resend key — emails print to console" fi echo ""