diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..57ed54c --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +# Backend +DATABASE_URL=postgres://campaign_manager:devpassword@localhost:5432/campaign_manager +JWT_SECRET=change-me-to-a-long-random-secret +PORT=3000 + +# Object storage (Cloudflare R2 or any S3-compatible) +S3_ENDPOINT=https://.r2.cloudflarestorage.com +S3_BUCKET=campaign-manager-assets +S3_ACCESS_KEY_ID= +S3_SECRET_ACCESS_KEY= +S3_PUBLIC_URL=https://assets.campaign-manager.example.com diff --git a/README.md b/README.md index 4ffae28..7cf9e55 100644 --- a/README.md +++ b/README.md @@ -31,3 +31,36 @@ Verification results: ✅ symbiote build → dist/ with index.html + manifest.json ✅ web build → SvelteKit static output ✅ cargo check → no errors + + + Local dev workflow is now: + + # Start Postgres + docker compose up -d + + # Copy and fill in secrets + cp .env.example .env + + # Run backend + cd backend && cargo run + + # Symbiote (build-watch mode — see below) + pnpm dev:symbiote + + # Web app + pnpm dev:web Local dev workflow is now: + + # Start Postgres + docker compose up -d + + # Copy and fill in secrets + cp .env.example .env + + # Run backend + cd backend && cargo run + + # Symbiote (build-watch mode — see below) + pnpm dev:symbiote + + # Web app + pnpm dev:web diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9dae8c2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +services: + postgres: + image: postgres:18 + restart: unless-stopped + environment: + POSTGRES_DB: campaign_manager + POSTGRES_USER: campaign_manager + POSTGRES_PASSWORD: devpassword + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U campaign_manager"] + interval: 5s + timeout: 5s + retries: 5 + +volumes: + postgres_data: