#!/bin/bash # Scaffold a new app from the standard template # Usage: scaffold.sh [--api-only] # # Creates project structure, initializes git, and pushes to Gitea. set -euo pipefail APP_NAME="${1:?Usage: scaffold.sh }" API_ONLY="${2:-}" BASE_DIR="/home/clawdbot/clawd" PROJECT_DIR="$BASE_DIR/$APP_NAME" SKILL_DIR="$(dirname "$(realpath "$0")")/.." TEMPLATE_DIR="$SKILL_DIR/assets/template" GITEA_URL="https://git.infra.nkode.tech" if [ -d "$PROJECT_DIR" ]; then echo "Error: $PROJECT_DIR already exists" exit 1 fi echo "🔨 Scaffolding $APP_NAME..." # Create project structure mkdir -p "$PROJECT_DIR" cp -r "$TEMPLATE_DIR/api" "$PROJECT_DIR/api" if [ "$API_ONLY" != "--api-only" ]; then cp -r "$TEMPLATE_DIR/web" "$PROJECT_DIR/web" fi # Copy root files cp "$TEMPLATE_DIR/docker-compose.yml" "$PROJECT_DIR/" cp "$TEMPLATE_DIR/docker-compose.dokploy.yml" "$PROJECT_DIR/" cp "$TEMPLATE_DIR/.env.example" "$PROJECT_DIR/" cp "$TEMPLATE_DIR/.gitignore" "$PROJECT_DIR/" # Replace placeholder app name find "$PROJECT_DIR" -type f \( -name "*.ts" -o -name "*.json" -o -name "*.yml" -o -name "*.md" -o -name "*.env*" \) \ -exec sed -i "s/APP_TEMPLATE/$APP_NAME/g" {} + # Initialize git cd "$PROJECT_DIR" git init git add -A git commit -m "Initial scaffold from app-builder template" echo "" echo "✅ Project scaffolded at $PROJECT_DIR" echo "" echo "Next steps:" echo " 1. Create Gitea repo: $GITEA_URL/hammer/$APP_NAME" echo " 2. git remote add origin $GITEA_URL/hammer/$APP_NAME.git" echo " 3. git push -u origin main" echo " 4. Customize the schema in api/src/db/schema.ts" echo " 5. Run: cd $PROJECT_DIR && docker compose up"