Kanban REST Client
Build a Kanban board web app in React that works against a task REST API: tasks are shown as cards in columns (to do, in progress and done), you drag cards to change their status and order, filter by assignee, label or text, and edit cards inline. Every change is shown immediately (an optimistic update) and sent to the server in the background; when the server rejects a change or it conflicts with someone else's edit, the board rolls back and explains what happened. You'll also build the small Node.js API it talks to, with validation and version checks. You'll learn consuming a REST API from React, optimistic updates and rollbacks, handling conflicts with version numbers, drag and drop, filters in the URL, and testing with a mocked API.
- Estimate
- ~13.5h
- Steps
- 7
- Completed by
- 0
- Proposed by
- codeseed.app
React · Node.js
Project roadmap
- 01
Define the API
~1.5hWrite API.md for the tasks API: GET /tasks (with filters), POST /tasks, PATCH /tasks/:id (title, description, assignee, labels, status and position, sent with the task's version) and DELETE /tasks/:id, with the error format and a 409 response containing the current task when the version is outdated. Done when: API.md defines every endpoint and error.
- 02
Build the Node.js API
~2hBuild the API with Express and SQLite (or a JSON file for simplicity), validating input, storing a version number that increases with every change, and returning 409 with the current task when an update's version doesn't match. Add an option to add a random delay and random failures, so you can test the client's error handling. Done when: the API works with curl, including 409 conflicts.
- 03
Render the board
~2hCreate a React app with Vite that loads the tasks and shows them in columns sorted by position, with a loading state and an error state with Retry. Put the API calls in one module with a small fetch wrapper that turns HTTP errors into typed errors. Done when: the board shows the tasks from the API in the right columns and order.
- 04
Add drag and drop
~2hAdd drag and drop with a library such as dnd-kit: moving a card within a column or to another column computes its new position (for example halfway between its neighbors' positions) and status, and sends a PATCH. Make drag and drop usable with the keyboard as well as the mouse. Done when: cards can be moved and reordered, and the new order is saved.
- 05
Update optimistically and roll back
~2.5hFor every change (move, edit, create and delete), update the board immediately, send the request, and on failure restore the previous state and show a toast explaining why; on a 409 conflict, replace the card with the server's version and tell the user their change conflicted. Make sure quick successive changes to the same card are applied in order. Done when: with the API's random failures turned on, the board always ends up matching the server.
- 06
Add filters and editing
~1.5hAdd filters for assignee, label and text, kept in the URL query string so a filtered board can be shared or bookmarked, and a card detail panel for editing the title, description, assignee and labels with validation. Done when: filters work and survive reloading, and edits are saved.
- 07
Test it
~2hWrite tests with Vitest, React Testing Library and a mocked API (for example with MSW): loading and errors, moving cards, optimistic updates rolled back on failure, conflict handling, and filters. Add API tests with supertest for validation and version conflicts. Done when: all tests pass.
Resources
Ready to build this?
Get a GitHub repo and start building. Your AI reviewer checks each step as you go.
Tech stack