{"slug":"business/DEPLOYMENT_GUIDE","title":"IntegrateWise Deployment Guide","section":"business","sectionLabel":"Business","status":"unclassified","type":"document","path":"business/DEPLOYMENT_GUIDE.mdx","bytes":6781,"description":null,"updated":null,"source":"integratewise/Integratewise-docs-wiki","content":"\nComplete step-by-step guide to deploy IntegrateWise to production using **Doppler** for secrets management.\n\n---\n\n## Prerequisites\n\n- Node.js 18+ installed\n- Doppler CLI installed (`brew install doppler`)\n- Supabase account (free tier works)\n- Cloudflare account (for hosting)\n- GitHub account (for OAuth)\n\n---\n\n## Step 1: Doppler Setup (5 minutes)\n\n### 1.1 Login to Doppler\n\n```bash\ndoppler login\n```\n\n### 1.2 Create Doppler Project\n\n```bash\n# Create project\ndoppler projects create integratewise\n\n# Setup local configuration\ncd integratewise-complete/apps/web\ndoppler setup\n# Select: integratewise → dev\n```\n\n### 1.3 Configure Secrets\n\nAdd these secrets to your Doppler project (`dev`, `staging`, and `prod` environments):\n\n```bash\n# Required secrets\ndoppler secrets set VITE_SUPABASE_URL \"https://your-project.supabase.co\"\ndoppler secrets set VITE_SUPABASE_ANON_KEY \"eyJhbG...\"\ndoppler secrets set SUPABASE_SERVICE_KEY \"your-service-role-key\"\n\n# Optional secrets\ndoppler secrets set OPENROUTER_API_KEY \"your-key\"\ndoppler secrets set N8N_WEBHOOK_SECRET \"your-secret\"\n```\n\n**Get Supabase credentials:**\n\n1. Go to [supabase.com](https://supabase.com) dashboard\n2. Project Settings → API\n3. Copy Project URL and anon key\n\n---\n\n## Step 2: Database Setup (10 minutes)\n\n### 2.1 Create Supabase Project\n\n1. Go to [supabase.com](https://supabase.com) and sign in\n2. Click \"New Project\"\n3. Fill in:\n   - Name: `integratewise-prod`\n   - Database Password: Generate a strong one\n   - Region: Choose closest to your users\n4. Wait for project creation (~2 minutes)\n\n### 2.2 Apply SQL Migrations\n\n**Via Supabase Dashboard:**\n\n1. Go to Supabase Dashboard → SQL Editor\n2. Run migrations in order:\n   - `001_supabase_schema.sql` through `049_*.sql`\n   - **CRITICAL**: `050_rls_policies.sql` (enables security)\n\n**Via Supabase CLI:**\n\n```bash\n# Install Supabase CLI if needed\nnpm install -g supabase\n\n# Login and link\nsupabase login\nsupabase link --project-ref your-project-ref\n\n# Run migrations\nfor f in integratewise-complete/sql-migrations/*.sql; do\n  echo \"Applying: $f\"\n  supabase db execute < \"$f\"\ndone\n```\n\n### 2.3 Verify RLS is Enabled\n\nRun in SQL Editor:\n\n```sql\nSELECT tablename, rowsecurity as rls_enabled\nFROM pg_tables\nWHERE schemaname = 'public'\nAND tablename IN ('profiles', 'spine_entities', 'knowledge_insights', 'actions')\nORDER BY tablename;\n```\n\nAll should show `rls_enabled = true`.\n\n---\n\n## Step 3: Authentication Setup (5 minutes)\n\n### 3.1 Configure OAuth Providers\n\n**Google OAuth:**\n\n1. [Google Cloud Console](https://console.cloud.google.com/) → APIs & Services → Credentials\n2. Create OAuth client ID (Web application)\n3. Authorized redirect URI: `https://your-project.supabase.co/auth/v1/callback`\n4. Copy Client ID and Secret\n\n**GitHub OAuth:**\n\n1. GitHub Settings → Developer settings → OAuth Apps\n2. New OAuth App\n3. Authorization callback URL: `https://your-project.supabase.co/auth/v1/callback`\n\n### 3.2 Add OAuth to Supabase\n\n1. Supabase Dashboard → Authentication → Providers\n2. Enable Google and GitHub\n3. Paste Client IDs and Secrets\n4. Save\n\n---\n\n## Step 4: Build & Test (5 minutes)\n\n### 4.1 Install Dependencies\n\n```bash\ncd integratewise-complete/apps/web\nnpm install\n```\n\n### 4.2 Run Deployment Check\n\n```bash\ncd /Users/nirmal/Github/integratewise-live\n./scripts/deploy-check.sh\n```\n\n### 4.3 Run Tests\n\n```bash\ncd integratewise-complete/apps/web\ndoppler run -- npm test\n```\n\n### 4.4 Build for Production\n\n```bash\ncd integratewise-complete/apps/web\ndoppler run -- npm run build\n```\n\nOutput in `dist/` folder.\n\n---\n\n## Step 5: Deploy to Cloudflare Pages (5 minutes)\n\n### 5.1 Configure Doppler Integration\n\n1. Doppler Dashboard → Integrations\n2. Add Cloudflare Pages integration\n3. Connect your Cloudflare account\n4. Select project and configure sync\n\n### 5.2 Deploy via CLI\n\n```bash\ncd integratewise-complete/apps/web\n\n# Deploy with Doppler secrets\ndoppler run -- wrangler pages deploy dist --project-name=integratewise\n```\n\n### 5.3 Set Custom Domain (Optional)\n\n1. Cloudflare Dashboard → Pages → Your Project\n2. Custom Domains → Set up custom domain\n3. Follow DNS configuration\n\n---\n\n## Doppler Workflow Cheat Sheet\n\n```bash\n# Development\ndoppler run -- npm run dev\n\n# Testing\ndoppler run -- npm test\n\n# Build\ndoppler run -- npm run build\n\n# Deploy\ndoppler run -- wrangler pages deploy dist\n\n# View secrets\ndoppler secrets\n\n# Edit secrets\ndoppler secrets edit\n\n# Switch environment\ndoppler configure set config=prod\ndoppler run -- npm run build\n```\n\n---\n\n## Post-Deployment Verification\n\n### Health Checklist\n\n- [ ] Visit deployed URL - site loads\n- [ ] Sign up with email - success\n- [ ] Log out and log back in - success\n- [ ] Navigate to Dashboard - loads with data\n- [ ] Create a task - appears in list\n- [ ] View Accounts page - entities load\n\n### Verify Database\n\nCheck Supabase Dashboard → Table Editor:\n\n- Records appear in `profiles` after signup\n- Records appear in `spine_entities` when created\n\n### Check RLS\n\nTry accessing data without auth:\n\n```javascript\nfetch(\"https://your-project.supabase.co/rest/v1/spine_entities\", {\n  headers: { apikey: \"anon-key\" },\n});\n// Should return empty array\n```\n\n---\n\n## Troubleshooting\n\n### Build Fails\n\n```bash\n# Clean and reinstall\nrm -rf node_modules package-lock.json\nnpm install\ndoppler run -- npm run build\n```\n\n### Doppler Not Working\n\n```bash\n# Re-authenticate\ndoppler login\n\n# Reconfigure project\ndoppler setup\n\n# Verify secrets\ndoppler secrets get VITE_SUPABASE_URL --plain\n```\n\n### Database Connection Errors\n\n1. Verify Doppler secrets are correct\n2. Check Supabase project is active\n3. Verify RLS policies applied\n\n### Auth Not Working\n\n1. Check OAuth redirect URLs match exactly\n2. Verify email confirmation settings in Supabase\n3. Check browser console for CORS errors\n\n---\n\n## Security Checklist\n\nBefore going live:\n\n- [ ] RLS enabled on all tables\n- [ ] OAuth redirect URLs configured\n- [ ] No secrets in git history\n- [ ] Doppler configured for prod environment\n- [ ] Custom domain has SSL enabled\n- [ ] Service keys only in backend/workers\n\n---\n\n## Environment Structure\n\n```\nDoppler Project: integratewise\n├── dev          # Local development\n├── staging      # Pre-production\n└── prod         # Production\n\nEach environment contains:\n├── VITE_SUPABASE_URL\n├── VITE_SUPABASE_ANON_KEY\n├── SUPABASE_SERVICE_KEY (backend only)\n└── Optional: OPENROUTER_API_KEY, etc.\n```\n\n---\n\n## Support\n\nIf issues:\n\n1. Run `./scripts/deploy-check.sh` for diagnostics\n2. Check Doppler logs: `doppler activity`\n3. Check Supabase logs in Dashboard → Logs\n4. Check Cloudflare Pages build logs\n\n---\n\n**Estimated Total Time: 30 minutes**\n\n**Key Difference: No .env files — all secrets managed via Doppler.**\n"}