From your Best practices note and the performance part of Important.
defineAsyncComponent, check the bundle, load third-party scripts late.shallowRef for large data, stable keys and props, no needless deep watchers; v-once for static content, v-memo for large lists.aria-label, aria-labelledby, aria-describedby; aria-hidden only on non-focusable decoration; labels instead of placeholders.v-html with user content is XSS; validate user URLs in :href; never compile user content as a template.Semantic elements like <header>, <nav>, <main> and <footer> map to ARIA landmark roles (banner, navigation, main, contentinfo), not to ARIA labels. A label names an element; a role says what it is.
"loadAsyncComponent" in the performance list is defineAsyncComponent.
"First measure, so I know whether it's loading or updating. For loading: lazy routes and async components, a smaller bundle, third-party scripts later. For updates: computeds instead of template methods, shallowRef for big data, stable keys and props, fewer deep watchers, v-once and v-memo where they fit. And a long list gets virtual scrolling, because the DOM itself is usually the cost."
Nothing yet. Notes filed here show up on this page and the section overview.
Built-ins and tooling
KeepAlive and its cache, Teleport for modals, what Suspense waits for, Vite versus webpack and Rolldown in Vite 8, how Vue Router works, and what Pinia adds over a shared reactive object.
Hydration errors
What hydration is, why a mismatch costs more than a console warning, and why the author of a layer or module owns the problem for every app that consumes it.