https://github.com/techycsr/trello
A modern Trello-style productivity workspace with boards, inbox capture, Kanban lists, draggable cards, card details, labels, checklists, due dates, members, comments, activity history, and responsive mobile/desktop layouts.
https://github.com/techycsr/trello
project-management trello
Last synced: 14 days ago
JSON representation
A modern Trello-style productivity workspace with boards, inbox capture, Kanban lists, draggable cards, card details, labels, checklists, due dates, members, comments, activity history, and responsive mobile/desktop layouts.
- Host: GitHub
- URL: https://github.com/techycsr/trello
- Owner: TechyCSR
- Created: 2026-05-22T17:30:18.000Z (21 days ago)
- Default Branch: main
- Last Pushed: 2026-05-24T10:21:33.000Z (20 days ago)
- Last Synced: 2026-05-24T12:08:01.421Z (20 days ago)
- Topics: project-management, trello
- Language: TypeScript
- Homepage: https://trello.techycsr.dev
- Size: 239 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Trello-Inspired Kanban Workspace
A modern Trello-style productivity workspace with boards, inbox capture, Kanban lists, draggable cards, card details, labels, checklists, due dates, members, comments, activity history, and responsive mobile/desktop layouts.
Live deployment:
- Frontend: https://trello.techycsr.dev/
- Backend health check: https://trello-d5l0.onrender.com/health
## Features
- Multi-board workspace with board dashboard.
- Inbox section for quick task/card capture.
- Board section with horizontal Kanban lists.
- Drag and drop cards between lists and back to inbox.
- Create, rename, reorder, collapse, and delete lists.
- Create, edit, archive, and delete cards.
- Card detail modal with title, description, labels, due date, checklist items, comments, and activity.
- Global user assignment with avatar images.
- Multiple simulated users with account switching from the navbar.
- Board switching modal.
- Responsive mobile layout with one active workspace section at a time.
- Vercel frontend deployment and Render backend deployment.
## Tech Stack
Frontend:
- React 18
- Vite
- TypeScript
- Tailwind CSS
- Zustand
- Axios
- React Router
- dnd-kit
- Radix UI primitives
- Lucide icons
Backend:
- FastAPI
- SQLAlchemy
- Pydantic
- PostgreSQL
- Uvicorn
Deployment:
- Vercel for frontend
- Render for backend
- PostgreSQL database, for example Neon or Render Postgres
## Project Structure
```text
frontend/ React + Vite frontend
backend/ FastAPI backend
```
Important files:
```text
frontend/vercel.json Vercel config when frontend is selected as root
backend/runtime.txt Python runtime pin
backend/.python-version Python version for Render
render.yaml Optional Render Blueprint config
```
## Local Setup
### 1. Backend
Create and activate a Python environment:
```powershell
py -3.11 -m venv backend\.venv
backend\.venv\Scripts\python.exe -m pip install -r backend\requirements.txt
```
Create the backend environment file:
```powershell
Copy-Item backend\.env.example backend\.env
```
Example `backend/.env`:
```env
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/trello_kanban
CORS_ORIGINS=http://localhost:5173
CORS_ORIGIN_REGEX=
AUTO_SEED=true
```
Run the backend:
```powershell
cd backend
.\.venv\Scripts\python.exe -m uvicorn app.main:app --reload
```
Backend health check:
```text
http://localhost:8000/health
```
### 2. Frontend
Install dependencies:
```powershell
cd frontend
npm install
```
Create `frontend/.env`:
```env
VITE_API_URL=http://localhost:8000
```
Run the frontend:
```powershell
npm run dev
```
Frontend URL:
```text
http://localhost:5173
```
## Build Checks
Frontend:
```powershell
cd frontend
npm run build
```
Backend import check:
```powershell
cd backend
$env:PYTHONDONTWRITEBYTECODE='1'
python -B -c "import app.main"
```
## Environment Variables
### Frontend
```env
VITE_API_URL=https://trello-d5l0.onrender.com
```
### Backend
```env
PYTHON_VERSION=3.11.9
DATABASE_URL=postgresql://USER:PASSWORD@HOST:5432/DBNAME
CORS_ORIGINS=https://trello.techycsr.dev
CORS_ORIGIN_REGEX=^https://.*\.vercel\.app$
AUTO_SEED=true
```
Use `CORS_ORIGINS` for exact frontend domains. Use `CORS_ORIGIN_REGEX` if you want Vercel preview deployments to call the backend.
## Deployment
### Frontend on Vercel
Use these Vercel settings:
- Root Directory: `frontend`
- Install Command: `npm ci`
- Build Command: `npm run build`
- Output Directory: `dist`
Set this Vercel environment variable:
```env
VITE_API_URL=https://trello-d5l0.onrender.com
```
The project includes `frontend/vercel.json` for SPA routing fallback.
### Backend on Render
Use these Render settings:
- Root Directory: `backend`
- Build Command: `pip install -r requirements.txt`
- Start Command: `uvicorn app.main:app --host 0.0.0.0 --port $PORT`
- Health Check Path: `/health`
Set these Render environment variables:
```env
PYTHON_VERSION=3.11.9
DATABASE_URL=postgresql://USER:PASSWORD@HOST:5432/DBNAME
CORS_ORIGINS=https://trello.techycsr.dev
CORS_ORIGIN_REGEX=^https://.*\.vercel\.app$
AUTO_SEED=true
```
Python is pinned to `3.11.9` because newer Render defaults can force native dependencies such as `pydantic-core` to compile from source.
## API Overview
Users:
- `GET /users`
Boards:
- `GET /boards`
- `POST /boards`
- `GET /boards/{board_id_or_code}`
- `PATCH /boards/{board_id}`
- `DELETE /boards/{board_id}`
Lists:
- `POST /lists`
- `PATCH /lists/{list_id}`
- `DELETE /lists/{list_id}`
- `PATCH /lists/reorder`
Cards:
- `POST /cards`
- `PATCH /cards/{card_id}`
- `DELETE /cards/{card_id}`
- `PATCH /cards/move`
- `POST /cards/{card_id}/comments`
- `GET /cards/search`
Labels:
- `POST /labels`
## Data Model Summary
The backend stores:
- Users
- Boards
- Board members
- Lists
- Cards
- Labels
- Card labels
- Card members
- Checklists
- Checklist items
- Card activity records
List and card ordering use numeric `position` values so items can move smoothly without renumbering every row.
## Multi-User Support
This app supports simulated multi-user collaboration.
Assumptions:
- There is no password-based authentication in this assignment build.
- The active user is selected in the UI and stored in `localStorage`.
- Requests send the selected user through the `X-USER-ID` header.
- The backend validates board access using board ownership, board membership, or share-token access.
- Global users can be assigned to cards.
- Activity records store which user performed a card action when available.
Seeded users include:
```text
TechyCSR, Alex, Sarah, John, Emma, Liam, Sophia, Noah, Olivia, Ethan
```
## Runtime Schema
The backend uses SQLAlchemy `create_all` plus additive runtime schema patching for assignment-friendly deployment. This keeps older local or hosted databases compatible without requiring Alembic migrations.
For a production-grade long-term project, Alembic migrations would be the next step.
## Assumptions and Notes
- Production database should be PostgreSQL.
- SQLite fallback exists for quick local smoke checks.
- Render free instances can cold start, so the frontend API timeout is set higher than a local-only app.
- Uploaded file attachments are not implemented; card covers use colors or external image URLs.
- Real-time WebSocket collaboration is not implemented yet.
- The current deployment is designed for Vercel frontend and Render backend.
## Future Improvements
- Add real authentication and invite-based permissions.
- Add WebSocket live updates.
- Add archived-card browsing and restore actions.
- Add file attachments.
- Add Alembic migrations.
- Add Playwright end-to-end tests for drag/drop and card editing.