- /api/cron/reminders: processes pending reminders every 15min, sends WhatsApp with email fallback - /api/cron/overdue: marks overdue pledges daily (7d deferred, 14d immediate) - /api/pledges: GET handler with filtering, search, pagination, sort by dueDate - Dashboard overview: stats, collection progress bar, needs attention, upcoming payments - Dashboard pledges: proper table with status tabs, search, actions, pagination - New shadcn components: Table, Tabs, DropdownMenu, Progress - Setup wizard: 4-step onboarding (org → bank → event → QR code) - Settings API: PUT handler for org create/update - Org resolver: single-tenant fallback to first org - Cron jobs installed: reminders every 15min, overdue check at 6am - Auto-generates installment dates when not provided - HOSTNAME=0.0.0.0 in compose for multi-network binding
3.0 KiB
3.0 KiB
Infrastructure Access
All values live in .env (gitignored). This file maps the topology.
Servers
| Var | Purpose |
|---|---|
SSH_USER, SSH_HOST, SSH_PORT |
Primary server SSH (159.195.60.33) |
CR_LIVE_HOST, CR_LIVE_USER, CR_LIVE_SSH_KEY |
CR owned live server (161.35.173.174) — Laravel app |
MARKETING_HOST, MARKETING_USER, MARKETING_SSH_KEY |
Marketing site (178.128.169.175) — not yet accessible |
WP_HOST |
WordPress production (157.245.43.50) — www.charityright.org.uk |
SSH Commands
# Primary server
ssh root@159.195.60.33
# CR owned live server
ssh -i ~/.ssh/id_ed25519_charity root@161.35.173.174
# Marketing site (not yet accessible)
ssh -i ~/.ssh/id_ed25519_charity root@178.128.169.175
# WordPress production (www.charityright.org.uk)
ssh root@157.245.43.50
Incus Containers (on primary server)
| Container | Internal IP | Status | Purpose |
|---|---|---|---|
| cr-server-new | 10.213.16.224 | RUNNING | CharityRight |
| qc-server-new | 10.213.16.234 | RUNNING | QuikCue |
| qc-server | — | STOPPED | legacy |
HAProxy (on primary server)
| Domain pattern | Backend |
|---|---|
| charityright domains | → cr-server-new:443/80 |
| quikcue domains | → qc-server-new:443/80 |
| antivirus.quikcue.com | → localhost:8877 |
| SSH (gitea) | → qc-server-new:2224 |
Databases
| Var | Type | Purpose |
|---|---|---|
DATABASE_URL |
Postgres | donation_warehouse (port 5000 on primary) |
MYSQL_HOST, MYSQL_PORT, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD |
MySQL | CharityRight legacy (DigitalOcean managed) |
REDIS_HOST, REDIS_PASSWORD, REDIS_PORT |
Redis | CharityRight sessions/cache |
Services on Server
| Path | Service | Key Vars |
|---|---|---|
/opt/ayn-antivirus |
AYN Antivirus scanner + dashboard | ANTHROPIC_API_KEY |
/opt/enthuse-db-sync-v2 |
Enthuse donation sync | ENTHUSE_EMAIL, TOTP_SECRET, GOOGLE_CLIENT_* |
/opt/launchgood-sync |
LaunchGood donation sync | LG_EMAIL, LG_PASSWORD |
/root/legacy-donation-system-laravel |
CharityRight Laravel app | STRIPE_*, PAYPAL_*, GOCARDLESS_*, POSTMARK_TOKEN |
/root/redis-v2 |
Redis instance | REDIS_PASSWORD |
Payment Providers
| Var prefix | Provider |
|---|---|
STRIPE_* |
Stripe (live) |
PAYPAL_* |
PayPal (live) |
GOCARDLESS_* |
GoCardless (live) |
| Var | Provider |
|---|---|
SENDGRID_TX_API_KEY |
SendGrid |
POSTMARK_TOKEN |
Postmark (active mailer) |
Third-party Integrations
| Var | Service |
|---|---|
N3O_*_ENDPOINT |
N3O/Engage donation import hooks |
ZAPIER_WEBHOOK_ENDPOINT |
Zapier automation |
GOOGLE_PLACES_API_KEY |
Google Places autocomplete |
CT_STRAVA_* |
Strava challenge tracker |
WORDPRESS_URL, WORDPRESS_KEY |
WordPress (Cloudways) |