join contests with backend logic