# Koha Pre-Production Deployment - Quick Reference

**Date:** 2025-10-08
**Status:** Ready for Production Deployment (Pre-Stripe)
**Goal:** Deploy infrastructure now, activate payments next week

---

## What's Been Prepared

### ✅ Code Complete
- Multi-currency support (10 currencies)
- Privacy policy and footer component
- Database models and indexes
- API controllers and routes
- Frontend forms and dashboards
- Coming soon overlay for user-facing pages
- Stripe configuration checks

### ✅ Documentation Complete
- Comprehensive deployment guide: `docs/KOHA_PRODUCTION_DEPLOYMENT.md`
- Stripe setup guide: `docs/KOHA_STRIPE_SETUP.md`
- Automated deployment script: `scripts/deploy-koha-to-production.sh`

### ✅ Safety Measures
- Coming soon overlay prevents premature user access
- API returns 503 "not configured" when Stripe keys are PLACEHOLDER
- All code deployed but functionality disabled
- No public navigation links to Koha pages

---

## Detailed Next Steps to Deploy to Production

### Step 1: Deploy Code (5 minutes)

```bash
# From your local machine
cd /home/theflow/projects/tractatus

# Run automated deployment script
./scripts/deploy-koha-to-production.sh
```

**What this does:**
- Syncs all Koha backend code to production
- Syncs all Koha frontend code to production
- Syncs scripts and utilities
- Shows next manual steps

### Step 2: SSH into Production (1 minute)

```bash
ssh -i /home/theflow/.ssh/tractatus_deploy ubuntu@vps-93a693da.vps.ovh.net
cd /var/www/tractatus
```

### Step 3: Initialize Database (2 minutes)

```bash
# Run Koha database initialization
node scripts/init-koha.js
```

**Expected output:**
```
[KOHA] Initializing database...
✓ Collection 'koha_donations' exists
✓ Created index on status
✓ Created index on frequency
... (10 indexes total)
[KOHA] Database initialization complete
```

**Verify:**
```bash
mongosh tractatus_prod --eval "db.koha_donations.getIndexes()" | grep name
```

Should show 10 indexes.

### Step 4: Configure Environment Variables (3 minutes)

```bash
# Edit production .env
nano /var/www/tractatus/.env
```

**Add these lines at the end:**

```bash
# ==================================================
# Koha Donation System (Pre-Production)
# These are PLACEHOLDER values until Stripe keys ready
# ==================================================

# Stripe API Keys (PLACEHOLDERS)
STRIPE_SECRET_KEY=sk_test_PLACEHOLDER_REPLACE_NEXT_WEEK
STRIPE_PUBLISHABLE_KEY=pk_test_PLACEHOLDER_REPLACE_NEXT_WEEK

# Stripe Webhook Secret (PLACEHOLDER)
STRIPE_KOHA_WEBHOOK_SECRET=whsec_PLACEHOLDER_REPLACE_NEXT_WEEK

# Stripe Price IDs for Monthly Tiers (PLACEHOLDERS)
STRIPE_KOHA_5_PRICE_ID=price_PLACEHOLDER_5_REPLACE_NEXT_WEEK
STRIPE_KOHA_15_PRICE_ID=price_PLACEHOLDER_15_REPLACE_NEXT_WEEK
STRIPE_KOHA_50_PRICE_ID=price_PLACEHOLDER_50_REPLACE_NEXT_WEEK

# Frontend URL (PRODUCTION)
FRONTEND_URL=https://agenticgovernance.digital
```

Save and exit (`Ctrl+X`, `Y`, `Enter`)

**Verify:**
```bash
grep STRIPE /var/www/tractatus/.env
```

### Step 5: Restart Production Server (1 minute)

```bash
# Restart the application
sudo systemctl restart tractatus

# Verify it started successfully
sudo systemctl status tractatus

# Check logs for errors
sudo journalctl -u tractatus -n 50 --no-pager | grep -i koha
```

**Expected in logs:**
```
Koha routes registered
InstructionPersistenceClassifier initialized
Server running on port 9000
```

### Step 6: Test API Endpoints (5 minutes)

**Test 1: Transparency endpoint (should work, return empty data)**

```bash
curl -s https://agenticgovernance.digital/api/koha/transparency | jq '.'
```

**Expected response:**
```json
{
  "success": true,
  "data": {
    "total_received": 0,
    "monthly_supporters": 0,
    "one_time_donations": 0,
    "monthly_recurring_revenue": 0,
    "allocation": {
      "hosting": 0.30,
      "development": 0.40,
      "research": 0.20,
      "community": 0.10
    },
    "recent_donors": [],
    "last_updated": "2025-10-08T..."
  }
}
```

**Test 2: Checkout endpoint (should return "not configured")**

```bash
curl -X POST https://agenticgovernance.digital/api/koha/checkout \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 1500,
    "currency": "NZD",
    "frequency": "monthly",
    "tier": "15",
    "donor": {
      "name": "Test User",
      "email": "test@example.com"
    }
  }' | jq '.'
```

**Expected response:**
```json
{
  "success": false,
  "error": "Donation system not yet active",
  "message": "The Koha donation system is currently being configured. Please check back soon."
}
```

✅ **Perfect!** This means the safety check is working.

### Step 7: Test Frontend Pages (2 minutes)

Open browser and visit:

1. **https://agenticgovernance.digital/koha.html**
   - Should show "Coming Soon" overlay
   - Should NOT allow form interaction

2. **https://agenticgovernance.digital/koha/transparency**
   - Should show "Coming Soon" overlay
   - Should show return to homepage button

3. **https://agenticgovernance.digital/privacy.html**
   - Should load normally (NO overlay)
   - Privacy policy should be readable

### Step 8: Verify No Public Access (1 minute)

Check that Koha is NOT linked from main site:

```bash
# Check if navbar has Koha links (should not)
curl -s https://agenticgovernance.digital/ | grep -i koha
```

**Expected:** No results (Koha not in public navigation yet)

---

## Verification Checklist

After completing Steps 1-8, verify:

- [ ] Database collection `koha_donations` exists with 10 indexes
- [ ] Environment variables set with PLACEHOLDER values
- [ ] Server restarted without errors
- [ ] Transparency API returns empty data (not error)
- [ ] Checkout API returns 503 "not configured"
- [ ] koha.html shows coming soon overlay
- [ ] transparency.html shows coming soon overlay
- [ ] success.html shows coming soon overlay
- [ ] privacy.html loads normally (no overlay)
- [ ] No public navigation links to Koha pages
- [ ] Server logs show no Koha-related errors

---

## What Happens Next Week

When you have live Stripe keys ready:

### Quick Activation (2-3 hours)

1. **Update .env with real Stripe keys** (10 min)
   - Replace all PLACEHOLDER values
   - Create Stripe products/prices with currency_options
   - Create webhook endpoint

2. **Remove safety measures** (5 min)
   - Delete overlay script tags from HTML files
   - Remove PLACEHOLDER check from controller
   - Verify code changes

3. **Add navigation links** (5 min)
   - Update navbar to include Koha link
   - Update footer with donation link

4. **Test thoroughly** (30 min)
   - Test checkout flow with test cards
   - Verify webhook delivery
   - Test all 10 currencies
   - Test monthly and one-time donations
   - Verify transparency dashboard updates

5. **Restart and monitor** (5 min)
   - Restart production server
   - Monitor logs for 15 minutes
   - Watch for successful test donation

6. **Announce launch** (30 min)
   - Update website with donation call-to-action
   - Social media announcement (optional)
   - Email supporters (optional)

### Detailed Activation Guide

See: `docs/KOHA_STRIPE_SETUP.md` (sections 1-7)

---

## Troubleshooting

### Issue: Server won't start after deployment

```bash
# Check for syntax errors
cd /var/www/tractatus
node -c src/services/koha.service.js
node -c src/controllers/koha.controller.js

# Check logs
sudo journalctl -u tractatus -n 100 --no-pager
```

### Issue: API returns 404 for Koha endpoints

```bash
# Verify routes file deployed
ls -la /var/www/tractatus/src/routes/koha.routes.js

# Verify routes registered
grep -r "koha" /var/www/tractatus/src/routes/index.js
```

### Issue: Coming soon overlay not showing

```bash
# Verify overlay script deployed
ls -la /var/www/tractatus/public/js/components/coming-soon-overlay.js

# Check browser console for JS errors
# Open DevTools (F12) and check Console tab
```

### Issue: Database collection not created

```bash
# Connect to MongoDB
mongosh tractatus_prod

# Check collections
show collections

# Check if init script ran
db.koha_donations.countDocuments()

# Re-run if needed
exit
node scripts/init-koha.js
```

---

## Key Files Reference

**Deployment Guide:**
- `/home/theflow/projects/tractatus/docs/KOHA_PRODUCTION_DEPLOYMENT.md`

**Stripe Setup Guide:**
- `/home/theflow/projects/tractatus/docs/KOHA_STRIPE_SETUP.md`

**Deployment Script:**
- `/home/theflow/projects/tractatus/scripts/deploy-koha-to-production.sh`

**Database Init Script:**
- `/home/theflow/projects/tractatus/scripts/init-koha.js`

**Key Backend Files:**
- `src/services/koha.service.js` - Stripe integration logic
- `src/controllers/koha.controller.js` - API endpoints (has PLACEHOLDER check)
- `src/models/Donation.model.js` - Database schema
- `src/config/currencies.config.js` - Currency conversion

**Key Frontend Files:**
- `public/koha.html` - Main donation form
- `public/koha/transparency.html` - Public dashboard
- `public/koha/success.html` - Thank you page
- `public/js/components/coming-soon-overlay.js` - Overlay (remove for activation)

---

## Summary

**Current Status:**
- ✅ All code committed and ready
- ✅ Documentation complete
- ✅ Automated deployment script ready
- ⏳ Awaiting deployment to production (Steps 1-8 above)
- ⏳ Awaiting Stripe keys next week

**Total Deployment Time:** ~20 minutes
**Total Activation Time (when Stripe ready):** 2-3 hours

**Contact:** john.stroh.nz@pm.me

---

*Last Updated: 2025-10-08*
