Redesign: separate backend and frontend