A full-stack Project Management Application (similar to Trello/Jira) with a React + Vite frontend and a Node.js + Express + MongoDB backend, built with a clean, modular architecture.
- Create and manage organizations
- Switch between organizations after login
- Multiple workspaces per organization
- Role-based access (Owner, Admin, Member)
- Invite members, change roles, transfer ownership, remove members
- Create boards inside workspaces
- View boards in a Kanban-style layout
- Update, archive, and delete boards
- Unique board names per workspace
- Create, update, delete tasks
- Assign tasks to users
- Set priority (
low,medium,high) - Track status (
todo,in_progress,done) - Due date support
- Task detail panel on the frontend
- Add comments on tasks
- Reply to comments (threaded system)
- Delete comments (soft delete)
- View comments from the task detail panel
-
Tracks all major actions:
- Workspace creation
- Board updates
- Task actions
- Comments
-
Activity feed page for audit & tracking
- JWT-based authentication
- Access Token + Refresh Token system
- Organization-level context validation
- Role-based access control (backend + UI)
- Protected frontend routes
- Automatic token refresh on the client
-
User registers or logs in via the frontend
-
Backend returns:
accessToken(short-lived)refreshToken(long-lived)
-
Frontend stores tokens in
localStorage
- After login, user selects or creates an organization
- Backend returns an org-scoped access token with
orgIdandorgRole - Frontend stores the active organization context
-
When the access token expires:
- Frontend calls the refresh endpoint automatically
- Backend returns a new access token
- Original API request is retried
- Frontend calls logout API
- Backend invalidates refresh token
- Client clears tokens and active organization
Page
/register
API
POST /auth/register
Page
/login
API
POST /auth/login
Response:
{
"accessToken": "...",
"refreshToken": "..."
}
API
POST /auth/refresh
Request:
{
"refreshToken": "...",
"organizationId": "<active org id>"
}
API
POST /auth/logout
-
Implemented for task listing
-
Supports:
pagelimit
- Node.js
- Express.js
- MongoDB + Mongoose
- JWT (Authentication)
- Custom Middleware Architecture
- React 19
- Vite
- Redux Toolkit
- React Router
- Tailwind CSS
- Fetch API (custom API client with auth refresh)
ProjectManagementPlatform/
backend/
config/
middleware/
modules/
auth/
organization/
membership/
workspace/
boards/
tasks/
comments/
activity/
users/
routes/
utils/
index.js
readMe.md
frontend/
src/
app/
features/
auth/
organizations/
members/
workspaces/
boards/
tasks/
comments/
activity/
dashboard/
health/
shared/
api/
config/
lib/
ui/
widgets/
layout/
App.jsx
main.jsx
index.css
readMe.md
http://localhost:8080/api/v1
https://flow-board-project-management-platform.onrender.com/api/v1
Create frontend/.env:
VITE_API_BASE_URL=http://localhost:8080/api/v1
API
POST /auth/register
POST /auth/login
POST /auth/refresh
POST /auth/logout
Pages
/login
/register
API
POST /organizations
GET /organizations
POST /organizations/switch
GET /organizations/:id
Pages
/organizations
/dashboard
API
GET /members
POST /members/invite
PATCH /members/role
POST /members/transfer-ownership
DELETE /members/:userId
Pages
/members
API
POST /workspaces
GET /workspaces
GET /workspaces/:workspaceId
PATCH /workspaces/update/:workspaceId
PATCH /workspaces/archive/:workspaceId
DELETE /workspaces/:workspaceId
Pages
/workspaces
/workspaces/:workspaceId
/workspaces/:workspaceId/boards/:boardId
API
POST /boards
GET /boards/workspace/:workspaceId
GET /boards/workspace/:workspaceId/:boardId
PATCH /boards/workspace/:workspaceId/:boardId
PATCH /boards/workspace/:workspaceId/archive/:boardId
DELETE /boards/workspace/:workspaceId/:boardId
API
POST /tasks
GET /tasks/board/:workspaceId/:boardId
GET /tasks/board/:workspaceId/:boardId/:taskId
PATCH /tasks/board/:workspaceId/:boardId/:taskId
DELETE /tasks/board/:workspaceId/:boardId/:taskId
API
POST /comments
GET /comments/task/:taskId
DELETE /comments/:commentId
API
GET /activity
Pages
/activity
GET /tasks/board/:workspaceId/:boardId?page=1&limit=5
Response:
{
"tasks": [...],
"pagination": {
"total": 25,
"page": 1,
"limit": 5,
"totalPages": 5
}
}
- JWT Authentication (Access + Refresh tokens)
- Role-based authorization on backend routes
- Organization-level data isolation
- Protected frontend routes and org context guard
- Automatic access token refresh on the client
- Bearer token attached to authenticated API requests
- Input validation checks
This project follows:
Backend
- Controller β Service β Repository pattern
- Separation of concerns
- Scalable and maintainable structure
Frontend
- Feature-based folder structure (
features/<domain>/api,components,store) - Shared UI components and utilities in
shared/ - Central API client with intercept-style refresh retry
- Redux Toolkit for auth and organization state
- React Router for nested layouts and protected navigation
- Notifications system
- File uploads (attachments)
- Real-time updates (Socket.io)
- Search & filtering
- API documentation (Swagger)
- Dark/light theme toggle
- End-to-end tests (Playwright / Cypress)
Varun Jain
This platform is:
- β Fully functional (frontend + backend)
- β Scalable and modular
- β Production-ready (core level)
- β Connected end-to-end with JWT auth and org context
- β Ready for deployment
π See backend/readMe.md and frontend/readMe.md for module-specific details π