Wanted to share a few things I learned working on a Vue.js member portal for a national professional association (ALPFA Plus). Posting partly to compare notes, partly because I haven't seen many IH posts about member-portal-style products specifically, even though they're a great vertical for indie builders.
A few things that surprised me:
- The product is the dashboard. Marketing site gets the budget and the attention, but members live in the dashboard. The dashboard is where renewals, retention, and word-of-mouth actually happen. Most associations under-invest in it.
- Entitlement caching is its own problem. You can't hit the API every time a member loads a benefits page, but you can't show stale state when their plan changes either. The pattern that worked: short TTL cache + event-driven invalidation + a visible "refresh" affordance.
- RUM > server metrics. New Relic's real-user monitoring caught performance issues that backend dashboards completely missed. Server-side p99 said "everything's fast." Browser p75 said "members on older Android phones are waiting 4 seconds." Both true. Only one of them mattered.
- Privacy compliance isn't a banner — it's a script-loading pattern. Osano handles the consent UI, but the actual compliance comes from gating analytics scripts behind the consent callback. Loading them and "letting Osano block them" isn't the same thing.
The stack ended up being Vue.js + Axios + AWS CloudFront + New Relic + Osano + GA/GTM. Nothing exotic. Most of the work was in how the pieces talk to each other, not the pieces themselves.
If anyone else has built or is building in the membership / association / community space, I'd love to compare notes — especially on:
What stack you went with and why
How you handle the member dashboard as a "product" vs. a "page"
What metrics you actually pay attention to
Happy to answer questions about anything above.