Go-Live Runbook
Go-Live Runbook
Project: Drop Version: 0.1.0 Date: 2026-02-23 Author: Platform Architect (AI) Status: In Review Reviewers: Alem Bašić (CEO)
Document History
| Version | Date | Author | Changes |
|---|---|---|---|
| 0.1 | 2026-02-23 | Platform Architect (AI) | Initial draft for Drop production go-live |
1. Overview
This runbook covers the full procedure for taking Drop from its current staging state to production launch. Drop is currently deployed on AWS App Runner (eu-west-1) with RDS PostgreSQL, but has not yet launched publicly. This runbook covers the steps required to open Drop to real Norwegian users.
Go-Live Owner: Alem Bašić (CEO) Go-Live Date: TBD Rollback Authority: Alem Bašić
Prerequisites for go-live:
- BankID OIDC client credentials obtained and configured
- Open Banking provider selected, contracted, and integrated
- Sumsub production account configured and webhooks verified
-
getdrop.nodomain configured with DNS pointing to App Runner - SSL certificate provisioned
- BetterStack monitors configured (3 monitors active)
- Slack
#drop-opswebhook configured - RDS security group locked down (no public access)
- All feature flags reviewed and set correctly
- Final security audit completed
2. Pre-Launch Checklist (T-7 days)
2.1 Infrastructure
- AWS App Runner service running with
RUNNINGstatus - RDS PostgreSQL
drop-dbinstance available (status:available) - ECR repository contains latest production-tagged image
- AWS Secrets Manager contains all required secrets:
-
JWT_SECRET(min 32 chars, generated viaopenssl rand -base64 48) -
DATABASE_URL(PostgreSQL connection string) -
BANKID_CLIENT_IDandBANKID_CLIENT_SECRET -
SUMSUB_APP_TOKENandSUMSUB_SECRET_KEY -
SLACK_WEBHOOK_URL
-
2.2 Application
-
GET https://9ef3szvvsb.eu-west-1.awsapprunner.com/api/healthreturns{"status":"ok"} -
NEXT_PUBLIC_SERVICE_MODE=productionconfirmed in App Runner env -
BANKID_MOCKis NOT set (unset in production) - All CI pipeline checks passing on
mainbranch (lint, typecheck, tests, E2E, docker-build) - Database schema up-to-date (all tables exist)
- Demo seed data disabled (
NODE_ENV=production)
2.3 External Services
- BankID OIDC: test login with real Norwegian BankID succeeds
- BankID callback URL matches:
https://getdrop.no/api/auth/bankid/callback - Sumsub: test KYC flow with real document succeeds end-to-end
- Sumsub webhook: POST to
/api/kyc/webhookwith valid signature processed correctly - Open Banking: test balance read (AISP) succeeds from real Norwegian bank account
- Open Banking: test payment initiation (PISP) succeeds in sandbox
2.4 Domain & SSL
-
getdrop.noDNSArecord points to App Runner URL (or CloudFront if CDN added) - SSL certificate valid for
getdrop.noandwww.getdrop.no - HTTPS redirect enabled (HTTP → HTTPS)
- HSTS header present in response:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
2.5 Monitoring
- BetterStack:
Drop Health Checkmonitor configured, status GREEN - BetterStack:
Drop Landing Pagemonitor configured, status GREEN - BetterStack: escalation policy assigned to all monitors
- Slack
#drop-ops: test alert received successfully - CloudWatch: App Runner logs streaming to
/aws/apprunner/drop-web/.../application - Public status page live:
https://drop-status.betteruptime.com
3. Go-Live Day Procedure (T-0)
Phase 1: Final Verification (T-2h)
# 1. Verify App Runner service
aws apprunner describe-service \
--service-arn arn:aws:apprunner:eu-west-1:324480209768:service/drop-web/8e45b0d335304487a1880f4e32d6aeec \
--query 'Service.Status' --output text --region eu-west-1
# Expected: RUNNING
# 2. Health check
curl -s https://getdrop.no/api/health | jq
# Expected: { "data": { "status": "ok", "checks": { "db": { "status": "pass" } } } }
# 3. Verify RDS
aws rds describe-db-instances \
--db-instance-identifier drop-db \
--query 'DBInstances[0].DBInstanceStatus' --output text --region eu-west-1
# Expected: available
# 4. Verify latest backup exists
aws rds describe-db-snapshots \
--db-instance-identifier drop-db --region eu-west-1 \
--query 'DBSnapshots[?SnapshotType==`automated`]|sort_by(@,&SnapshotCreateTime)[-1].SnapshotCreateTime' \
--output text
# Expected: timestamp from last 24h
# 5. Create pre-launch manual snapshot
aws rds create-db-snapshot \
--db-instance-identifier drop-db \
--db-snapshot-identifier drop-db-pre-launch-$(date +%Y%m%d-%H%M) \
--region eu-west-1
Phase 2: BankID Callback URL Verification (T-1h)
# Verify BankID client configuration
# Log in at BankID developer portal and confirm:
# - Callback URL: https://getdrop.no/api/auth/bankid/callback
# - Mobile callback: drop://auth/callback
# - Scopes: openid profile
Phase 3: Soft Launch (T-0, invite-only)
- Configure App Runner environment:
BANKID_MOCK=(unset — real BankID) - Set
NEXT_PUBLIC_APP_URL=https://getdrop.no - Deploy latest production image
- Verify health check:
curl https://getdrop.no/api/health - Conduct a live end-to-end test with Alem's real BankID:
- Navigate to
https://getdrop.no - Click "Logg inn med BankID"
- Authenticate with real BankID
- Verify dashboard loads with bank account balance (AISP)
- Verify KYC status shows
approved(BankID = verified) - Test disclosure endpoint before a remittance
- Test QR payment scan (if merchant test account exists)
- Navigate to
Phase 4: BetterStack Maintenance Window — Close (T+30min)
After confirming system is stable:
- Close any BetterStack maintenance window (if created for go-live)
- Verify BetterStack monitors show green
- Verify Slack
#drop-opsreceived startup alert
Phase 5: Public Launch (T+1h, if soft launch successful)
- Remove any invite-only restriction
- Announce on social/marketing channels
- Monitor
#drop-opsfor the first 2 hours - Check BetterStack every 30 minutes for first 2 hours
4. Feature Flags at Launch
| Flag | Launch State | Notes |
|---|---|---|
NEXT_PUBLIC_FF_NOTIFICATIONS |
true |
Push notifications enabled |
NEXT_PUBLIC_FF_MERCHANT_DASHBOARD |
true |
Merchant dashboard enabled |
NEXT_PUBLIC_FF_VIRTUAL_CARDS |
false |
Not launched — requires card partner |
NEXT_PUBLIC_FF_PHYSICAL_CARDS |
false |
Future feature |
NEXT_PUBLIC_FF_CARD_DETAILS |
false |
Future feature |
NEXT_PUBLIC_FF_CARD_FREEZE |
false |
Future feature |
NEXT_PUBLIC_FF_CARD_PIN |
false |
Future feature |
NEXT_PUBLIC_FF_SPENDING_LIMITS |
false |
Future feature |
5. Rollback Procedure
If any critical issue is found during or after go-live:
Immediate Actions (within 5 minutes)
# Option A: Rollback to previous App Runner deployment
aws apprunner start-deployment \
--service-arn arn:aws:apprunner:eu-west-1:324480209768:service/drop-web/8e45b0d335304487a1880f4e32d6aeec \
--region eu-west-1
# Option B: If issue is in environment config, update env vars
# (via AWS Console — App Runner environment configuration)
# Then trigger new deployment
Communication
- Send Slack message to
#drop-ops: "Going back to previous version — investigating [issue]" - Update BetterStack status page: create incident
- If users are affected: prepare user communication
Post-Rollback
- Confirm health check returns OK after rollback
- Confirm BetterStack monitors green
- Investigate root cause before re-attempting launch
- Document in incident report
6. Post-Launch Monitoring (First 24h)
| Time | Action |
|---|---|
| T+0 to T+2h | Monitor #drop-ops Slack continuously |
| T+2h | Review CloudWatch logs for errors |
| T+4h | Check transaction volume and success rate |
| T+8h | Review Sumsub KYC queue — any stuck applicants? |
| T+24h | First SLA report — uptime, error rate, p99 latency |
| T+7 days | First weekly review |
Key metrics to watch:
- BetterStack: uptime must stay green (>= 99.9%)
- Slack
#drop-ops: no critical alerts - Error rate in logs: < 1% of requests
- BankID login success rate: > 99%
- KYC approval rate: > 80%
7. Compliance Actions at Launch
- Notify Finanstilsynet of live service (if required by PISP/AISP licence)
- Confirm
getdrop.no/vilkaar(terms of service) is accessible - Confirm
getdrop.no/personvern(privacy policy) is accessible - Confirm complaint submission form accessible via app
- Confirm GDPR consent is requested on first use
- Confirm AML monitoring is active (
aml_alertstable populated on large transactions)
Related Documents
Approval
| Role | Name | Date | Signature |
|---|---|---|---|
| Author | Platform Architect (AI) | 2026-02-23 | |
| Reviewer | |||
| Approver | Alem Bašić |