Layout shift on load: Settings admin up to 0.73, public link page up to 0.71, notes 0.24 #136

Closed
opened 2026-09-25 22:17:55 +00:00 by kayg · 2 comments
Owner

Severity: medium (performance and polish)

Problem

Cumulative layout shift (web-vitals rule, no recent input) during load, measured in the production build:

Screen CLS
Settings → Admin → Backups 0.69 (320), 0.25 (768)
Settings → Admin → Server configuration 0.65 (390), 0.73 (1440 at 200% zoom)
Settings → Admin → Invitations 0.43 (320)
Public link page /s/<folder> 0.25 (1024), 0.71 (1440 at 200% zoom)
Quick Look / share sheet over Files at 200% zoom 0.59–0.60
Note open /n/<id> 0.15–0.24 (1024–1920)
Photo /p/<id> 0.10–0.20

(Calendar Week/Day 0.11–0.18 is in the calendar issue.) Values are in /home/kayg/Developer/calternal/target/breakit/run1/report.json (kind cls).

Expected

CLS < 0.1: reserve space for the loaded content (skeleton rows with the final height, fixed card heights), and do not insert content above what is already shown.

Found by the break-it sweep (#117). Re-run: cd apps/web && bun run build && bun e2e/breakit.mjs --keep <dir> (script on branch job/breakit-fixes). Screenshots: /home/kayg/Developer/calternal/target/breakit (run 1 in run1/, fix checks in verify/).

**Severity:** medium (performance and polish) ## Problem Cumulative layout shift (web-vitals rule, no recent input) during load, measured in the production build: | Screen | CLS | |---|---| | Settings → Admin → Backups | 0.69 (320), 0.25 (768) | | Settings → Admin → Server configuration | 0.65 (390), 0.73 (1440 at 200% zoom) | | Settings → Admin → Invitations | 0.43 (320) | | Public link page `/s/<folder>` | 0.25 (1024), 0.71 (1440 at 200% zoom) | | Quick Look / share sheet over Files at 200% zoom | 0.59–0.60 | | Note open `/n/<id>` | 0.15–0.24 (1024–1920) | | Photo `/p/<id>` | 0.10–0.20 | (Calendar Week/Day 0.11–0.18 is in the calendar issue.) Values are in `/home/kayg/Developer/calternal/target/breakit/run1/report.json` (kind `cls`). ## Expected CLS < 0.1: reserve space for the loaded content (skeleton rows with the final height, fixed card heights), and do not insert content above what is already shown. Found by the break-it sweep (#117). Re-run: `cd apps/web && bun run build && bun e2e/breakit.mjs --keep <dir>` (script on branch `job/breakit-fixes`). Screenshots: `/home/kayg/Developer/calternal/target/breakit` (run 1 in `run1/`, fix checks in `verify/`).
Author
Owner

The #117 break-it sweep found additional layout shifts above the 0.1 threshold at 320px in the paper theme:

  • photo detail: CLS 0.173
  • notifications: CLS 0.145
  • admin users settings: CLS 0.161

Screenshots are in /home/kayg/Developer/calternal/target/breakit/cont-breakit-117/full-final/ (photo-link_320-paper.png, notifications_320-paper.png, settings-admin-users_320-paper.png). The admin finding fits this existing issue; the photo and notifications findings use the same route-load CLS detector and may be related.

The #117 break-it sweep found additional layout shifts above the 0.1 threshold at 320px in the paper theme: - photo detail: CLS 0.173 - notifications: CLS 0.145 - admin users settings: CLS 0.161 Screenshots are in `/home/kayg/Developer/calternal/target/breakit/cont-breakit-117/full-final/` (`photo-link_320-paper.png`, `notifications_320-paper.png`, `settings-admin-users_320-paper.png`). The admin finding fits this existing issue; the photo and notifications findings use the same route-load CLS detector and may be related.
Author
Owner

Fixed. The full layout sweep passed 180 screens and enforces CLS below 0.05 on the cold probes. It measured Settings admin at 0.000 and the note route at 0.009. The Share E2E also checks public-link CLS below 0.05.

Fixed. The full layout sweep passed 180 screens and enforces CLS below 0.05 on the cold probes. It measured Settings admin at 0.000 and the note route at 0.009. The Share E2E also checks public-link CLS below 0.05.
kayg closed this issue 2026-09-26 12:52:07 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#136
No description provided.