🚀 OmniButler Production Readiness Checklist¶
🔥 HIGH PRIORITY ITEMS (Start Immediately)¶
1. 🟢 Domain Registration & SSL Setup (1-2 days)¶
Estimated Time: 1-2 days
Step-by-Step Instructions:¶
1. Register omnibutler.com domain (DONE)
- Use Google Domains, Namecheap, or your preferred registrar
- Enable domain privacy protection
2. Set up DNS in Google Cloud DNS
# Create DNS zone
gcloud dns managed-zones create omnibutler-production \
--description="Production DNS zone for omnibutler.com" \
--dns-name="omnibutler.com"
# Get name servers and update at your registrar
gcloud dns managed-zones describe omnibutler-production
3. Configure DNS records
# Add A record for apex domain (optional)
gcloud dns record-sets transaction start --zone=omnibutler-production
gcloud dns record-sets transaction add YOUR_LOAD_BALANCER_IP \
--name=omnibutler.com. --ttl=300 --type=A --zone=omnibutler-production
# Add CNAME for app subdomain (Firebase Hosting)
gcloud dns record-sets transaction add app.omnibutler.com.web.app. \
--name=app.omnibutler.com. --ttl=300 --type=CNAME --zone=omnibutler-production
gcloud dns record-sets transaction execute --zone=omnibutler-production
- Set up SSL certificates
- Firebase Hosting will auto-generate SSL for app.omnibutler.com
- Cloud Run will auto-generate SSL for api.omnibutler.com when you map the domain
Completion Criteria:
- [ ] Domain registered and DNS configured
- [ ] SSL certificates active for all subdomains
- [ ] DNS propagation complete (check with dig omnibutler.com)
2. 🟡 Production GCP Project Setup (1 day)¶
Estimated Time: 1 day
Step-by-Step Instructions:¶
-
Create Production GCP Project
# Create project gcloud projects create omnibutler-production --name="OmniButler Production" # Set as current project gcloud config set project omnibutler-production # Link billing account gcloud billing projects link omnibutler-production \ --billing-account=YOUR_BILLING_ACCOUNT_ID -
Enable Required APIs
gcloud services enable \ run.googleapis.com \ cloudbuild.googleapis.com \ cloudtasks.googleapis.com \ cloudscheduler.googleapis.com \ artifactregistry.googleapis.com \ secretmanager.googleapis.com \ firebase.googleapis.com \ firestore.googleapis.com \ redis.googleapis.com -
Create Service Accounts
# Deployment service account gcloud iam service-accounts create github-deployment-production \ --description="GitHub deployment service account for production" \ --display-name="GitHub Deployment Production" # Grant necessary roles gcloud projects add-iam-policy-binding omnibutler-production \ --member="serviceAccount:github-deployment-production@omnibutler-production.iam.gserviceaccount.com" \ --role="roles/run.admin" gcloud projects add-iam-policy-binding omnibutler-production \ --member="serviceAccount:github-deployment-production@omnibutler-production.iam.gserviceaccount.com" \ --role="roles/cloudbuild.builds.editor" gcloud projects add-iam-policy-binding omnibutler-production \ --member="serviceAccount:github-deployment-production@omnibutler-production.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" -
Create Artifact Registry
gcloud artifacts repositories create omnibutler-backend \ --repository-format=docker \ --location=europe-west1 \ --description="Production Docker repository" -
Set up Cloud Tasks queues
gcloud tasks queues create email-sync-production \ --location=europe-west1 \ --max-attempts=5 gcloud tasks queues create transaction-sync-production \ --location=europe-west1 \ --max-attempts=5 gcloud tasks queues create whatsapp-messages-production \ --location=europe-west1 \ --max-attempts=3 \ --max-dispatches-per-second=100
Completion Criteria: - [ ] Production GCP project created and configured - [ ] All required APIs enabled - [ ] Service accounts created with proper permissions - [ ] Artifact Registry repository created - [ ] Cloud Tasks queues created
3. 🟡 Production OpenAI & LLM Setup (2-3 days)¶
Estimated Time: 2-3 days
Step-by-Step Instructions:¶
- Upgrade OpenAI API to Production
- Go to https://platform.openai.com/account/billing
- Add payment method and set up billing
- Create new API key specifically for production
-
Set usage limits and alerts:
Recommended limits for production: - Hard limit: $200/month initially - Soft limit: $150/month - Email alerts at $100/month -
LangSmith Production Setup
- Go to https://smith.langchain.com
- Create new project: "omnibutler-production"
- Generate production API key
-
Configure project settings for production tracing
-
TogetherAI Production Setup
- Go to https://api.together.xyz/settings/api-keys
- Generate production API key
-
Set up usage monitoring and limits
-
Store API Keys in Secret Manager
# OpenAI echo "sk-prod-YOUR_PRODUCTION_KEY" | gcloud secrets create openai-api-key-production --data-file=- # LangSmith echo "lsv2_pt_YOUR_PRODUCTION_KEY" | gcloud secrets create langsmith-api-key-production --data-file=- # TogetherAI echo "YOUR_PRODUCTION_KEY" | gcloud secrets create togetherai-api-key-production --data-file=-
Completion Criteria: - [ ] OpenAI production API key with billing setup - [ ] LangSmith production project and API key - [ ] TogetherAI production API key - [ ] All keys stored in Secret Manager with proper access controls
4. 🟡 Production Firebase Project Setup (2-3 days)¶
Estimated Time: 2-3 days
Step-by-Step Instructions:¶
1. Create Production Firebase Project
- Go to https://console.firebase.google.com
- Click "Create a project"
- Project name: "OmniButler Production"
- Link to existing GCP project: omnibutler-production
2. Enable Required Services
- Authentication (with Google provider)
- Firestore Database
- Hosting (for frontend)
3. Configure Authentication
# Enable Google Auth provider
# Go to Authentication > Sign-in method > Google > Enable
# Add authorized domains: omnibutler.com, app.omnibutler.com
4. Set up Firestore
- Create Firestore database in native mode
- Region: europe-west3 (matches your other services)
- Configure security rules for production
5. Configure Hosting
# Add custom domain
firebase hosting:sites:create omnibutler-production
firebase target:apply hosting production omnibutler-production
# This will require DNS verification
- Generate Service Account Key
# Create and download service account key gcloud iam service-accounts keys create firebase-admin-key.json \ --iam-account=firebase-adminsdk-SERVICE_ID@omnibutler-production.iac.gserviceaccount.com # Store in Secret Manager gcloud secrets create firebase-admin-key-production --data-file=firebase-admin-key.json # Clean up local file rm firebase-admin-key.json
Completion Criteria: - [ ] Production Firebase project created and linked to GCP - [ ] Authentication configured with production domains - [ ] Firestore database created with production security rules - [ ] Custom domain configured for hosting - [ ] Service account key generated and stored securely
5. 🟢 Plaid Production Environment ✅ COMPLETED¶
Status: Production access already granted
Next Steps: - [x] Production access confirmed - [ ] Store production credentials in Secret Manager:
# Store production credentials in Secret Manager
echo "YOUR_PROD_CLIENT_ID" | gcloud secrets create plaid-client-id-production --data-file=-
echo "YOUR_PROD_SECRET" | gcloud secrets create plaid-secret-production --data-file=-
https://api.omnibutler.com/api/v1/plaid/webhook
- [ ] Test webhook signature verification
- [ ] Integration tested in production environment
6. 🔴 Google OAuth Production Approval (2-6 weeks)¶
Estimated Time: 2-6 weeks (longest approval process)
Step-by-Step Instructions:¶
0. Update Legal Documents First (CRITICAL) ✅ COMPLETED July 25, 2025
- ✅ Privacy Policy updated with:
- Clear Gmail data usage explanation
- Strong security messaging ("We NEVER see bank passwords")
- AI limitations disclaimer
- EU data hosting emphasis
- Proper WhatsApp data collection description
- ✅ Terms of Service updated with:
- ALL CAPS financial advice disclaimer
- Clear Plaid security explanation
- AI limitations and accuracy warnings
- Family sharing terms (up to 6 members)
- Modern arbitration clause with opt-out
- ✅ DEPLOYED to https://app.omnibutler.com/privacy-policy and /terms-of-service
- Updated documents: /docs/PRIVACY_POLICY_UPDATED.md and /docs/TERMS_OF_SERVICE_UPDATED.md
- Prepare OAuth Consent Screen
- Go to https://console.cloud.google.com
- Select
omnibutler-productionproject -
Navigate to APIs & Services > OAuth consent screen
-
Configure Production Consent Screen
Application name: OmniButler User support email: support@omnibutler.com Application home page: https://app.omnibutler.com Application privacy policy: https://app.omnibutler.com/privacy-policy Application terms of service: https://app.omnibutler.com/terms-of-service Authorized domains: omnibutler.com -
Add Required Scopes
Required scopes: - openid - email - profile - https://www.googleapis.com/auth/gmail.readonly -
Domain Verification
# Add domain verification # Go to Google Search Console # Add property: omnibutler.com # Verify ownership via DNS record or HTML file -
Submit for Verification
- Provide detailed app description
- Upload app screenshots/demo video
- Explain why you need Gmail access
-
Submit privacy policy and terms of service links
-
Create Production OAuth Client
# After approval, create OAuth client # Go to APIs & Services > Credentials > Create OAuth Client ID # Application type: Web application # Authorized redirect URIs: # - https://app.omnibutler.com/auth/callback # - https://omnibutler.com/auth/callback
Completion Criteria: - [ ] Domain ownership verified - [ ] OAuth consent screen configured and submitted - [ ] Gmail API scopes approved - [ ] Production OAuth client created - [ ] Credentials stored in Secret Manager
7. 🔴 WhatsApp Business API Application (2-4 weeks)¶
Estimated Time: 2-4 weeks (complex approval process)
Step-by-Step Instructions:¶
- Prepare Business Documentation
- Business registration certificate
- Tax identification documents
- Proof of business address
- Business bank statement
-
Website with clear business information
-
Apply for WhatsApp Business API
- Go to https://www.twilio.com/whatsapp
- Start WhatsApp Business API application
-
Or use Facebook Business Manager route:
- Go to https://business.facebook.com
- Navigate to WhatsApp Manager
- Request access to WhatsApp Business API
-
Complete Business Verification
Required Information: - Legal business name: [Your Business Name] - Business address: [Physical address] - Business phone number: [Must be different from WhatsApp number] - Business website: https://omnibutler.com - Business description: Personal financial management assistant - Use case: Customer support and financial notifications -
Phone Number Verification
- Must be a real phone number (not VoIP)
- Cannot be previously used for WhatsApp personal account
- Consider getting dedicated business line
-
Must be able to receive SMS for verification
-
Business Profile Setup
Business Profile: - Display name: OmniButler - Category: Financial Services / Technology - Description: AI-powered personal financial assistant - Website: https://omnibutler.com - Business hours - Profile photo (professional logo) -
Template Message Approval
- Create template messages for notifications
- Submit for approval (each template needs approval)
-
Examples:
Template 1: Account balance alert Template 2: Transaction notification Template 3: Bill reminder -
Webhook Configuration
# Configure webhook URL Webhook URL: https://api.omnibutler.com/api/v1/whatsapp/webhook Verify Token: omnibutler_whatsapp_webhook_token # Test webhook connectivity curl -X GET "https://api.omnibutler.com/api/v1/whatsapp/webhook?hub.mode=subscribe&hub.challenge=test&hub.verify_token=omnibutler_whatsapp_webhook_token" -
After Approval
# Store production credentials echo "YOUR_PROD_ACCOUNT_SID" | gcloud secrets create twilio-account-sid-production --data-file=- echo "YOUR_PROD_AUTH_TOKEN" | gcloud secrets create twilio-auth-token-production --data-file=- echo "YOUR_WHATSAPP_API_TOKEN" | gcloud secrets create whatsapp-api-token-production --data-file=-
Completion Criteria: - [ ] Business verification completed - [ ] WhatsApp Business API access approved - [ ] Production phone number verified and configured - [ ] Business profile approved and live - [ ] Template messages approved - [ ] Webhook configured and tested - [ ] Production credentials stored securely
🛠️ Features to Implement (Based on Legal Documents)¶
8. 🟡 User Data Rights Implementation (1-2 weeks)¶
Features Promised in Privacy Policy/Terms but Need Implementation:
8.1 Data Export Functionality¶
- Current: No dedicated data export endpoint found
- Required: "Download all your data anytime from settings"
- Implementation Tasks:
- Create
/api/v1/user/exportendpoint - Export user profile, transactions, emails, settings
- Support standard formats (JSON, CSV)
- Include all data from Firestore, Turso, and Redis
8.2 Account Deletion Enhancement¶
- Current: Basic account deletion exists in
user_bank_accounts.py - Required: Complete account deletion with 30-day timeline
- Implementation Tasks:
- Create
/api/v1/user/delete-accountendpoint - Delete from all databases (Firestore, Turso, Redis)
- Implement 30-day grace period with soft delete
- Delete conversation history immediately
- Handle family member data properly
8.3 Conversation History Auto-Expiry¶
- Current: Redis TTL exists but no user settings
- Required: "Auto-expires based on your settings"
- Implementation Tasks:
- Add conversation retention settings to user profile
- Create UI for users to configure TTL
- Implement variable TTL based on user preference
- Default to 14 days, allow 7-90 day range
8.4 Family Member Management¶
- Current: Family sharing exists but limited controls
- Required: "Revoke access anytime", "Members can leave"
- Implementation Tasks:
- Add
/api/v1/family/leaveendpoint - Add
/api/v1/family/revoke-memberendpoint - Implement proper data visibility controls
- Handle historical shared data on member removal
8.5 Connection Management UI¶
- Current: Backend support exists
- Required: "Disconnect bank accounts instantly"
- Implementation Tasks:
- Ensure UI has disconnect buttons for each connection
- Add Gmail revoke access button
- Add WhatsApp unlink button
- Show connection status clearly
8.6 Notifications System¶
- Current: Balance alert service exists but not user-facing
- Required: "Alert you about important financial events"
- Implementation Tasks:
- Create notification preferences in user profile
- Implement email notifications via SendGrid/similar
- Add in-app notification system
- Create notification types: balance alerts, large transactions, bills due
8.7 Privacy & Security Features¶
- Current: Database isolation exists
- Required: "24/7 security monitoring", "Report suspicious activity"
- Implementation Tasks:
- Implement security event logging
- Create suspicious activity detection rules
- Add "Report Issue" feature in app
- Set up alerting for security events
8.8 Data Correction Features¶
- Current: No dedicated correction endpoints
- Required: "Update incorrect information directly in the app"
- Implementation Tasks:
- Allow transaction recategorization
- Enable custom account names
- Add notes/tags to transactions
- Profile information update endpoint
8.9 Subscription & Billing¶
- Current: No subscription management found
- Required: Terms mention tiers, billing, refunds
- Implementation Tasks:
- Integrate Stripe for subscription management
- Implement free tier limits
- Add upgrade/downgrade flows
- Handle prorated refunds
- Implement usage tracking
8.10 Legal Compliance Features¶
- Current: Basic implementation
- Required: CCPA rights, audit logs
- Implementation Tasks:
- Add CCPA request handling workflow
- Implement comprehensive audit logging
- Add data retention automation
- Create compliance dashboard
Estimated Total Time: 3-4 weeks with 2 developers
Priority Order: 1. Data Export (legally required) 2. Account Deletion Enhancement (legally required) 3. Family Member Management (core feature) 4. Subscription & Billing (revenue critical) 5. Notifications (user experience) 6. Other features
📊 Progress Tracking¶
Quick Wins (Can complete this week)¶
- Domain Registration & SSL Setup
- Production GCP Project Setup
- Production OpenAI & LLM Setup
- Production Firebase Project Setup
Medium Term (2-4 weeks)¶
- Plaid Production Environment (Already have access)
- Google OAuth Production Approval (Application submitted)
- WhatsApp Business API Application (Start immediately!)
Long Term Dependencies¶
- All external service approvals received
- Security testing completed
- Load testing completed
- Production deployment pipeline ready
- All promised features implemented (Section 8)
- Legal compliance features complete
🚨 Critical Path Analysis¶
The longest pole items that should be started IMMEDIATELY:
- Google OAuth Approval - Can take up to 6 weeks (✅ Application submitted)
- WhatsApp Business API - Can take up to 4 weeks (⚠️ Not started - START NOW!)
Plaid Production - Already have access
Recommended Action Plan: - Today: Start Google OAuth and WhatsApp applications - This Week: Complete infrastructure setup (GCP, domains, etc.) - Next Week: Submit Plaid application - Week 3-4: Complete configuration and testing while waiting for approvals - Week 4-8: Approvals should come through, complete integration testing - Week 8-10: Production deployment and go-live
💡 Pro Tips¶
- Start approvals immediately - These are your critical path
- Prepare all documentation upfront - Approvals require comprehensive docs
- Set up staging first - Test the entire flow before production
- Have backup plans - Consider alternative providers if approvals are delayed
- Document everything - You'll need detailed docs for compliance and approvals
- Implement promised features - Don't launch with features mentioned in legal docs but not built
- Test data rights - Ensure GDPR/CCPA compliance features work before launch
This checklist should be updated as items are completed and new requirements are discovered.