Want to share our success story implementing custom dashboard widgets in our partner portal using AEC 2021. We were struggling with low partner engagement - partners would log in occasionally to check deal registrations but rarely explored other features.
We used the JS SDK to build personalized dashboard widgets showing each partner’s performance metrics, upcoming opportunities, and recommended training. The custom widgets pull data specific to each partner’s tier and specialization, making the dashboard immediately relevant when they log in.
The results were dramatic - partner portal logins increased 40% in the first quarter, and partners are now spending 3x more time in the portal per session. The key was making the data personal and actionable rather than showing generic metrics. Happy to share implementation details if others are considering similar customization.
Great question. We surveyed our top-performing partners first to understand what drove their behavior. The winning metrics were: pipeline value (their registered deals plus estimated commission), partner tier progress (showing how close they are to the next tier and its benefits), and competitive positioning (anonymized comparison to peer partners in their region). The training recommendations were based on certifications required for their next tier, which made them feel targeted rather than generic.
This is exactly what we need! What specific metrics did you include in the personalized widgets? We’re trying to figure out what data partners actually care about versus what we think they should care about.
We implemented click tracking on each widget using the AEC analytics API. Every interaction - expanding a widget, clicking through to details, downloading reports - gets logged. We review this data monthly to see which widgets drive engagement. Interestingly, the competitive positioning widget gets the most clicks but the pipeline value widget drives the most downstream actions (partners clicking through to work on deals). So we measure both engagement and business impact.
For implementation details, we used the JS SDK’s widget framework which made it relatively straightforward to build custom components. Each widget is a self-contained module that fetches its data and handles its own rendering. This modular approach means we can add or remove widgets without affecting others.
The key technical decision was choosing between client-side data fetching versus server-side rendering. We went with client-side fetching so the initial page load is fast - the dashboard shell loads immediately, then each widget fetches its data asynchronously. This creates a better perceived performance even though the total load time is similar.
One challenge we faced was ensuring data security - partners should only see their own data, not other partners’ information. We implemented row-level security in our pre-calculated data objects and validated permissions server-side before returning any data to the widgets. The JS SDK’s authentication framework made this straightforward.
The 40% increase in engagement translated to real business impact - we saw a 25% increase in deal registrations and partners completing certifications 30% faster. The personalized data made them more aware of opportunities and requirements. If you’re considering similar customization, I’d recommend starting with a pilot group of partners to validate which metrics resonate before rolling out broadly. Also, invest in the analytics infrastructure upfront so you can measure impact and iterate based on data rather than assumptions.
How did you handle the performance aspect of loading personalized data? With hundreds of partners logging in, I’d be concerned about database queries for custom calculations slowing down the dashboard load time.
Performance was definitely a concern. We implemented a nightly batch job that pre-calculates the metrics and stores them in custom objects. When a partner logs in, the dashboard widgets just read the pre-calculated data rather than running complex queries in real-time. The data is at most 24 hours old, which is acceptable for our use case since partner metrics don’t change minute-to-minute.