It was a suitelet that served an html page with a vue.js component to render the google map. I don't remember exactly which vue component I ended up using, but it may have been
https://github.com/xkjyeah/vue-google-maps. On page load or whenever the map position was changed, it would make an ajax request back to the suitelet to retrieve a list of addresses within the bounds and update the map accordingly. All addresses were already geo-located via a separate integration. I also color coded the markers based on 12 month customer spend. If it needed to be a portlet, I would have probably just served the suitelet in an iframe