This project is a Kanban management tool.
It allow the user to create projects boards, and customize them to show what it needs to be done in a project.
A demo of the project visit can be found here
The components are styled using styled-components and sits on the /src/components
folder, all the components are implemented using styled-components
The board management occurs mostly on the Board
component, there is the place where the all the board state is managed, and through passing props to Column
and Card
components we make sure all business logic is centralized is that Board
component.
The drag-and-drop functionality is mostly handled by the library react-beautiful-dnd
, is a pretty straight-forward library and it required three parts to work, the first part is the DragDropContext
wrapping the drag-and-drop area and accepting a prop called dragEnd
the will notify us with the source and destination positions of the drag-and-drop movement, the second part is the Droppable
that wrap each Column
component and marks the place where each Card
could be dropped, and for the last part we use the Draggable
component that wrap each Card
component, this is what makes all cards allowed to be drag.
The project uses Next.js
react framework with typescript
;
styled-components
for the styling of components and the UI;
react-beautiful-dnd
for the drag-and-drop mechanism;
jest
for unit and snapshot testing;
cypress
for e2e testing;
husky
for running scripts on git-hooks like pre-commit
, pre-push
;
eslint
for code correctness analyses and standardize the project syntax.
prettier
for code formatting and enforce a consistent code styling through the project.
github-actions
for running tests on pushs to branches main
and staging
;
First, install the project dependencies with yarn
:
yarn install
Then, run the development server:
npm run dev
# or
yarn dev
Open http://localhost:3000 with your browser to see the result.
npm run test
# or
yarn test
npm run test:e2e:headless
# or
yarn test:e2e:headless
npm run test:e2e
# or
yarn test:e2e
npm run test:all
# or
yarn test:all
Some of the improvements that can be made in the future:
- Managing board state using
redux
or other state-management-library. - Using an api connected to a database to store the board state.
- Including authentication to access the board state.
- Allow better customization using the
styled-components
theming feature. - Allow the user to create more boards.
- Allow the user to change the default columns.