Skip to content

Homepage React hydration error #412 blocks unauthenticated users from reaching login #3400

Description

@dakotaeye

Summary

The marketing homepage (/) throws a React error #412 (hydration mismatch) that prevents unauthenticated users from clicking through to sign in / navigate the app. The error reproduces in incognito windows across multiple browsers, so it isn't caused by extensions.

Environment

  • Deployment: self-hosted via ghcr.io/elie222/inbox-zero:latest, no local fork
  • Container commit (last confirmed broken): 5082d20a4 (org.opencontainers.image.revision), built 2026-08-26T11:47Z
  • Also reproduces on 124948f79 (previous build)
  • Runtime: Node 22 in the upstream image, standard Docker Compose stack (db, redis, serverless-redis-http, web, cron, cloudflared)
  • Ingress: Cloudflare Tunnel (no reverse proxy modifying headers)
  • Auth: Microsoft Entra (Outlook only) — AUTH_ALLOWED_EMAIL_DOMAINS set
  • NEXT_PUBLIC_BYPASS_PREMIUM_CHECKS=true, NEXT_PUBLIC_DIGEST_ENABLED=false, QUEUE_BACKEND=bullmq

Repro

  1. Fresh incognito window
  2. Navigate to https://<self-hosted-domain>/
  3. Console immediately logs:
    Minified React error #412; visit https://react.dev/errors/412 for the full message
    
  4. Page renders but interactive elements (login link, hero CTAs) never wire up — clicking does nothing.
  5. Confirmed in two independent browsers.

Impact

Unauthenticated users are effectively locked out — they cannot reach /login from the homepage. Existing sessions may be fine because they land elsewhere; the outage is for anyone trying to sign in fresh.

Workaround

Direct-navigate past the marketing homepage:

  • https://<domain>/mail ← works
  • https://<domain>/automation
  • https://<domain>/login

Once past /, the app works normally.

Suspected area

Landed in the recent homepage refactor. Only marketing-side fix I could see between our previous-known-good and the broken build is:

  • 241aa11fd Fix homepage organization schema placement (#3390)

Commit 241aa11fd is inside the broken build, so it's either that commit's implementation or something else in the same route. React error #412 is specifically "Hydration failed because the server rendered HTML didn't match the client" — so a candidate is any homepage element that renders based on Date.now(), Math.random(), window/document presence, or a mutation-during-render pattern in the marketing components.

What I've ruled out

  • Not browser-extension related (fresh incognito, two browsers, one reproducer per session)
  • Not Cloudflare / edge-caching (curl also serves the same HTML with dynamic bits that likely mismatch on client render)
  • Not local fork changes (running upstream :latest unmodified)
  • Not stale image cache (reproduces after docker compose up -d --force-recreate web)

Happy to grab screenshots, HAR, or full page HTML if useful. Thanks!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions