The Capstone Project

Build a production-ready Kanban Board.

The Brief

You are applying for a Senior Frontend Developer role. This is your take-home assignment. The goal is not just to make it work, but to make it maintainable, performant, and accessible.

Project: "TaskMaster Pro"

A Trello-style Kanban board with drag-and-drop functionality, persistent state, and URL-driven navigation.

CAP-101 To Do

MVP: Core Board Functionality

User Story

As a user, I want to organize my tasks into columns so I can track progress.

Acceptance Criteria
  • Columns: Three fixed columns: "To Do", "In Progress", "Done".
  • CRUD: Create, Read, Update, and Delete tasks.
  • State: Use Zustand for global state management.
  • Persistence: Save data to localStorage automatically.
Technical Requirement (Interfaces)
export type Status = 'TODO' | 'IN_PROGRESS' | 'DONE';

export interface Task {
  id: string;
  title: string;
  description: string;
  status: Status;
  createdAt: number;
}

export interface BoardState {
  tasks: Task[];
  addTask: (title: string, status: Status) => void;
  moveTask: (id: string, newStatus: Status) => void;
  deleteTask: (id: string) => void;
}
CAP-102 To Do

Senior Feature: Drag & Drop

User Story

As a user, I want to drag tasks between columns for a natural interaction.

Acceptance Criteria
  • Implement dnd-kit (recommended) or react-beautiful-dnd.
  • Tasks must visually snap into place.
  • Accessibility: Must support keyboard navigation (Space to lift, Arrows to move, Space to drop).
CAP-103 To Do

Senior Feature: URL-Driven Modals

User Story

As a user, I want to share a link to a specific task with my colleague.

Acceptance Criteria
  • Clicking a task opens a modal.
  • The URL must update to /board/task/123.
  • Refreshing the page at that URL must open the board and the modal immediately.
  • Closing the modal returns the URL to /board.
CAP-104 To Do

Quality Assurance

User Story

As a developer, I want to ensure the app is robust and bug-free.

Acceptance Criteria
  • Testing: Write unit tests for the `TaskCard` and integration tests for the "Add Task" flow.
  • Performance: Use React.memo on `TaskCard`. Ensure dragging one card doesn't re-render the whole board.
  • Linting: No ESLint warnings or TypeScript errors.

🏁 Final Challenge: The "Clean Slate"

Once you build this project and it works perfectly:

  1. Delete the entire folder.
  2. Rebuild it from scratch without looking at your old code.

This is the only way to know if you truly understand the concepts or if you were just copying code. Good luck.