frontend: reorganize components