A modern, responsive Trello clone built with React, Node.js, and Supabase. Features drag-and-drop functionality, real-time updates, and a clean, intuitive interface.
- List Management: Create, edit, and delete lists
- Card Management: Add, edit, delete, and move cards between lists
- Drag & Drop: Intuitive drag-and-drop interface using react-beautiful-dnd
- Card Details: Support for titles, descriptions, labels, and due dates
- Modern Design: Clean, responsive UI with glassmorphism effects
- Real-time Updates: Asynchronous data persistence with Supabase
- React 18
- Styled Components
- React Beautiful DnD
- Axios for API calls
- Node.js
- Express.js
- Supabase Client
- CORS support
- Supabase (PostgreSQL) with JSONB support for labels
trello-clone/
├── client/ # React frontend
│ ├── public/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── services/ # API services
│ │ └── ...
│ └── package.json
├── server/ # Node.js backend
│ ├── config/ # Database configuration
│ ├── routes/ # API routes
│ ├── database.sql # Database schema
│ └── package.json
└── package.json # Root package.json
- Node.js (v14 or higher)
- Supabase account
- npm or yarn
-
Create a new Supabase project at supabase.com
-
Run the migration script in your Supabase SQL editor:
# Copy and paste the contents of server/supabase-migration.sql
# into your Supabase SQL editor and execute
- Update database credentials in
server/.env
(REQUIRED):
PORT=5000
SUPABASE_URL=your_supabase_project_url # Replace with your actual Supabase URL
SUPABASE_ANON_KEY=your_supabase_anon_key # Replace with your actual anon key
- Get your
SUPABASE_URL
andSUPABASE_ANON_KEY
from your Supabase project settings - Go to Settings > API in your Supabase dashboard
- Copy the values and paste them into your
server/.env
file
- Install all dependencies:
npm run install-all
- Start the development servers:
npm run dev
This will start:
- Backend server on http://localhost:5000
- Frontend development server on http://localhost:3000
Backend only:
cd server && npm run dev
Frontend only:
cd client && npm start
GET /api/lists
- Get all lists with cardsPOST /api/lists
- Create a new listPUT /api/lists/:id
- Update list titleDELETE /api/lists/:id
- Delete a list
POST /api/cards
- Create a new cardPUT /api/cards/:id
- Update card detailsPUT /api/cards/:id/move
- Move card to different list/positionDELETE /api/cards/:id
- Delete a card
- Creating Lists: Click "Add another list" to create new columns
- Adding Cards: Click "Add a card" within any list
- Editing Cards: Click on any card to open the edit modal
- Moving Cards: Drag and drop cards between lists or reorder within lists
- Managing Lists: Click on list titles to edit, use delete button to remove
id
(UUID): Unique identifier (auto-generated)title
(VARCHAR): List titleposition
(INTEGER): Display ordercreated_at
,updated_at
(TIMESTAMP WITH TIME ZONE)
id
(UUID): Unique identifier (auto-generated)title
(VARCHAR): Card titledescription
(TEXT): Card descriptionlist_id
(UUID): Foreign key to listsposition
(INTEGER): Position within listlabels
(JSONB): Array of label stringsdue_date
(DATE): Optional due datecreated_at
,updated_at
(TIMESTAMP WITH TIME ZONE)
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
MIT License