[BUG] Booking Notifications page stuck in infinite loading state due to Firestore permission-denied error
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
- Log in to the GreenLane Golf admin portal at https://golf-demo-oakridge.greenlanecloudsolutions.com
- Navigate to Administration > Golf Settings > Booking Notifications
- Observe that the page shows a loading spinner indefinitely
- Open browser DevTools console and observe the Firestore
permission-deniederror - 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
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
DialogTitleto theDialogContentcomponent to fix the accessibility warning.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗