Thanks to this answer I managed to come up with a temporary solution to my problem.
However, with a list of 6000 points that grows everyday it's becoming slower and slower.
I can't use a third party service* therefore I need to come up with my own solution.
Here are my requirements:
Clustering of the coordinates need to work with any zoom level of the map.
All clusters need to be cached
Ideally there won't be a need to cluster (calculate distances) on all points if a new point is added.
So far I have implemented quadtree that returns the four boundaries of my map and returns whatever coordinates are within the viewable section of the map.
What I need and I know this isn't easy is to have clusters of the points returned from the DB (postgres).