Query patterns, caching, and hook discipline that keep gated areas fast as your member table grows.
Most slow Velo portals are slow for the same three reasons: unindexed queries, data fetched on every render, and hooks doing work that belongs in a scheduled job.
Model your collections around read patterns, not around how the data feels organised. If a dashboard shows six fields, do not fetch documents with forty. Use field projection, paginate aggressively, and cache reference lookups in memory for the session.
Move anything that does not need to be synchronous into a scheduled job. Report generation, email digests, and third-party syncs should never sit in the request path of a page load.