Technical challenges
Two areas were genuinely complex in the parts I worked on. First, the task board needed drag-and-drop reordering of both tasks and columns to stay consistent with the underlying data — a card's or column's position in the UI had to match its persisted order after every move. Second, the app combines two backends — a Firebase-backed layer for real-time features like conversations, and a separate REST API with its own token-refresh authentication — and keeping both in sync from the UI layer took care.
How I approached it
For the task board, drag-and-drop reordering was built on a dedicated drag-and-drop list component, with the app's own adapters and view models keeping each card's and column's position, category, and board assignment consistent as the user reordered them. For the dual-backend setup, the app's data layer separated Firebase-backed real-time features (conversations, presence) from REST-backed features behind a shared repository pattern, so the rest of the app could consume either source through the same view-model layer.


