The first phase was a technical interview with a team lead - questions related to javascript, web app security (read OWASP), CORS, etc. I had a very good feeling after the interview.
Then I was given a coding task in javascript. Here was my big mistake - I tried to make it perfect, and spent 1 full-time week (40 working hours) for it. As a professional, I realized that such kind of task can't be done quickly and with high quality. So, yeah...
After checking it they say they were impressed and I had another technical interview with someone from the team. There were general questions on javascript, redux, web app development approaches, etc.
After that, there was a final interview with CTO and another team lead. The same as with the previous candidate - we've discussed things regarding my soft skills and personality. And the most interesting part - at the very end we've discussed my compensation expectations (btw, I've also discussed this MANY times at a much earlier stage with HR). CTO seemed to be unhappy with my answer. I had to prove why I deserve it and so on. Not sure why we need that kind of discussion.
A week after that I got a response, that I'm overqualified for that job. Maybe this is the real reason, maybe not, I don't know.
It would be completely ok to me if my coding task didn't take one week to do or if it would be paid. I'm rarely taking part in interviews, so, that is my unexpected experience - I thought that it makes sense to spend a lot of time on coding tasks if you are serious about the job and you feel that you're a good fit. I was wrong.
So, my advice to other candidates - don't spend much time on a coding task.