two-oscar-deploy-targets-discovery

Type: incident-postmortem
Date: 2026-07-29
Project: oscar-web (FES inspector + Edge Tools panel work)
Thread: oscar-website (415655444668635)
Two Oscar Deploy Targets — Discovery Postmortem

2026-07-29 15:26 BST

**Discovered**: Oscar Platform has TWO live deploy targets and they're NOT in sync.

**Target 1**: oscar-platform.freshvibeapps.com → IONOS VPS 185.249.73.178
- Served from /var/www/freshvibeapps/clients/oscar-platform/
- I deploy here via python3 /workspace/deploy_main.py (paramiko SFTP)
- Caddy on-demand TLS + nginx

**Target 2**: oscar-platform.pages.dev → Cloudflare Pages (172.66.x.x)
- Source: /workspace/oscar-platform/app/dist/
- Project name: oscar-platform (per app/wrangler.toml)
- Deploys via wrangler pages deploy dist --project-name=oscar-platform
- Has its own build pipeline + CLOUDFLARE_API_TOKEN

**The trap**: I was pushing to VPS (freshvibeapps) the whole time. The operator's phone was hitting CF Pages (pages.dev) which I never touched. So my 'deployed!' announcements meant nothing for the page the operator was actually browsing.

**Visual tell**: build stamp in top-right (#abc1234) is per-deployment. Different hash = different code. Also look at the bottom nav count — CF Pages had 4 icons (Today/Projects/Tools/More), VPS version has 3 (Today/Projects/More). The operator spotted the 3-vs-4 diff.

**Reflex before any 'deployed' announcement**:
1. Ask which URL the operator is testing
2. OR ask for the build stamp from their phone screenshot
3. OR ask which bottom nav icon count they see
4. If they say 'I don't see [my change]' — first check is which site they're on, not 'let me re-deploy'

**To deploy to BOTH in future**: run deploy_main.py for VPS, then wrangler pages deploy dist --project-name=oscar-platform for CF Pages. Both consume the same app/dist/ so a single build can ship to both.

**The 4-icon vs 3-icon nav difference**: CF Pages version has a Tools tab that the VPS version doesn't. Investigate which is the intended layout before syncing.