Files
orion/Makefile
Samir Boulahtit e9253fbd84 refactor: rename Wizamart to Orion across entire codebase
Replace all ~1,086 occurrences of Wizamart/wizamart/WIZAMART/WizaMart
with Orion/orion/ORION across 184 files. This includes database
identifiers, email addresses, domain references, R2 bucket names,
DNS prefixes, encryption salt, Celery app name, config defaults,
Docker configs, CI configs, documentation, seed data, and templates.

Renames homepage-wizamart.html template to homepage-orion.html.
Fixes duplicate file_pattern key in api.yaml architecture rule.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:46:56 +01:00

685 lines
27 KiB
Makefile

# Orion Multi-Tenant E-Commerce Platform Makefile
# Cross-platform compatible (Windows & Linux)
.PHONY: install install-dev install-docs install-all dev test test-coverage lint format check docker-build docker-up docker-down clean help tailwind-install tailwind-dev tailwind-build tailwind-watch arch-check arch-check-file arch-check-object test-db-up test-db-down test-db-reset test-db-status celery-worker celery-beat celery-dev flower celery-status celery-purge urls
# Detect OS
ifeq ($(OS),Windows_NT)
DETECTED_OS := Windows
else
DETECTED_OS := $(shell uname -s)
endif
# Set Python based on OS
PYTHON := python3
PIP := pip3
# Set PYTHONPATH for scripts
export PYTHONPATH := $(shell pwd)
# =============================================================================
# INSTALLATION & SETUP
# =============================================================================
install:
$(PIP) install -r requirements.txt
install-dev: install
$(PIP) install -r requirements-dev.txt
install-test:
$(PIP) install -r requirements-test.txt
install-docs:
$(PIP) install -r requirements-docs.txt
install-all: install install-dev install-test install-docs
setup: install-all migrate-up init-prod
@echo "✅ Development environment setup complete!"
@echo "Run 'make dev' to start development server"
# =============================================================================
# DEVELOPMENT SERVERS
# =============================================================================
dev:
$(PYTHON) -m uvicorn main:app --reload --host 0.0.0.0 --port 9999
# =============================================================================
# DATABASE MIGRATIONS
# =============================================================================
migrate-create:
ifeq ($(DETECTED_OS),Windows)
@if "$(message)"=="" (echo Error: Please provide a message. Usage: make migrate-create message="your_description") else ($(PYTHON) -m alembic revision --autogenerate -m "$(message)")
else
@if [ -z "$(message)" ]; then \
echo "Error: Please provide a message. Usage: make migrate-create message=\"your_description\""; \
else \
$(PYTHON) -m alembic revision --autogenerate -m "$(message)"; \
fi
endif
migrate-create-manual:
ifeq ($(DETECTED_OS),Windows)
@if "$(message)"=="" (echo Error: Please provide a message. Usage: make migrate-create-manual message="your_description") else ($(PYTHON) -m alembic revision -m "$(message)")
else
@if [ -z "$(message)" ]; then \
echo "Error: Please provide a message. Usage: make migrate-create-manual message=\"your_description\""; \
else \
$(PYTHON) -m alembic revision -m "$(message)"; \
fi
endif
migrate-up:
@echo "Running database migrations..."
$(PYTHON) -m alembic upgrade head
@echo "✅ Migrations completed successfully"
migrate-down:
@echo "Rolling back last migration..."
$(PYTHON) -m alembic downgrade -1
@echo "✅ Rollback completed"
migrate-status:
@echo "Current migration status:"
$(PYTHON) -m alembic current
@echo ""
@echo "Migration history:"
$(PYTHON) -m alembic history --verbose
migrate-squash:
@echo "Squashing all migrations into a single initial migration..."
$(PYTHON) scripts/squash_migrations.py
# =============================================================================
# DATABASE INITIALIZATION & SEEDING
# =============================================================================
# Production initialization - Run on first setup (production OR development)
init-prod:
@echo "🔧 Initializing production database..."
@echo ""
@echo "Step 0/6: Ensuring database exists (running migrations)..."
@$(PYTHON) -m alembic upgrade heads
@echo ""
@echo "Step 1/6: Creating admin user and platform settings..."
$(PYTHON) scripts/seed/init_production.py
@echo ""
@echo "Step 2/6: Initializing log settings..."
$(PYTHON) scripts/seed/init_log_settings.py
@echo ""
@echo "Step 3/6: Creating default CMS content pages..."
$(PYTHON) scripts/seed/create_default_content_pages.py
@echo ""
@echo "Step 4/6: Creating platform pages and landing..."
$(PYTHON) scripts/seed/create_platform_pages.py
@echo ""
@echo "Step 5/6: Seeding email templates..."
$(PYTHON) scripts/seed/seed_email_templates.py
@echo ""
@echo "Step 6/6: Seeding subscription tiers..."
@echo " (Handled by init_production.py Step 6)"
@echo ""
@echo "✅ Production initialization completed"
@echo "✨ Platform is ready for production OR development"
seed-tiers:
@echo "🏷️ Seeding subscription tiers..."
$(PYTHON) -c "from scripts.seed.init_production import *; from app.core.database import SessionLocal; from sqlalchemy import select; db = SessionLocal(); oms = db.execute(select(Platform).where(Platform.code == 'oms')).scalar_one_or_none(); create_subscription_tiers(db, oms) if oms else print('OMS platform not found'); db.commit(); db.close()"
@echo "✅ Subscription tiers seeded"
# First-time installation - Complete setup with configuration validation
platform-install:
@echo "🚀 ORION PLATFORM INSTALLATION"
@echo "=================================="
$(PYTHON) scripts/seed/install.py
# Demo data seeding - Cross-platform using Python to set environment
seed-demo:
@echo "🎪 Seeding demo data (normal mode)..."
ifeq ($(DETECTED_OS),Windows)
@set SEED_MODE=normal&& $(PYTHON) scripts/seed/seed_demo.py
else
SEED_MODE=normal $(PYTHON) scripts/seed/seed_demo.py
endif
@echo "✅ Demo seeding completed"
seed-demo-minimal:
@echo "🎪 Seeding demo data (minimal mode - 1 store only)..."
ifeq ($(DETECTED_OS),Windows)
@set SEED_MODE=minimal&& $(PYTHON) scripts/seed/seed_demo.py
else
SEED_MODE=minimal $(PYTHON) scripts/seed/seed_demo.py
endif
@echo "✅ Minimal demo seeding completed"
seed-demo-reset:
@echo "⚠️ WARNING: This will DELETE ALL existing data!"
ifeq ($(DETECTED_OS),Windows)
@set SEED_MODE=reset&& $(PYTHON) scripts/seed/seed_demo.py
else
SEED_MODE=reset $(PYTHON) scripts/seed/seed_demo.py
endif
db-setup: migrate-up init-prod seed-demo
@echo ""
@echo "✅ Database setup complete!"
@echo "✨ Run 'make dev' to start development server"
db-reset:
@echo "⚠️ WARNING: This will DELETE ALL existing data!"
@echo "Dropping and recreating public schema..."
$(PYTHON) -c "from app.core.config import settings; from sqlalchemy import create_engine, text; e=create_engine(settings.database_url); c=e.connect(); c.execute(text('DROP SCHEMA public CASCADE')); c.execute(text('CREATE SCHEMA public')); c.commit(); c.close()"
@echo "Applying all migrations..."
$(PYTHON) -m alembic upgrade head
@echo "Initializing production data..."
$(PYTHON) scripts/seed/init_production.py
@echo "Seeding demo data..."
ifeq ($(DETECTED_OS),Windows)
@set SEED_MODE=reset&& set FORCE_RESET=true&& $(PYTHON) scripts/seed/seed_demo.py
else
SEED_MODE=reset FORCE_RESET=true $(PYTHON) scripts/seed/seed_demo.py
endif
@echo ""
@echo "✅ Database completely reset!"
backup-db:
@echo "Creating database backup..."
@$(PYTHON) scripts/seed/backup_database.py
# Utility commands (usually not needed - init-prod handles these)
create-cms-defaults:
@echo "📄 Creating default CMS content pages..."
$(PYTHON) scripts/seed/create_default_content_pages.py
@echo "✅ CMS defaults created"
create-platform-pages:
@echo "🏠 Creating platform pages and landing..."
$(PYTHON) scripts/seed/create_platform_pages.py
@echo "✅ Platform pages created"
init-logging:
@echo "📝 Initializing log settings..."
$(PYTHON) scripts/seed/init_log_settings.py
@echo "✅ Log settings initialized"
# =============================================================================
# TEST DATABASE (PostgreSQL in Docker)
# =============================================================================
test-db-up:
@echo "Starting test database (PostgreSQL on port 5433)..."
docker compose -f docker-compose.test.yml up -d
@sleep 3
@echo "✅ Test database ready"
test-db-down:
@echo "Stopping test database..."
docker compose -f docker-compose.test.yml down
@echo "✅ Test database stopped"
test-db-reset:
@echo "Resetting test database..."
docker compose -f docker-compose.test.yml down -v
docker compose -f docker-compose.test.yml up -d
@sleep 3
@echo "✅ Test database reset"
test-db-status:
@docker compose -f docker-compose.test.yml ps
# =============================================================================
# TESTING
# =============================================================================
# Test database URL
TEST_DB_URL := postgresql://test_user:test_password@localhost:5433/orion_test
# Build pytest marker expression from module= and frontend= params
MARKER_EXPR :=
ifdef module
MARKER_EXPR := -m "$(module)"
endif
ifdef frontend
ifdef module
MARKER_EXPR := -m "$(module) and $(frontend)"
else
MARKER_EXPR := -m "$(frontend)"
endif
endif
# All testpaths (central + module tests)
TEST_PATHS := tests/ app/modules/tenancy/tests/ app/modules/catalog/tests/ app/modules/billing/tests/ app/modules/messaging/tests/ app/modules/orders/tests/ app/modules/customers/tests/ app/modules/marketplace/tests/ app/modules/inventory/tests/ app/modules/loyalty/tests/
test:
@docker compose -f docker-compose.test.yml up -d 2>/dev/null || true
@sleep 2
TEST_DATABASE_URL="$(TEST_DB_URL)" \
$(PYTHON) -m pytest $(TEST_PATHS) -v $(MARKER_EXPR)
test-unit:
@docker compose -f docker-compose.test.yml up -d 2>/dev/null || true
@sleep 2
ifdef module
TEST_DATABASE_URL="$(TEST_DB_URL)" \
$(PYTHON) -m pytest $(TEST_PATHS) -v -m "unit and $(module)"
else
TEST_DATABASE_URL="$(TEST_DB_URL)" \
$(PYTHON) -m pytest $(TEST_PATHS) -v -m unit
endif
test-integration:
@docker compose -f docker-compose.test.yml up -d 2>/dev/null || true
@sleep 2
ifdef module
TEST_DATABASE_URL="$(TEST_DB_URL)" \
$(PYTHON) -m pytest $(TEST_PATHS) -v -m "integration and $(module)"
else
TEST_DATABASE_URL="$(TEST_DB_URL)" \
$(PYTHON) -m pytest $(TEST_PATHS) -v -m integration
endif
test-coverage:
@docker compose -f docker-compose.test.yml up -d 2>/dev/null || true
@sleep 2
TEST_DATABASE_URL="$(TEST_DB_URL)" \
$(PYTHON) -m pytest $(TEST_PATHS) --cov=app --cov=models --cov=utils --cov=middleware --cov-report=html --cov-report=term-missing $(MARKER_EXPR)
test-fast:
@docker compose -f docker-compose.test.yml up -d 2>/dev/null || true
@sleep 2
TEST_DATABASE_URL="$(TEST_DB_URL)" \
$(PYTHON) -m pytest $(TEST_PATHS) -v -m "not slow" $(MARKER_EXPR)
test-slow:
@docker compose -f docker-compose.test.yml up -d 2>/dev/null || true
@sleep 2
TEST_DATABASE_URL="$(TEST_DB_URL)" \
$(PYTHON) -m pytest $(TEST_PATHS) -v -m slow
# =============================================================================
# CODE QUALITY
# =============================================================================
format:
@echo "Formatting code with ruff..."
$(PYTHON) -m ruff format .
lint:
@echo "Linting code with ruff..."
$(PYTHON) -m ruff check . --fix
@echo "Type checking with mypy..."
$(PYTHON) -m mypy .
lint-strict:
@echo "Linting (no auto-fix)..."
$(PYTHON) -m ruff check .
@echo "Type checking with mypy..."
$(PYTHON) -m mypy .
check: format lint verify-imports
ci: lint-strict verify-imports test-coverage
verify-imports:
@echo "Verifying critical imports..."
$(PYTHON) scripts/validate/verify_critical_imports.py
arch-check:
@echo "Running architecture validation..."
$(PYTHON) scripts/validate/validate_architecture.py
arch-check-file:
ifeq ($(DETECTED_OS),Windows)
@if "$(file)"=="" (echo Error: Please provide a file. Usage: make arch-check-file file="path/to/file.py") else ($(PYTHON) scripts/validate/validate_architecture.py -f "$(file)")
else
@if [ -z "$(file)" ]; then \
echo "Error: Please provide a file. Usage: make arch-check-file file=\"path/to/file.py\""; \
else \
$(PYTHON) scripts/validate/validate_architecture.py -f "$(file)"; \
fi
endif
arch-check-object:
ifeq ($(DETECTED_OS),Windows)
@if "$(name)"=="" (echo Error: Please provide an object name. Usage: make arch-check-object name="merchant") else ($(PYTHON) scripts/validate/validate_architecture.py -o "$(name)")
else
@if [ -z "$(name)" ]; then \
echo "Error: Please provide an object name. Usage: make arch-check-object name=\"merchant\""; \
else \
$(PYTHON) scripts/validate/validate_architecture.py -o "$(name)"; \
fi
endif
qa: format lint arch-check test-coverage docs-check
@echo "Quality assurance checks completed!"
# =============================================================================
# DOCUMENTATION
# =============================================================================
docs-serve:
@echo "Starting documentation server..."
$(PYTHON) -m mkdocs serve --dev-addr=0.0.0.0:9991
docs-build:
@echo "Building documentation..."
$(PYTHON) -m mkdocs build --clean --strict
docs-deploy:
@echo "Deploying documentation..."
$(PYTHON) -m mkdocs gh-deploy --clean
docs-clean:
ifeq ($(DETECTED_OS),Windows)
@if exist site rmdir /s /q site
else
@rm -rf site
endif
@echo "Documentation build files cleaned!"
docs-check:
@echo "Checking documentation for issues..."
$(PYTHON) -m mkdocs build --strict --verbose
# =============================================================================
# FRONTEND / TAILWIND CSS (Standalone CLI - No Node.js Required)
# =============================================================================
# Tailwind CLI binary location
TAILWIND_CLI := $(HOME)/.local/bin/tailwindcss
tailwind-install:
@echo "Installing Tailwind CSS standalone CLI..."
@mkdir -p $(HOME)/.local/bin
@curl -sLO https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64
@chmod +x tailwindcss-linux-x64
@mv tailwindcss-linux-x64 $(TAILWIND_CLI)
@echo "Tailwind CLI installed: $$($(TAILWIND_CLI) --help | head -1)"
# All frontends that have a Tailwind build (static/<name>/css/tailwind.css)
TAILWIND_FRONTENDS := admin store storefront platform merchant
tailwind-dev:
@echo "Building Tailwind CSS (development)..."
@$(foreach fe,$(TAILWIND_FRONTENDS),$(TAILWIND_CLI) -i static/$(fe)/css/tailwind.css -o static/$(fe)/css/tailwind.output.css &&) true
@echo "Tailwind CSS built ($(TAILWIND_FRONTENDS))"
tailwind-build:
@echo "Building Tailwind CSS (production - minified)..."
@$(foreach fe,$(TAILWIND_FRONTENDS),$(TAILWIND_CLI) -i static/$(fe)/css/tailwind.css -o static/$(fe)/css/tailwind.output.css --minify &&) true
@echo "Tailwind CSS built and minified for production"
tailwind-watch:
@echo "Watching Tailwind CSS for changes ($(fe))..."
$(TAILWIND_CLI) -i static/$(fe)/css/tailwind.css -o static/$(fe)/css/tailwind.output.css --watch
# =============================================================================
# CELERY / TASK QUEUE
# =============================================================================
celery-worker:
@echo "Starting Celery worker..."
celery -A app.core.celery_config worker --loglevel=info -Q default,long_running,scheduled
celery-beat:
@echo "Starting Celery beat scheduler..."
celery -A app.core.celery_config beat --loglevel=info
celery-dev:
@echo "Starting Celery worker + beat (development mode)..."
celery -A app.core.celery_config worker --loglevel=info -B -Q default,long_running,scheduled
flower:
@echo "Starting Flower monitoring dashboard on http://localhost:5555..."
celery -A app.core.celery_config flower --port=5555 --basic-auth=admin:admin
celery-status:
@echo "Celery worker status:"
celery -A app.core.celery_config inspect active
celery-purge:
@echo "Purging all pending tasks..."
celery -A app.core.celery_config purge -f
# =============================================================================
# DOCKER
# =============================================================================
docker-build:
docker compose build
docker-up:
docker compose up -d
docker-down:
docker compose down
docker-restart: docker-down docker-up
# =============================================================================
# DEPLOYMENT
# =============================================================================
deploy-staging: migrate-up
docker compose -f docker-compose.staging.yml up -d
deploy-prod: migrate-up
docker compose -f docker-compose.prod.yml up -d
# =============================================================================
# UTILITIES
# =============================================================================
clean:
ifeq ($(DETECTED_OS),Windows)
@if exist htmlcov rmdir /s /q htmlcov
@if exist .pytest_cache rmdir /s /q .pytest_cache
@if exist .coverage del .coverage
@if exist .mypy_cache rmdir /s /q .mypy_cache
@for /d /r . %%d in (__pycache__) do @if exist "%%d" rmdir /s /q "%%d"
@del /s /q *.pyc 2>nul || echo No .pyc files found
else
@find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
@find . -type f -name "*.pyc" -delete 2>/dev/null || true
@rm -rf htmlcov .pytest_cache .coverage .mypy_cache 2>/dev/null || true
endif
@echo "Cleaned up build artifacts"
verify-setup:
@echo "Running setup verification..."
@$(PYTHON) scripts/verify_setup.py
urls:
@$(PYTHON) scripts/show_urls.py
urls-dev:
@$(PYTHON) scripts/show_urls.py --dev
urls-prod:
@$(PYTHON) scripts/show_urls.py --prod
urls-check:
@$(PYTHON) scripts/show_urls.py --check
check-env:
@echo "Checking Python environment..."
@echo "Detected OS: $(DETECTED_OS)"
@echo ""
@echo "Python version:"
@$(PYTHON) --version
@echo ""
ifeq ($(DETECTED_OS),Windows)
@echo "Python location:"
@where $(PYTHON)
else
@echo "Python location:"
@which $(PYTHON)
endif
@echo ""
@echo "Virtual environment active:"
@$(PYTHON) -c "import sys; print('YES' if hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix) else 'NO')"
@echo ""
@echo "Python executable:"
@$(PYTHON) -c "import sys; print(sys.executable)"
# =============================================================================
# HELP
# =============================================================================
help:
@echo "Orion Platform Development Commands"
@echo ""
@echo "=== SETUP ==="
@echo " install - Install production dependencies"
@echo " install-test - Install test dependencies only"
@echo " install-dev - Install development dependencies"
@echo " install-all - Install all dependencies"
@echo " setup - Complete development setup"
@echo ""
@echo "=== DEVELOPMENT ==="
@echo " dev - Start API development server"
@echo ""
@echo "=== DATABASE ==="
@echo " migrate-create message=\"msg\" - Create new migration"
@echo " migrate-up - Apply pending migrations"
@echo " migrate-down - Rollback last migration"
@echo " migrate-status - Show migration status"
@echo " platform-install - First-time setup (validates config + migrate + init)"
@echo " init-prod - Initialize platform (admin, CMS, pages, emails, tiers)"
@echo " seed-tiers - Seed subscription tiers only"
@echo " seed-demo - Seed demo data (3 merchants + stores)"
@echo " seed-demo-minimal - Seed minimal demo (1 merchant + store)"
@echo " seed-demo-reset - DELETE ALL demo data and reseed"
@echo " db-setup - Full dev setup (migrate + init-prod + seed-demo)"
@echo " backup-db - Backup database"
@echo ""
@echo "=== TESTING (PostgreSQL) ==="
@echo " test-db-up - Start test PostgreSQL database"
@echo " test-db-down - Stop test database"
@echo " test-db-reset - Reset test database"
@echo " test - Run all tests (auto-starts DB)"
@echo " test module=loyalty - Run tests for a specific module"
@echo " test-unit - Run unit tests only"
@echo " test-unit module=X - Run unit tests for module X"
@echo " test-integration - Run integration tests only"
@echo " test-coverage - Run tests with coverage"
@echo " test-fast - Run fast tests only"
@echo " test frontend=storefront - Run storefront tests"
@echo ""
@echo "=== CODE QUALITY ==="
@echo " format - Format code with ruff"
@echo " lint - Lint and auto-fix with ruff + mypy"
@echo " lint-strict - Lint without auto-fix + mypy"
@echo " verify-imports - Verify critical imports haven't been removed"
@echo " arch-check - Validate architecture patterns"
@echo " arch-check-file file=\"path\" - Check a single file"
@echo " arch-check-object name=\"merchant\" - Check all files for an entity"
@echo " check - Format + lint + verify imports"
@echo " ci - Full CI pipeline (strict)"
@echo " qa - Quality assurance (includes arch-check)"
@echo ""
@echo "=== DOCUMENTATION ==="
@echo " docs-serve - Start documentation server"
@echo " docs-build - Build documentation"
@echo ""
@echo "=== FRONTEND / TAILWIND (No Node.js Required) ==="
@echo " tailwind-install - Install Tailwind standalone CLI"
@echo " tailwind-dev - Build Tailwind CSS (development)"
@echo " tailwind-build - Build Tailwind CSS (production, minified)"
@echo " tailwind-watch fe=X - Watch and rebuild on changes (specify frontend)"
@echo ""
@echo "=== CELERY / TASK QUEUE ==="
@echo " celery-worker - Start Celery worker"
@echo " celery-beat - Start Celery beat scheduler"
@echo " celery-dev - Start worker + beat together (dev)"
@echo " flower - Start Flower monitoring (localhost:5555)"
@echo " celery-status - Show active worker tasks"
@echo " celery-purge - Purge all pending tasks"
@echo ""
@echo "=== DOCKER ==="
@echo " docker-build - Build Docker containers"
@echo " docker-up - Start Docker containers"
@echo " docker-down - Stop Docker containers"
@echo ""
@echo "=== UTILITIES ==="
@echo " urls - Show all platform/store/storefront URLs"
@echo " urls-dev - Show development URLs only"
@echo " urls-prod - Show production URLs only"
@echo " urls-check - Check dev URLs with curl (server must be running)"
@echo " clean - Clean build artifacts"
@echo " check-env - Check Python environment and OS"
@echo ""
@echo "=== DAILY WORKFLOW ==="
@echo " make setup # Initial setup"
@echo " make dev # Start development"
@echo " make migrate-create message=\"feature\" # Create migration"
@echo " make migrate-up # Apply migration"
@echo " make test # Run tests"
help-db:
@echo "=== DATABASE COMMANDS ==="
@echo ""
@echo "MIGRATIONS:"
@echo " migrate-create message=\"description\" - Create auto-generated migration"
@echo " migrate-create-manual message=\"desc\" - Create empty migration template"
@echo " migrate-up - Apply all pending migrations"
@echo " migrate-down - Rollback last migration"
@echo " migrate-status - Show current status and history"
@echo ""
@echo "FIRST-TIME INSTALLATION:"
@echo "──────────────────────────────────────────────────────────"
@echo " platform-install - Complete installation wizard:"
@echo " - Validates .env configuration"
@echo " - Checks Stripe, Email, Security settings"
@echo " - Runs database migrations"
@echo " - Initializes all platform data"
@echo " - Provides configuration report"
@echo ""
@echo "PLATFORM INITIALIZATION (Production + Development):"
@echo "──────────────────────────────────────────────────────────"
@echo " init-prod - Complete platform setup (6 steps):"
@echo " 1. Create admin user + settings"
@echo " 2. Initialize log settings"
@echo " 3. Create CMS defaults"
@echo " 4. Create platform pages"
@echo " 5. Seed email templates"
@echo " 6. Seed subscription tiers"
@echo ""
@echo "DEMO DATA (Development Only - NEVER in production):"
@echo "──────────────────────────────────────────────────────────"
@echo " seed-demo - Create 3 demo merchants + stores + data"
@echo " seed-demo-minimal - Create 1 demo merchant + store only"
@echo " seed-demo-reset - DELETE ALL demo data and reseed (DANGEROUS!)"
@echo ""
@echo "UTILITY COMMANDS (Advanced - usually not needed):"
@echo "──────────────────────────────────────────────────────────"
@echo " create-cms-defaults - Re-create CMS pages only"
@echo " create-platform-pages - Re-create platform pages only"
@echo " init-logging - Re-initialize logging only"
@echo ""
@echo "QUICK WORKFLOWS:"
@echo "──────────────────────────────────────────────────────────"
@echo " db-setup - Full dev setup (migrate + init-prod + seed-demo)"
@echo " db-reset - Nuclear reset (rollback + init-prod + reseed)"
@echo ""
@echo "TYPICAL FIRST-TIME SETUP (Development):"
@echo "──────────────────────────────────────────────────────────"
@echo " 1. cp .env.example .env # Configure environment"
@echo " 2. make platform-install # Validates config + initializes platform"
@echo " 3. make seed-demo # Add demo data (optional)"
@echo " 4. make dev # Start development server"
@echo ""
@echo "PRODUCTION SETUP:"
@echo "──────────────────────────────────────────────────────────"
@echo " 1. Configure .env with production values:"
@echo " - DATABASE_URL (PostgreSQL recommended)"
@echo " - JWT_SECRET_KEY (use: openssl rand -hex 32)"
@echo " - STRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY"
@echo " - Email provider settings (SMTP/SendGrid/Mailgun/SES)"
@echo " - ADMIN_PASSWORD (strong password)"
@echo " 2. make platform-install # Validates + initializes"
@echo " 3. DO NOT run seed-demo in production!"