Calendar loads initial view within 2s on 3G and does not block first paint
Why it matters
A blank screen for 4 seconds while the availability API resolves is the leading cause of mobile booking abandonment. Synchronous data fetching on calendar pages blocks first paint, penalizes users on 3G connections (typical in mobile-first markets), and tanks Core Web Vitals LCP scores. ISO 25010 time-behaviour requires that interactive systems provide perceptible feedback within 1–2 seconds. Blocking fetches also mean that a slow or erroring availability API takes down the entire page instead of degrading gracefully to a skeleton.
Severity rationale
Low because blocking load primarily affects mobile users on slow connections rather than corrupting data, but it is the dominant cause of booking page abandonment on 3G.
Remediation
Wrap the data-fetching calendar component in React Suspense with a skeleton fallback so the page shell renders immediately while availability loads in the background.
// src/app/booking/page.tsx
import { Suspense } from 'react'
import { CalendarContent } from '@/components/CalendarContent'
import { CalendarSkeleton } from '@/components/CalendarSkeleton'
export default function BookingPage() {
return (
<Suspense fallback={<CalendarSkeleton />}>
<CalendarContent />
</Suspense>
)
}
Create src/app/booking/loading.tsx as a fallback for the whole route:
export default function Loading() {
return <CalendarSkeleton />
}
The skeleton should have the same grid dimensions as the real calendar to avoid layout shift when data arrives.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Calendar & Availability Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- iso-25010:2011 · time-behaviour — Time Behaviour (Performance Efficiency) — calendar must meet 2s load threshold
Taxons
History
- 2026-04-18·v1.0.0·Initial import from booking-calendar-availability·automated