# Symptom
Visiting any page redirects to sign-in, and the sign-in page itself redirects too. Incognito changes nothing.

# Confirm the cause
1. Open your middleware file and read the `isPublicRoute` list (built with `createRouteMatcher`).
2. Check that it includes every route rendering sign-in/sign-up UI, with catch-all patterns: '/sign-in(.*)' and '/sign-up(.*)', not just the bare paths.
3. Check the root '/' if your landing page is public, and your webhook endpoint path (webhooks must stay public; they authenticate via Svix signatures, not sessions).

# Fix
- Use the inverted pattern, which is the safe default: protect everything EXCEPT the public list.
  ```ts
  import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server'
  const isPublicRoute = createRouteMatcher(['/sign-in(.*)', '/sign-up(.*)', '/'])
  export default clerkMiddleware(async (auth, req) => {
    if (!isPublicRoute(req)) { await auth.protect() }
  })
  ```

# Verify
Open the sign-in page in an incognito window. It must render without redirecting. Then open a protected page signed-out; it must redirect to sign-in exactly once.