Repository navigation
Core Web Vitals: bundle render-blocking CSS + lazy-load below-fold images #79
Copy link
Copy link
Closed
Description
Activity
Fleet sweep round 7 landed. Preset 3.10.0 adopted by all 18 properties (17 docs sites + conduction-website).
Round 7 PRs:
- openregister #1588 (documentation only — no dev branch)
- opencatalogi validate-manifest.js: the structural-lint fallback rejects page types every app already ships #610 + fix(release): supersede the previous bump instead of stacking a new one #611
- openconnector fix(global-settings): ignore the model and effort keys Claude Code writes in settings.json (v2.7.1) #805 + fix(global-settings): deny an unauthorized git push in every form, before any prompt (v2.7.2) #806
- docudesk fix(gate-51): an ADR-037 overlay fragment does not own the metadata it is overlaying #207 + fix(gate-19): rx.test(...) is JavaScript's RegExp, not Playwright's test() #208
- openbuilt chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates #108 + chore(deps): bump the npm_and_yarn group across 1 directory with 8 updates #109
- pipelinq fix(gate-48): a re-indented #[NoCSRFRequired] is not a dropped one #388 + fix(quality): quality.yml resolved to ZERO jobs — and the three Nextcloud legs could not block a merge #389
- procest fix(quality): a bounded retry that cannot fit its job cap never finishes #510 + feat(fleet): identify CVE fixes by alert, not by author, label or prose #511
- scholiq chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates #108 + chore(deps): bump the npm_and_yarn group across 1 directory with 8 updates #109
- shillinq fix(hydra-gates): a not-applicable gate is not a coverage gap — fix the accounting, then flip the flag #164 + fix(gate-46): resolve anchors the way GitHub actually publishes them #165
- softwarecatalog gate-41 (html-lang) has gate-38's defect verbatim: a PHP COMMENT mentioning <html> makes a mount point a page root #266 + gate: hold each app's Nextcloud floor and its tested CI matrix together (fleet-wide) #267
- decidesk gate-60 icon-vocabulary reports 43 confident FAILs when node_modules is absent — 'Calendar does not exist in vue-material-design-icons' #233 + gate-19: a TRAILING COMMA before the closing paren makes a real test read as an empty body — false RED #234
- mydash gate-49 does not recognise catch (\\Throwable), which is strictly broader than the nine it tracks #204 + Every reason-bearing gate opt-out is unreachable on a PR: HYDRA_GATE_PR_BODY is never set, and git log -1 reads the merge commit #205
- nldesign TUTORIAL | OpenSpec — retrofit en vervolgdelen (deel 3+) #95 + docs(hydra/operations): add retry-and-rebuild runbook + index entry #96
- nextcloud-app-template Hook auth-phrase fix + /review-pr local-testing docs #43 (single-branch deploy)
- deskdesk chore(deps): bump the npm_and_yarn group across 1 directory with 15 updates #29 + Remove website/ folder (migrated to conduction-website repo) #30 (caret widened ^2.6.1 → ^3.10.0)
- zaakafhandelapp gate-58 e2e-networkidle matches COMMENT lines — larpingapp reports 1 finding with zero live calls #230 (documentation only)
- larpingapp (LarpingNextApp) Fleet suppression & baseline audit: the fleet reports 185 PHPMD violations; the true figure is 8766 #155 + fix(quality): two dead gates in the coverage ratchet — an artifact that never existed, and a job deleted by an unrelated failure #156
- planix gate-19: an @e2e tag written INSIDE a test.describe.skip block still counts as coverage #210 + fix(gates): make the opt-outs reachable, stop rejecting \Throwable, end the icon deadlock #211 (caret widened ^2.10.0 → ^3.10.0)
- conduction-website CI: make per-app Newman integration suites CI-runnable (shared OR-seed recipe) + close PHP-test gaps #63 (root package-lock.json)
Verification: decidesk.conduction.nl post-deploy has zero
rel="stylesheet"/lib/*.css tags in — confirming the lazy-stylesheet move is live. Field-data CWV verification (LCP < 2.5s at p75) needs ~28 days of CrUX data; that gate stays open as a delayed check.
Metadata
Metadata
Assignees
Labels
No labels
Part of #75 (SEO epic).
What
Bundle the brand's render-blocking CSS files (
hex-rain.css,logo-memory.css,canal-footer.css,kade-cyclist.css) into a single stylesheet, lazy-load the partner-logo strip on conduction.nl, and preload the primary brand font. SEO audit measurement.Why
Audit found 5 render-blocking stylesheets in
<head>on every Conduction site. Each adds to LCP and TBT, both Google ranking signals post the March 2026 core update. Real-world LCP on www.conduction.nl is borderline acceptable; a small intervention bumps every site over the "good" threshold (LCP < 2.5s, INP < 200ms, CLS < 0.1 at p75).Where the work lives
Most of it is in
@conduction/docusaurus-preset. The fourlib/*.cssfiles are shipped from the preset'sstatic/lib/directory and inlined viaheadTagsor theme client modules.Approach
canal-footer.cssis below-fold).brand.css(preset already exports this).media="print" onload="this.media='all'"so the browser fetches them async without blocking render.<link rel="preload" as="font" crossorigin>.loading="lazy"to partner-logo strip + below-fold images on conduction.nl.Verification
Acceptance