Vibe coding explained: how AI is changing software development