[BUG] Booking Notifications page stuck in infinite loading state due to Firestore permission-denied error

Resolved 💬 2 comments Opened Jun 21, 2026 by pmccrudden Closed Jun 24, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

The Booking Notifications page at /administration/golf-settings/booking-notifications on the GreenLane Golf app is stuck in an infinite loading spinner and never renders any content. The page shows only a spinning loader indefinitely, with no error message displayed to the user. Clicking "Refresh Page" does not resolve the issue — the spinner persists on reload.

The root cause is a Firestore permission-denied error thrown inside a snapshot listener. The app appears to wait indefinitely for Firestore data that it never successfully receives, resulting in the page being permanently stuck in a loading state with no fallback UI or error boundary triggered.

What Should Happen?

The Booking Notifications settings page should load successfully and display the notification configuration UI. If a Firestore permission error occurs, the app should either show a meaningful error message to the user or gracefully degrade rather than displaying an infinite loading spinner with no feedback.

Error Messages/Logs

[2026-06-21T09:45:06.527Z] @firebase/firestore: Firestore (11.10.0): Uncaught Error in snapshot listener: FirebaseError: [code=permission-denied]: Missing or insufficient permissions.

[INFO] [tee-sheet] snapshot dropped (permission-denied) for course_status_banner

[ERROR] `DialogContent` requires a `DialogTitle` for the component to be accessible for screen reader users.

[WARNING] Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.

Steps to Reproduce

  1. Log in to the GreenLane Golf admin portal at https://golf-demo-oakridge.greenlanecloudsolutions.com
  2. Navigate to Administration > Golf Settings > Booking Notifications
  3. Observe that the page shows a loading spinner indefinitely
  4. Open browser DevTools console and observe the Firestore permission-denied error
  5. Click the "Refresh Page" button — page still stuck on loading spinner

Note: The Firestore snapshot listener throws a FirebaseError: [code=permission-denied]: Missing or insufficient permissions error, which is unhandled and causes the UI to remain in a permanent loading state.

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

latest (claude --version not applicable — this is a web app bug, not a CLI bug)

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

URL: https://golf-demo-oakridge.greenlanecloudsolutions.com/administration/golf-settings/booking-notifications

Framework: Next.js (App Router) with Firebase Firestore

Note: This is a web application bug, not a Claude Code CLI bug. The issue occurs in a Next.js app using the GreenLane Cloud Solutions golf management platform. The page uses a Firestore real-time snapshot listener to load data. When the listener receives a permission-denied error, it is uncaught and the loading state never resolves, leaving users stuck with an infinite spinner.

Suggested Fix:

  • Handle the permission-denied (and other) Firestore errors in snapshot listeners and transition the UI to an error state instead of leaving it in a loading state indefinitely.
  • Add an error boundary or timeout fallback to catch unhandled Firestore listener errors.
  • Consider adding a DialogTitle to the DialogContent component to fix the accessibility warning.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗