Create a project task management application that helps users organize and track tasks across different projects. This assessment focuses on state management, drag-and-drop functionality, and dynamic updates.
-
Dashboard Page (
/app/page.js
)- Display project overview cards
- Show task completion statistics
- Recent activity feed
- Quick task creation button
-
Project Board Page (
/app/projects/[projectId]/page.js
)- Kanban-style board with columns:
- To Do
- In Progress
- Review
- Complete
- Drag and drop tasks between columns
- Column task count
- Project progress bar
- Kanban-style board with columns:
-
Task Component (
/app/components/Task.js
)- Display task details:
- Title
- Priority level
- Due date
- Assigned team member
- Time estimate
- Quick edit functionality
- Priority color coding
- Display task details:
-
Task Filters (
/app/components/TaskFilters.js
)- Filter by:
- Priority
- Assigned team member
- Due date range
- Save filter preferences
- Filter by:
// /app/data/projectData.js
export const projectData = {
projects: [
{
id: "proj1",
name: "Website Redesign",
description: "Modernize company website",
progress: 65,
columns: [
{
id: "todo",
title: "To Do",
tasks: [
{
id: "task1",
title: "Update homepage hero section",
priority: "high",
dueDate: "2024-11-15",
assignee: {
id: "user1",
name: "Alice Johnson",
avatar: "/avatars/alice.jpg"
},
timeEstimate: "4h",
tags: ["design", "frontend"]
}
]
},
{
id: "inprogress",
title: "In Progress",
tasks: [
{
id: "task2",
title: "Implement responsive navigation",
priority: "medium",
dueDate: "2024-11-10",
assignee: {
id: "user2",
name: "Bob Smith",
avatar: "/avatars/bob.jpg"
},
timeEstimate: "6h",
tags: ["frontend", "mobile"]
}
]
}
]
}
],
team: [
{
id: "user1",
name: "Alice Johnson",
role: "Designer",
avatar: "/avatars/alice.jpg"
},
{
id: "user2",
name: "Bob Smith",
role: "Developer",
avatar: "/avatars/bob.jpg"
}
]
}
export const activities = [
{
id: "act1",
type: "task_moved",
taskId: "task1",
from: "To Do",
to: "In Progress",
user: "Alice Johnson",
timestamp: "2024-10-30T10:30:00Z"
}
]
- Use Next.js 14 with App Router
- Implement drag and drop using
react-beautiful-dnd
or similar - Use CSS Modules or Tailwind CSS for styling
- Implement client-side state management
- Use proper TypeScript types
- Add optimistic updates for drag and drop operations
- Implement proper error handling and loading states
-
DraggableTask (
/app/components/DraggableTask.js
)- Handle drag and drop events
- Display task information
- Show drag preview
-
ProjectMetrics (
/app/components/ProjectMetrics.js
)- Display project statistics
- Progress visualization
- Task distribution chart
-
ActivityFeed (
/app/components/ActivityFeed.js
)- Real-time activity updates
- Activity grouping by date
- Activity filters
-
Interaction Design
- Smooth drag and drop
- Responsive animations
- Intuitive UI/UX
-
State Management
- Efficient updates
- Optimistic UI
- State persistence
-
Component Architecture
- Reusable components
- Proper prop drilling avoidance
- Event handling
-
Performance
- Efficient rendering
- Proper use of
useMemo
anduseCallback
- Loading state management
-
Code Quality
- TypeScript implementation
- Error handling
- Code organization
- Start with basic task display and movement
- Add drag and drop functionality
- Implement filters and sorting
- Add metrics and activity feed
- Polish UI and add animations
- Implement error handling and loading states
- Functioning task board with drag and drop
- Complete project overview dashboard
- Working filter system
- Activity tracking implementation
- Responsive design for all views
- Type definitions for all components