Our first step should be replacing first-past-the-post voting with something that isn't mathematically guaranteed to result in a polarized two-party system.
something like https://en.wikipedia.org/wiki/Instant-runoff_voting?
IRV has the problem where gaining support can actually cost one the election (nonmonotonicity). From http://zesty.ca/voting/sim it seems that approval voting would work reasonably well.
My main point though is that we tend to place too much emphasis on how much new tech can help solve age-old, human nature driven problems.