tractatus/docs/STRIPE_CUSTOMER_PORTAL_NEXT_STEPS.md
TheFlow 2298d36bed fix(submissions): restructure Economist package and fix article display
- Create Economist SubmissionTracking package correctly:
  * mainArticle = full blog post content
  * coverLetter = 216-word SIR— letter
  * Links to blog post via blogPostId
- Archive 'Letter to The Economist' from blog posts (it's the cover letter)
- Fix date display on article cards (use published_at)
- Target publication already displaying via blue badge

Database changes:
- Make blogPostId optional in SubmissionTracking model
- Economist package ID: 68fa85ae49d4900e7f2ecd83
- Le Monde package ID: 68fa2abd2e6acd5691932150

Next: Enhanced modal with tabs, validation, export

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-24 08:47:42 +13:00

443 lines
12 KiB
Markdown

# Stripe Customer Portal - Implementation Summary & Next Steps
**Date**: 2025-10-18
**Status**: Code Complete - Awaiting Manual Dashboard Configuration
**Priority**: Bank account name = URGENT (before Oct 25), Portal = Medium
---
## ✅ COMPLETED WORK
### 1. Customer Portal Code Implementation
All code for the Stripe Customer Portal integration has been completed and is ready to deploy:
#### Backend Changes:
- **src/controllers/koha.controller.js** (lines 253-307)
- New `createPortalSession` endpoint
- Finds customer by email
- Creates Stripe billing portal session
- Returns portal URL for redirect
- **src/routes/koha.routes.js** (lines 51-55)
- Added POST /api/koha/portal route
- Applied rate limiting (10 requests/hour)
#### Frontend Changes:
- **public/koha.html** (lines 295-332)
- "Manage Your Subscription" section
- Email input with validation
- Loading and error states
- Accessible markup
- **public/js/koha-donation.js** (lines 291-415)
- `handleManageSubscription()` function
- Email validation
- API integration
- Portal redirect logic
- **public/js/components/navbar.js** (lines 98-100)
- Added "🤝 Support (Koha)" link to navigation menu
- **public/locales/en/koha.json** (lines 65-71, 85)
- Internationalization for portal UI
- Updated FAQ with cancellation instructions
### 2. Verification & Diagnostic Tools Created
#### Bank Account Verification:
- **scripts/check-stripe-bank-account.js**
- Node.js script to check account configuration
- Shows account type, country, email
- Provides guidance for manual verification
- **/tmp/check-stripe-bank-name.sh**
- Shell script diagnostic
- Checks balance and payout status
- Step-by-step dashboard checklist
#### Customer Portal Verification:
- **scripts/verify-stripe-portal.js**
- Comprehensive portal configuration checker
- Lists all configured features
- Validates against requirements
- Provides checklist for missing features
- Works for both test and live mode
### 3. Documentation Created
- **STRIPE_PORTAL_CONFIGURATION_STEPS.md** - Detailed 8-step guide
- **STRIPE_FIX_FOR_JOHN_STROH.md** - Specific fix for bank account name
- **FIND_STRIPE_BANK_HOLDER_NAME.md** - Finding the dashboard setting
- **STRIPE_PAYOUT_DIAGNOSTIC.md** - Troubleshooting guide
- **STRIPE_BANK_NAME_MATCHING.md** - TSB requirements
- **STRIPE_ACCOUNT_NAME_FIX.md** - General account name fix guide
### 4. Environment Cleanup
- ✅ Background Stripe webhook listeners closed
- ✅ No orphaned processes
- ✅ Development server running on port 9000
---
## ⚠️ MANUAL TASKS REQUIRED
The following tasks **cannot** be automated and require manual action in the Stripe Dashboard:
### URGENT - Task 1: Update Bank Account Holder Name (Before Oct 25)
**Why Urgent**: Your first payout ($4.56 NZD) becomes available on Oct 25. If the bank account holder name doesn't match "John Geoffrey Stroh", TSB will reject the payout.
**Current Status**:
- ✅ Stripe account name: "John Geoffrey Stroh" (DONE)
- ❌ Bank account holder name: Needs verification/update
**How to Fix**:
1. Open: https://dashboard.stripe.com/settings/payouts
2. Scroll to: "Bank accounts and debit cards" section
3. Find: NZD account ending in "6-85"
4. Click: On the account row
5. Look for: "Account holder name" field
6. Should say: "John Geoffrey Stroh" ✅
7. If not: Change it to "John Geoffrey Stroh"
**If you can't edit the field**:
- Option A: Remove bank account, then re-add with correct name
- Account number: 15-3959-0667036-85
- Currency: NZD
- Holder: John Geoffrey Stroh
- Option B: Contact Stripe Support
- https://dashboard.stripe.com/support
- Request: "Update bank account holder name to 'John Geoffrey Stroh' for NZD account ending in 6-85"
**Verify After**:
```bash
/tmp/check-stripe-bank-name.sh
```
**Deadline**: Before October 25, 2025 (first payout date)
---
### Task 2: Configure Customer Portal (Test Mode)
**Time Required**: ~10 minutes
**Priority**: Medium (needed before testing locally)
**Steps**:
1. **Open Test Mode Dashboard**:
- URL: https://dashboard.stripe.com/test/settings/billing/portal
2. **Enable Features** (click each checkbox):
- ☐ Customer can edit email address
- ☐ Customer can update payment methods
- ☐ Customer can cancel subscriptions
- ☐ Customer can view invoice history
3. **Configure Cancellation Survey**:
- ☐ Enable "Ask why they're cancelling"
- ☐ Question 1: "Why are you cancelling?"
- Options:
- Too expensive
- No longer need it
- Found alternative
- Other
- ☐ Question 2: "How can we improve?" (optional text field)
4. **Business Information**:
- ☐ Business name: `Tractatus AI Safety Framework`
- ☐ Support email: `support@agenticgovernance.digital`
- ☐ Privacy policy: (optional)
- ☐ Terms of service: (optional)
5. **Save Configuration**:
- ☐ Click "Save" or "Activate"
**Verify After**:
```bash
node scripts/verify-stripe-portal.js
```
Expected output: All checkboxes ✅
**Troubleshooting**:
- If survey doesn't appear: Check "Subscription cancellation" is enabled
- If can't save: Ensure all required fields filled
- Full guide: docs/STRIPE_PORTAL_CONFIGURATION_STEPS.md
---
### Task 3: Configure Customer Portal (Live Mode)
**Time Required**: ~10 minutes
**Priority**: Medium (needed before production deployment)
**Steps**:
Same as Task 2, but using live mode dashboard:
- URL: https://dashboard.stripe.com/settings/billing/portal
**Important**: Configuration must match test mode exactly.
**Verify After**:
```bash
STRIPE_SECRET_KEY=sk_live_... node scripts/verify-stripe-portal.js
```
---
## 🧪 TESTING (After Manual Tasks Complete)
### Local Testing Workflow:
1. **Ensure Development Server Running**:
```bash
# If not running:
npm start
```
2. **Test Customer Portal Access**:
- Open: http://localhost:9000/koha.html
- Scroll to: "Manage Your Subscription" section
- Enter email: (use email from test donation)
- Click: "Manage"
- Expected: Redirect to Stripe Customer Portal
- Verify: Can view subscription details
- Verify: Can update payment method
- Verify: Can cancel subscription
- Verify: Cancellation survey appears
3. **Test Cancellation Flow**:
- In portal, click "Cancel subscription"
- Should show exit survey:
- "Why are you cancelling?" (radio buttons)
- "How can we improve?" (optional text)
- Complete survey
- Confirm cancellation
- Verify: Redirected back to koha.html
- Verify: Subscription shows as cancelled
4. **Verify Navigation**:
- Go to: http://localhost:9000
- Click: Hamburger menu (☰)
- Verify: "🤝 Support (Koha)" link appears
- Click: Link
- Verify: Redirects to koha.html
5. **Check Logs**:
```bash
tail -f /tmp/server-restart.log
```
- Look for: `[KOHA] Customer portal session created for [email]`
- Should be: INFO level (not ERROR)
### Test Checklist:
- ☐ Portal loads without errors
- ☐ Email validation works
- ☐ Invalid email shows error message
- ☐ Valid email redirects to Stripe portal
- ☐ Cancellation survey appears
- ☐ All survey options work
- ☐ Optional text field works
- ☐ Return URL redirects to koha.html
- ☐ Navbar link works
- ☐ No console errors
- ☐ No server errors in logs
---
## 🚀 DEPLOYMENT
### Prerequisites:
- ✅ Code changes complete (DONE)
- ☐ Bank account holder name updated
- ☐ Customer Portal configured (test mode)
- ☐ Customer Portal configured (live mode)
- ☐ Local testing passed
### Deployment Steps:
1. **Verify Production Server Status**:
```bash
ssh -i ~/.ssh/tractatus_deploy ubuntu@vps-93a693da.vps.ovh.net "systemctl status tractatus"
```
2. **Deploy to Production**:
```bash
./scripts/deploy-full-project-SAFE.sh
```
This will deploy:
- src/controllers/koha.controller.js
- src/routes/koha.routes.js
- public/koha.html
- public/js/koha-donation.js
- public/js/components/navbar.js
- public/locales/en/koha.json
3. **Verify Deployment**:
- Check: https://agenticgovernance.digital/koha.html
- Verify: "Manage Your Subscription" section appears
- Check: Navbar menu shows Koha link
- Test: Portal access with real customer email
4. **Monitor Logs**:
```bash
ssh -i ~/.ssh/tractatus_deploy ubuntu@vps-93a693da.vps.ovh.net "tail -f /var/log/tractatus/app.log"
```
Look for:
- ✅ No errors on page load
- ✅ Portal sessions created successfully
- ✅ No 500 errors
### Production Testing:
- ☐ Use LIVE mode credentials
- ☐ Test with real customer email (from actual donation)
- ☐ Verify portal redirect works
- ☐ Verify cancellation survey appears (don't complete it!)
- ☐ Test return URL redirect
- ☐ Monitor logs for errors
---
## 📊 VERIFICATION COMMANDS
### Check Bank Account Configuration:
```bash
# Shell diagnostic
/tmp/check-stripe-bank-name.sh
# Node.js diagnostic
node scripts/check-stripe-bank-account.js
```
### Check Customer Portal Configuration:
```bash
# Test mode
node scripts/verify-stripe-portal.js
# Live mode
STRIPE_SECRET_KEY=sk_live_... node scripts/verify-stripe-portal.js
```
### Check Server Status:
```bash
# Local
curl http://localhost:9000/api/koha/transparency
# Production
curl https://agenticgovernance.digital/api/koha/transparency
```
### Test Portal Endpoint:
```bash
# Test mode (local)
curl -X POST http://localhost:9000/api/koha/portal \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com"}'
# Should return portal URL or 404 if no subscription
```
---
## ⏰ TIMELINE
### Immediate (Today):
1. Update bank account holder name (URGENT - before Oct 25)
2. Configure Customer Portal (test mode)
3. Test locally
4. Configure Customer Portal (live mode)
### Tomorrow or Next:
5. Deploy to production
6. Monitor first real customer using portal
7. Verify payout succeeds (Oct 25-28)
### Oct 25-28:
- First payout attempt (if bank name correct: ✅ succeeds)
- Money arrives in TSB account Oct 27-30
---
## 📋 SUPPORT INFORMATION
### If Payout Fails:
1. Check: Bank account holder name matches "John Geoffrey Stroh"
2. Check: TSB account is active and accepting payments
3. Contact: Stripe Support (https://dashboard.stripe.com/support)
4. Contact: TSB (0800 872 000)
### If Portal Doesn't Work:
1. Verify: Portal configured in correct mode (test/live)
2. Check: STRIPE_SECRET_KEY matches mode
3. Verify: Customer has active subscription
4. Check: Email matches subscription email exactly
5. Review: Server logs for errors
### If Tests Fail:
1. Clear browser cache
2. Check: .env has correct keys
3. Verify: Server running on port 9000
4. Check: MongoDB running on port 27017
5. Review: Console errors (F12)
---
## 📖 REFERENCE DOCUMENTS
- **Configuration**: docs/STRIPE_PORTAL_CONFIGURATION_STEPS.md
- **Bank Account Fix**: docs/STRIPE_FIX_FOR_JOHN_STROH.md
- **Finding Settings**: docs/FIND_STRIPE_BANK_HOLDER_NAME.md
- **Troubleshooting**: docs/STRIPE_PAYOUT_DIAGNOSTIC.md
- **TSB Requirements**: docs/STRIPE_BANK_NAME_MATCHING.md
---
## ✅ CURRENT STATUS SUMMARY
| Task | Status | Action Required |
|------|--------|----------------|
| Code Implementation | ✅ Complete | None - ready to deploy |
| Verification Tools | ✅ Complete | None - ready to use |
| Documentation | ✅ Complete | None - available in docs/ |
| Bank Account Name | ⚠️ Pending | YOU - Update in dashboard |
| Portal Config (Test) | ⚠️ Pending | YOU - Configure in dashboard |
| Portal Config (Live) | ⚠️ Pending | YOU - Configure in dashboard |
| Local Testing | ⏳ Blocked | Waiting for portal config |
| Production Deployment | ⏳ Blocked | Waiting for all above |
---
## 🎯 NEXT ACTIONS FOR YOU
**Priority 1 (URGENT - Before Oct 25)**:
- [ ] Update Stripe bank account holder name to "John Geoffrey Stroh"
- [ ] Verify using: `/tmp/check-stripe-bank-name.sh`
**Priority 2 (This Week)**:
- [ ] Configure Customer Portal (test mode)
- [ ] Verify using: `node scripts/verify-stripe-portal.js`
- [ ] Test locally
- [ ] Configure Customer Portal (live mode)
**Priority 3 (After Testing)**:
- [ ] Deploy to production: `./scripts/deploy-full-project-SAFE.sh`
- [ ] Monitor production logs
- [ ] Test with real customer email
---
**Last Updated**: 2025-10-18
**Code Complete**: Yes ✅
**Ready to Deploy**: After manual dashboard tasks ✅
**Estimated Time to Complete**: 30 minutes of dashboard work