- Astro
client:loadstill SSRs — Components usingclient:loadare server-rendered first, then hydrated. If a component depends on browser-only APIs or env vars not available at build time (like Convex'sPUBLIC_CONVEX_URL), useclient:only="react"to skip SSR entirely. - Astro islands are independent React roots — You cannot share a React context provider across islands. Each island that needs ConvexProvider must wrap its own. Consolidate into fewer, larger islands to reduce WebSocket connections.
- Astro
.envoverrides.env.local— If a key exists in.env(even empty), it takes precedence over.env.local. Convex writesCONVEX_URLto.env.localbut Astro needsPUBLIC_prefix for client access. - CSP
connect-srcwildcards don't coverwss://—*.convex.cloudonly matches HTTPS. WebSocket connections need explicitwss://*.convex.cloud. - Fathom
data-spa="auto"is unnecessary for Astro — Astro does full page loads, not client-side navigation. The default Fathom script handles tracking without it. - Fathom tracks preview deployments — Without domain filtering (dashboard firewall or
data-included-domains), Vercel preview URLs inflate analytics.