External Services & Integrations¶
This document is the authoritative register of every external service UCCA depends on. For each service: what it is, why we use it, how we authenticate, what it connects to, and what breaks if it goes down.
Credential Values
This document references token names and environment variable keys only. Actual secrets are never stored in documentation. See the credential location column for where each value lives.
Primary Platform¶
Cloudflare¶
| Field | Value |
|---|---|
| What | Edge compute, DNS, storage, security |
| Why | Primary infrastructure platform — Workers, D1, R2, KV, Pages, Access, DNS |
| Account | admin@ucca.online |
| Services used | Workers, D1, R2, KV, Pages, Access, DNS, SSL/TLS, WAF |
| Zones managed | ucca.online, rtopacks.com.au, ucca.asia, ucca.college, ucca.com.au, ucca.live, rignold.com |
Credentials:
| Token name | Purpose | Scope | Location |
|---|---|---|---|
ucca-terraform |
Terraform IaC operations | Zone:Read, DNS:Edit, Workers:Edit, D1:Edit, R2:Edit, Pages:Edit, KV:Edit | infra/ucca-infra/terraform.tfvars |
CF_API_TOKEN |
Wrangler deploys + worker runtime | Worker-level access | Set as secret on ops-v2 and traffic-snapshot workers |
Blast radius: Total. Cloudflare is the platform. If the account is locked, every surface goes dark — marketing, ops, docs, knowledge, rtopacks. DNS resolution stops. Workers stop executing. Databases become inaccessible.
Identity & Communication¶
Google Workspace¶
| Field | Value |
|---|---|
| What | Email, calendar, identity provider |
| Why | Business email (@ucca.online), authentication backbone for other services |
| Account | admin@ucca.online (primary), comms@ucca.online (transactional) |
| Services used | Gmail, Google Admin, SMTP relay |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
GMAIL_USER |
SMTP sender for contact forms | Worker secrets on ucca-site and rtopacks-site |
GMAIL_PASS |
App password for SMTP | Worker secrets on ucca-site and rtopacks-site |
GMAIL_CLIENT_ID |
OAuth2 for voicemail email delivery | Stored in Twilio Functions environment |
GMAIL_CLIENT_SECRET |
OAuth2 for voicemail email delivery | Stored in Twilio Functions environment |
GMAIL_REFRESH_TOKEN |
OAuth2 refresh token | Stored in Twilio Functions environment |
DNS integration: MX records (all zones), SPF (include:_spf.google.com), DKIM, DMARC.
Blast radius: High. Google Workspace is the authentication backbone. If this account is locked:
- All
@ucca.onlineemail stops - Slack authentication breaks (Google SSO)
- incident.io access breaks (via Slack)
- Contact form submissions stop (SMTP)
- Voicemail email delivery stops (OAuth2)
Slack¶
| Field | Value |
|---|---|
| What | Team communication, incident management hub |
| Why | Internal comms, incident.io integration point |
| Account | admin@ucca.online via Google Workspace SSO |
| Workspace | UCCA workspace |
Depends on: Google Workspace (authentication).
Blast radius: Medium. Slack outage blocks incident.io incident creation/updates and team communication. Does not affect production surfaces.
incident.io¶
| Field | Value |
|---|---|
| What | Status page and incident management |
| Why | Public status page at status.ucca.online, incident tracking |
| Account | Connected via Slack workspace |
| Surfaces | status.ucca.online (CNAME → statuspage.incident.io, DNS-only) |
API endpoints:
| Endpoint | Auth | Purpose |
|---|---|---|
https://statuspage.incident.io/ucca/api/v1/summary |
None (public) | Status page summary for dashboards |
https://api.incident.io/v2/status_pages |
Bearer token | List status pages |
https://api.incident.io/v2/status_page_structures/{id} |
Bearer token | Get component IDs |
https://api.incident.io/v2/status_page_incidents |
Bearer token | Create status page incident |
https://api.incident.io/v2/status_page_incident_updates |
Bearer token | Post incident update |
Credentials:
| Token name | Purpose | Scope | Location |
|---|---|---|---|
INCIDENT_IO_API_KEY |
Incident declaration from ops console | Create status page incidents, maintenance windows and publish updates | Set as secret on ops-v2 worker |
Consumed by:
- Marketing site footer (
ucca.online→/api/statusproxy) — public API - Ops Health page (
ops.ucca.online→/api/ops/incident-statusproxy) — public API - Ops Declare Incident (
ops.ucca.online→/api/ops/incident-io) — authenticated API
Depends on: Slack (account access and incident workflows).
Blast radius: Low for production. Status page becomes unavailable, marketing footer status dot disappears gracefully, ops Health page shows "Loading..." for that section. No production services affected. Incident declaration from ops console degrades gracefully (shows "Not Connected" if API key missing).
Source Control & CI¶
GitHub¶
| Field | Value |
|---|---|
| What | Source control, repository hosting |
| Why | All UCCA source code, infrastructure as code, documentation |
| Account | uccaonline — personal account (not an organisation) |
| 2FA | Enabled (account-level) |
| Auth method | HTTPS via gh CLI OAuth token (gho_ prefix), macOS Keychain |
Personal Account Limitation
uccaonline is a personal GitHub account, not an organisation. Org-level controls (member 2FA enforcement, default repo permissions, team structure, audit log) are not available. Migrate to a proper GitHub organisation before adding any collaborators.
Repositories:
| Repo | Contents |
|---|---|
ucca-engine |
Production pipeline core (Python) |
ucca-surfaces |
All web surfaces + worlds (TypeScript/Next.js) |
ucca-docs |
MkDocs documentation (docs-site + knowledge-site) |
ucca-infra |
Terraform declarations for Cloudflare infrastructure |
Credentials:
| Token | Type | Scope | Storage |
|---|---|---|---|
gh CLI OAuth token |
OAuth (gho_ prefix) |
gist, read:org, repo, workflow |
macOS Keychain (set by gh auth login, read by git via osxkeychain credential helper) |
The same token serves both gh CLI operations and git push/pull over HTTPS. No expiry — persists until revoked or gh auth logout.
Unused PAT deleted
A fine-grained PAT (ucca-engine-push, expiry Mar 26 2026) was created but never used — git was authenticating via the gh OAuth token all along. Deleted 2026-03-05.
Blast radius: Development stops. No code can be pushed or pulled. Terraform state (remote) could become inaccessible depending on backend config. Production surfaces are unaffected — they run on Cloudflare independently of GitHub.
Webhooks: None. Legacy Builder.io webhook on ucca-site removed 2026-03-05 (undocumented demo-phase integration).
AI / LLM Providers¶
Anthropic (Claude)¶
| Field | Value |
|---|---|
| What | Large language model API |
| Why | Content generation, course design, multi-AI collaboration in the engine |
| Status | Active in engine; future production LLM layer |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
ANTHROPIC_API_KEY |
Claude API access | engine/ucca-engine/generator/.env |
Blast radius: Engine content generation stops. No impact on production surfaces or ops console. The AI Status dashboard on ops.ucca.online will show the outage via Statuspage API fetch.
OpenAI¶
| Field | Value |
|---|---|
| What | Large language model API |
| Why | Cross-LLM validation, future multi-provider architecture |
| Status | Referenced in architecture; not yet active in production |
Credentials: None currently configured in the codebase.
Blast radius: None currently. Future cross-validation capability would degrade.
Voice & Phone¶
Twilio¶
| Field | Value |
|---|---|
| What | Voice IVR, voicemail, call handling |
| Why | Inbound call handling for UCCA Inc (US entity) |
| Account SID | ACa958efb6dca686283cb58976742341a2 |
| Account name | UCCA Inc |
| Account type | Full (no subaccounts) |
| Account created | 2020-01-27 |
| Status | Active |
| Balance | ~$10.59 USD (prepaid) |
| Monthly cost | ~$0.23 (10 inbound calls, recordings, Polly TTS) |
Account lineage: Originally created in 2017 as an Asterisk/OpenPBX alternative for the Australian RTO operation. Repurposed for UCCA Inc in January 2026. Account renamed from "IVR" to "UCCA Inc" on 2026-03-05.
Phone numbers:
| Number | SID | Type | Capabilities | Status |
|---|---|---|---|---|
+1 302 300 3336 |
PN48e3ae94fef42aea96f545e5b67b2dc5 |
Local (Delaware) | Voice, SMS, MMS | In use |
Voice callbacks route to Studio Flow FWb0d7b96f19745675a2a3efd94f42cf4e. SMS webhook set to https://voice-ivr-1974-uvpwcu.twil.io/forward-sms — forwards inbound SMS (with sender info) to +61422334489. Configured 2026-03-05 for Meta business verification.
Outgoing caller IDs: None. Legacy personal number (+1 646 809 3511) removed 2026-03-05.
Studio flows:
| Flow | SID | Status | Revision |
|---|---|---|---|
| UCCA – Inbound Calls | FWb0d7b96f19745675a2a3efd94f42cf4e |
Published | 311 |
The flow implements a time-of-day IVR (14 states): greeting varies by morning/afternoon/evening (New York timezone), caller ID check for Tim (personalised bilingual greeting in English + Mandarin), connects call to +61422334489 with 20s timeout, falls through to voicemail recording (120s max, trim silence), then HTTP POST to Functions service /send-voicemail-email to email the recording.
Serverless (Functions):
| Item | Value |
|---|---|
| Service name | voice-ivr |
| Service SID | ZS10114a109b41e3a7b2719addf2f45ed8 |
| Domain | voice-ivr-1974-uvpwcu.twil.io |
| Environment SID | ZE0865ca8810bce634e645fd4ee1c5e939 |
| Build SID | ZBedcd99e7f033b918e7755b582dbdd1bd |
| Created | 2023-08-04 |
| UI editable | Yes |
Functions in service:
| Function | Path | SID | Notes |
|---|---|---|---|
send-voicemail-email |
/send-voicemail-email |
ZHb9b9aa4b4044f129c664fe38545c6b1c |
Active — called by Studio flow. Gmail OAuth2. |
forward-sms |
/forward-sms |
ZHa938fdf7c8b10e470d92bcd73b7ef4c3 |
Active — forwards inbound SMS to +61422334489. Added 2026-03-05. |
voice-ivr.js |
/voice-ivr |
ZH41d636d4221c7f9bcf445b007629b14f |
Legacy IVR handler (superseded by Studio flow) |
handle-user-input.js |
/handle-user-input |
ZHeeb0223b118bbf38a76b4a2240e810be |
Legacy input handler (superseded by Studio flow) |
Email delivery: The /send-voicemail-email function uses Gmail API with OAuth2 — refreshes an access token via GMAIL_CLIENT_ID/GMAIL_CLIENT_SECRET/GMAIL_REFRESH_TOKEN, then sends via gmail.googleapis.com. No SMTP. The legacy SMTP environment variables (SMTP_HOST, SMTP_USER, SMTP_PASS, SMTP_PORT) were confirmed unused by code audit and deleted on 2026-03-05.
Environment variables (variable names only — values stored in Twilio):
| Variable | Purpose | Status |
|---|---|---|
GMAIL_SENDER |
OAuth2 sender address (comms@ucca.online) |
Active |
GMAIL_CLIENT_ID |
Google OAuth2 client ID | Active |
GMAIL_CLIENT_SECRET |
Google OAuth2 client secret | Active |
GMAIL_REFRESH_TOKEN |
Google OAuth2 refresh token | Active |
MAIL_TO |
Email recipient (admin@ucca.online) |
Active |
MAIL_FROM |
Legacy duplicate of GMAIL_SENDER | Legacy (unused) |
TWILIO_PHONE_NUMBER |
Legacy number reference (+12192667508) |
Legacy (unused) |
MY_PHONE_NUMBER |
Tim's number (referenced by legacy handle-user-input.js) |
Legacy |
TWILIO_VOICE_WEBHOOK_URL |
Legacy webhook path | Legacy (unused) |
API keys:
| Key name | SID | Created |
|---|---|---|
| Studio API Key | SK070a987466f1f0454914937607fdc711 |
2026-01-13 |
Usage (last month):
| Category | Count | Cost |
|---|---|---|
| Inbound calls | 10 | $0.09 |
| Call recordings | 2 | $0.01 |
| Amazon Polly (TTS) | 10 | $0.13 |
| Total | ~$0.23 |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
| Account SID + Auth Token | Full API access | Twilio CLI profile ucca (API key auth); Auth Token available in Twilio console |
TWILIO_ACCOUNT_SID |
Account identifier | Worker secret on ops-v2 |
TWILIO_AUTH_TOKEN |
Full API auth | Worker secret on ops-v2 |
GMAIL_CLIENT_ID |
OAuth2 for voicemail email delivery | Twilio Functions environment |
GMAIL_CLIENT_SECRET |
OAuth2 for voicemail email delivery | Twilio Functions environment |
GMAIL_REFRESH_TOKEN |
OAuth2 refresh token | Twilio Functions environment |
Depends on: Google Workspace (OAuth2 for email delivery of voicemail transcriptions).
Blast radius: Low. Inbound calls fail or go unrecorded. No impact on production surfaces.
IaC status: Declared as reference locals in infra/ucca-infra/twilio.tf (not provider-managed). The official Twilio Terraform provider is pilot-status and stale. Configuration changes are made via Twilio CLI or REST API, then twilio.tf is updated to match. See Terraform assessment below.
Backup & Storage¶
Google Drive (Backup Destination)¶
| Field | Value |
|---|---|
| What | Backup storage for D1 databases and KV namespaces |
| Why | Independent backup outside Cloudflare — Priority 1 threat model mitigation |
| Account | admin@ucca.online (Google Workspace for Education) |
| Access method | rclone with OAuth2 (configured as gdrive remote on Mac Mini) |
| Folder | UCCA Backups/ |
What's stored:
| Backup | Path | Format | Frequency |
|---|---|---|---|
| ops-db (D1) | UCCA Backups/d1/ops-db/ |
.sql.gz |
Daily 03:00 AEST |
| rtopacks-db (D1) | UCCA Backups/d1/rtopacks-db/ |
.sql.gz |
Daily 03:00 AEST |
| LEADS (KV) | UCCA Backups/kv/leads/ |
.json.gz |
Daily 03:00 AEST |
| Manifests | UCCA Backups/manifests/ |
.json |
Daily 03:00 AEST |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
rclone OAuth2 token |
Google Drive API access | ~/.config/rclone/rclone.conf on Mac Mini |
Retention: Manual — 90 days. rclone delete gdrive:"UCCA Backups" --min-age 90d
Depends on: Google Workspace (same admin@ucca.online account).
Blast radius: None for production. Backups stop uploading if Google Drive access is revoked. Existing backups in Drive remain accessible. Detection: cf-verify.sh will report failures when backup age exceeds 48 hours.
Migration path: AWS S3 (ucca-backups bucket in ap-southeast-2) when startup credits are approved. See Backup Strategy.
Email Marketing & Transactional¶
Mailchimp¶
| Field | Value |
|---|---|
| What | Email marketing |
| Why | Marketing email campaigns |
| DNS evidence | DKIM records (k1, k2, k3._domainkey → mcsv.net) on secondary domains; SPF include:servers.mcsv.net |
| Domains configured | ucca.college, ucca.com.au |
Blast radius: Marketing emails stop. No production impact.
Mailgun¶
| Field | Value |
|---|---|
| What | Transactional email delivery |
| Why | Transactional email for ucca.college |
| DNS evidence | CNAME email.ucca.college → mailgun.org; SPF include:mailgun.org |
Blast radius: Transactional email for ucca.college stops. No production impact.
Resend¶
| Field | Value |
|---|---|
| What | Transactional email API |
| Why | Programmatic email delivery for UCCA platform and world surfaces |
| Account | admin@ucca.online |
Domains:
| Domain | Status | DNS Records | Notes |
|---|---|---|---|
ucca.online |
Configured | TXT resend._domainkey (DKIM), MX send (SES feedback), TXT send (SPF) |
DNS records in Terraform (dns_ucca_online.tf) |
rtopacks.com.au |
Configured | TXT resend._domainkey (DKIM), MX send (SES feedback), TXT send (SPF) |
DNS records in Terraform (dns_rtopacks.tf). SES region: ap-northeast-1 |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
RESEND_API_KEY |
Transactional email sending (ucca.online) | Worker secret on ops-v2 |
RTOPACKS_RESEND_API_KEY |
Transactional email sending (rtopacks.com.au) | Worker secret on ops-v2 |
DNS integration: DKIM via resend._domainkey, SPF via send subdomain (delegates to amazonses.com). Resend uses Amazon SES as the underlying transport.
Blast radius: Low. Transactional email delivery stops. No impact on production surfaces or core operations.
Messaging & Bots¶
Telegram¶
| Field | Value |
|---|---|
| What | Bot messaging platform |
| Why | Platform notifications and world-specific bot interactions |
| Bots created | UCCAPlatformBot (platform-level), RTOpacksBot (RTOpacks world) |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
TELEGRAM_BOT_TOKEN (UCCA Platform) |
Platform bot API access | Worker secret on ops-v2 |
TELEGRAM_BOT_TOKEN (RTOpacks) |
World bot API access | Worker secret on rtopacks-site |
Blast radius: None for production. Bot notifications stop. No impact on surfaces or core operations.
Meta (Facebook/WhatsApp Business)¶
| Field | Value |
|---|---|
| What | Business platform for WhatsApp Business API, Facebook integrations |
| Why | Future omnichannel communications — WhatsApp Business messaging for world surfaces |
| App name | UCCA Platform |
| App ID | 1268490168530537 |
| Status | Created, business verification in progress |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
META_APP_ID |
App identifier | Worker secret on ops-v2 |
META_APP_SECRET |
App authentication | Worker secret on ops-v2 |
Blast radius: None currently. Future WhatsApp Business messaging would stop if credentials are revoked.
External Data Sources¶
training.gov.au (TGA)¶
| Field | Value |
|---|---|
| What | Australian Government training data API |
| Why | RTO enrichment — organisational data, scope, registration history |
| API base | https://training.gov.au/api/organisation (v1.0) |
| Auth | Public API, no credentials required |
| Rate limiting | Self-imposed: 10 enrichments per minute on auto-enrich |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
ENRICH_SECRET |
Server-side auth for enrichment backchannel | Worker secret on ops-v2 |
Consumed by: RTOpacks search-enrich, TGA proxy, ops enrichment endpoint.
Blast radius: RTO enrichment stops. Existing database records unaffected. Search still works from cached D1 data.
ABN Lookup (Australian Business Register)¶
| Field | Value |
|---|---|
| What | Australian Business Register web services API |
| Why | RTO business registration enrichment — ABN validation, entity name, GST status, business location |
| API base | https://abr.business.gov.au/abrxmlsearch/AbrXmlSearch.asmx |
| Auth | GUID-based (registered web services access) |
| Rate limiting | Fair use — no published hard limit |
Credentials:
| Token name | Purpose | Location |
|---|---|---|
ABN_LOOKUP_GUID |
Web services authentication | Worker secret on rtopacks-site. Master copy: 🔒 1Password: UCCA Shared › ABN Lookup › API GUID |
Consumed by: RTOpacks RTO enrichment — business registration data to complement TGA training data.
Blast radius: ABN enrichment stops. Existing database records unaffected. TGA enrichment and search continue independently.
Removed / Deprecated Integrations¶
| Service | What it was | Removed | Reason |
|---|---|---|---|
| Builder.io | Visual CMS — webhook on ucca-site sending PR/check events to api.builder.io |
2026-03-05 | Dead integration from demo build phase. Undocumented attack surface. Webhook deleted. |
Legacy / Secondary Services¶
These services have DNS records configured but are on secondary/parked domains. They may be active or legacy.
| Service | Evidence | Domain | Notes |
|---|---|---|---|
| Freshdesk | CNAME help.ucca.college → freshdesk.com |
ucca.college | Support ticketing |
| Shopify | CNAME account.ucca.college → shops.myshopify.com |
ucca.college | Account/storefront |
| Porkbun | Wildcard CNAMEs on ucca.asia, ucca.live → uixie.porkbun.com |
ucca.asia, ucca.live | Domain parking |
| LeadWorx | TXT verification lw=646bfcdf2ef78c68d4738cfe |
ucca.college | Lead capture |
Dependency Chain¶
The critical dependency chains — if one breaks, everything downstream breaks:
graph TD
GW[Google Workspace<br/>admin@ucca.online] --> Email[All @ucca.online email]
GW --> Slack[Slack<br/>Google SSO]
GW --> SMTP[Contact form SMTP]
GW --> Twilio[Twilio voice + SMS<br/>OAuth2 email delivery]
Slack --> IIO[incident.io<br/>Status page + incidents]
IIO --> StatusPage[status.ucca.online]
StatusPage --> MarketingFooter[ucca.online footer indicator]
StatusPage --> OpsHealth[ops.ucca.online Health page]
CF[Cloudflare<br/>admin@ucca.online] --> DNS[All DNS resolution]
CF --> Workers[All Workers]
CF --> D1[All D1 databases]
CF --> R2[R2 storage]
CF --> Pages[Pages sites]
CF --> Access[Cloudflare Access gates]
Workers --> Surfaces[All production surfaces]
D1 --> Surfaces
Pages --> Docs[docs.ucca.online]
Pages --> Knowledge[knowledge.ucca.online]
GH[GitHub<br/>uccaonline account] --> Code[All source code]
GH --> TF[Terraform state]
Code --> Deploys[Wrangler deploys]
Deploys --> Workers
style GW fill:#4285f4,color:#fff
style CF fill:#f38020,color:#fff
style GH fill:#333,color:#fff
Single points of failure:
- Cloudflare account (
admin@ucca.online) — everything goes dark - Google Workspace (
admin@ucca.online) — email, Slack auth, incident.io access, SMTP, voicemail all break - GitHub OAuth token revocation — if
gh auth logoutis run or the token is revoked, all git push/pull andghCLI operations stop
Twilio Terraform Assessment¶
The official Twilio Terraform provider (twilio/twilio on the Terraform Registry) covers the resources UCCA uses:
| UCCA Resource | Terraform Resource | Import Support |
|---|---|---|
Phone number (+1 302 300 3336) |
twilio_api_accounts_incoming_phone_numbers |
Yes (by SID) |
| Studio Flow (UCCA – Inbound Calls) | twilio_studio_flows_v2 |
Yes (by SID) |
| Functions Service (voice-ivr) | twilio_serverless_v1_services |
Yes (by SID) |
| Functions (voice-ivr.js, etc.) | twilio_serverless_v1_services_functions |
Yes |
| Environment (voice-ivr) | twilio_serverless_v1_services_environments |
Yes |
| Environment Variables | twilio_serverless_v1_services_environments_variables |
Yes |
| API Key (Studio API Key) | twilio_api_accounts_keys |
Yes (by SID) |
Assessment:
- Provider status: PILOT — Twilio's official provider is not under active development. Last release v0.18.46 (June 2024). It works but is not receiving new features.
- Community alternative:
RJPearson94/twilio— actively maintained (v0.27.1, November 2025), broader resource coverage, but community-supported only. - Recommendation: Not yet. The Twilio footprint is small (1 number, 1 flow, 1 Functions service) and stable. The pilot-status official provider adds risk without proportional benefit. Revisit if:
- Twilio footprint grows (more numbers, flows, or services)
- The official provider reaches GA status
- A second voice/IVR world is onboarded and config duplication becomes a concern
For now, this document serves as the declarative record of Twilio state. The Studio Flow definition (14 states, revision 311) and Functions service configuration are fully audited above.
Version History¶
| Version | Date | Change | Author |
|---|---|---|---|
| 1.0 | 2026-03-03 | Initial creation — full service inventory and dependency map | Claude Code |
| 1.1 | 2026-03-04 | Added incident.io authenticated API endpoints and INCIDENT_IO_API_KEY credential | Claude Code |
| 2.0 | 2026-03-05 | Full Twilio API audit — account details, phone numbers, Studio flow, Functions service, env vars, API keys, usage, billing. Terraform provider assessment added. | Claude Code |
| 2.1 | 2026-03-05 | Twilio cleanup actions — account renamed IVR→UCCA Inc, SMTP env vars deleted, personal caller ID removed, SMS webhook cleared, account lineage documented | Claude Code |
| 2.2 | 2026-03-05 | GitHub corrected to personal account (not org), Builder.io added as removed integration, org migration recommendation | Claude Code |
| 2.3 | 2026-03-05 | GitHub auth corrected: gh OAuth token (not fine-grained PAT). Unused PAT deleted. PAT expiry warning removed. | Claude Code |
| 2.4 | 2026-03-06 | Added Google Drive as backup destination — D1/KV daily backups via rclone | Claude Code |
| 2.5 | 2026-03-03 | Added ABN Lookup (Australian Business Register) — GUID stored as Worker secret on rtopacks-site | Claude Code |
| 3.0 | 2026-03-05 | Twilio SMS webhook configured (forward-sms function). Added Resend, Telegram, Meta sections. Twilio IaC status updated (reference locals in twilio.tf). Twilio credentials added to ops-v2 wrangler secrets. | Claude Code |
| 3.1 | 2026-03-05 | Resend rtopacks.com.au domain configured (DNS in Terraform). Added RTOPACKS_RESEND_API_KEY credential. | Claude Code |