bb-plane-fork/apps/web
binarybeach a9b4921973 binarybeachio: SPA 401 interceptor hard-nav via /sign-in/ + cache-bust
Vanilla 401 handler did `window.location.replace('/?next_path=<currentPath>')`.
That IS a hard nav, but the browser's HTTP cache returns the cached SPA
bundle for `/` — the SPA boots, re-fetches the same /api endpoint, gets 401
again, and loops without ever hitting Traefik at the document level. Diagnosed
2026-05-05 via HAR analysis: 9 history entries bouncing `/` ↔ `/?next_path=/`
at ~780ms intervals; zero requests to bridge or oauth2-proxy during the
loop; first bridge.binarybeach.io/handoff request only after Ctrl+Shift+R.

Trigger on the platform side: oauth2-proxy refresh fails for cross-org
gmail-federated users (separate root cause — disabled platform-wide via
OAUTH2_PROXY_OIDC_GROUPS_CLAIM=). The hard-nav fix here is the safety net
that handles that and any other future 401-causing scenario.

Replace with `window.location.replace('/sign-in/?_bb_reauth=<Date.now()>')`:
- /sign-in/ matches Plane's priority-200 plane-signin-redirect Traefik
  router (matched on PathRegexp `^/(sign-in|sign-up|signin|login|register|
  accounts/sign-in)(/.*)?$$`), which 302s to the bridge handoff regardless
  of cookie state.
- _bb_reauth=<ts> cache-busts so even a previously-cached /sign-in/
  response can't short-circuit the request.

Vanilla Plane regression-safe: /sign-in/ is also a known SPA route in
upstream that bounces to /, so non-platform deployments see the same
behavior they'd get without this patch (modulo a single extra navigation).

Also fixes BINARYBEACHIO.md frontend build instructions: Dockerfile.web
needs the monorepo root as build context (turbo prune scope), opposite of
Dockerfile.api which needs apps/api/ as context.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 14:38:03 -10:00
..
app binarybeachio: account chooser, brand logo, session convention 2026-04-30 14:51:21 -10:00
ce fix: remove unused imports and variables (part 1 — packages & non-web-core) (#8751) 2026-03-25 02:04:20 +05:30
core binarybeachio: SPA 401 interceptor hard-nav via /sign-in/ + cache-bust 2026-05-05 14:38:03 -10:00
helpers [WEB-6794] fix: align profile cover update with correct unsplash and upload handling (#8830) 2026-03-31 15:54:12 +05:30
nginx [VPAT-50] chore(security): add X-Frame-Options header to nginx configuration to prevent clickjacking attacks (#8507) 2026-01-09 04:03:41 +05:30
public fix: eslint (#8185) 2025-12-05 16:03:51 +05:30
styles [WEB-5675] chore: implement fontsource as the fonts library (#8398) 2025-12-19 16:21:04 +05:30
.dockerignore [WEB-5043] feat: web vite migration (#7973) 2025-11-06 14:08:48 +05:30
.env.example [WEB-5413] feat: adding sentry error handling in web, space and admin (#8099) 2025-11-12 19:03:47 +05:30
.gitignore chore: move all services inside the apps folder (#7321) 2025-07-03 00:44:13 +05:30
.prettierignore fix: eslint (#8185) 2025-12-05 16:03:51 +05:30
Dockerfile.dev feat: migrate to pnpm from yarn (#7593) 2025-08-19 20:06:42 +05:30
Dockerfile.web chore: upgrade turbo from v2.8.12 to v2.9.4 (#8859) 2026-04-06 16:04:57 +05:30
google.d.ts chore: run fixes (#8257) 2025-12-08 22:26:50 +05:30
manifest.json chore: move all services inside the apps folder (#7321) 2025-07-03 00:44:13 +05:30
package.json chore: version bump 2026-03-31 17:09:35 +05:30
postcss.config.js [WEB-5602] feat: new design system (#8220) 2025-12-12 20:50:14 +05:30
react-router.config.ts [WEB-5386] refactor: update all apps to use react-router for development and enable SSR for space app. (#8095) 2025-11-11 14:08:42 +05:30
tsconfig.json fix: remove ee folder from web (#8622) 2026-02-10 20:01:42 +05:30
use-font-face-observer.d.ts chore: move all services inside the apps folder (#7321) 2025-07-03 00:44:13 +05:30
vite.config.ts chore(deps): replace dotenvx with dotenv and update overrides (#8832) 2026-03-31 16:55:17 +05:30