This project is a custom Kanban board application built using modern web technologies. It provides a visual interface for managing tasks and workflows, allowing users to create, organize, and track tasks across different stages of completion.
- User Authentication: Implemented using Firebase Authentication for secure access.
- Client-Side Caching: Implemented caching to reduce load times on a read-heavy system.
- Real-time Updates: Utilizes Firestore for live data synchronization across users.
- Drag and Drop: Tasks can be easily moved between columns using drag and drop functionality.
- Customizable Boards: Users can create multiple boards and customize them with different columns and groups.
- Task Management: Create, edit, and delete tasks with various attributes like title, description, assignee, due date, and priority.
- Filtering: Tasks can be filtered by group/subteam for easier management.
- Responsive Design: Built with a mobile-first approach using Tailwind CSS for responsiveness across devices.
- React: Frontend library for building the user interface.
- Vite: Build tool and development server for faster development.
- Firebase: Backend-as-a-Service (BaaS) for authentication, database, and hosting.
- Material-UI: React component library for consistent and attractive UI elements.
- React DnD: Library for implementing drag and drop functionality.
- Tailwind CSS: Utility-first CSS framework for rapid UI development.
- ESLint: Linting tool for maintaining code quality and consistency.
The project follows a modular structure with separate directories for components, pages, and contexts:
src/components: Reusable UI components like BoardItem, Column, and Header.src/pages: Main page components for Home, Board, and Authentication.src/contexts: React contexts for managing authentication and groups state.
The application uses Firestore's onSnapshot listener to provide real-time updates to the board and its items. This ensures that all users see the most up-to-date information without needing to refresh the page.
const unsubscribe = onSnapshot(q, (querySnapshot) => {
const items = querySnapshot.docs.map((doc) => ({
id: doc.id,
...doc.data(),
}));
setItems(items);
});React DnD is implemented to allow for intuitive task movement between columns. This enhances the user experience by providing a visual way to update task statuses.
const [, drop] = useDrop(() => ({
accept: "BOARD_ITEM",
drop: (draggedItem) => {
const updatedItem = { ...draggedItem, status: name.toLowerCase() };
updateItemStatus(id, updatedItem);
},
}));The project leverages React's Context API for managing global state, particularly for user authentication and group data. This allows for efficient state management without prop drilling.
export const AuthContext = createContext();
export const AuthProvider = ({ children }) => {
// ... authentication logic
};-
Real-time Synchronization: Implementing real-time updates while maintaining performance was challenging. This was addressed by optimizing Firestore queries and using efficient React state management.
-
Drag and Drop Complexity: Integrating drag and drop functionality with real-time updates required careful state management to avoid conflicts between local and server states.
-
Authentication Flow: Creating a seamless authentication experience while ensuring security and proper access control to boards and tasks required intricate integration with Firebase Authentication.
-
Performance Optimization: With potentially large numbers of tasks and real-time updates, optimizing performance was crucial. This was achieved through efficient rendering techniques and data fetching strategies.
- Implement more advanced filtering and sorting options for tasks.
- Add data visualization features for project progress and team productivity.
- Integrate with external tools and APIs for enhanced functionality.
- Implement offline support for better user experience in low-connectivity situations.
- Clone the repository
- Install dependencies:
npm install - Set up a Firebase project and update the configuration in
src/Firebase.jsx - Run the development server:
npm run dev
The project is configured for deployment on Firebase Hosting. Use the following commands to deploy:
npm run build
firebase deploy
