A web-based project and task management application built with Node.js, Express, EJS, PostgreSQL, and Prisma ORM.
This application enables teams to manage projects, assign tasks, track progress, and collaborate effectively.
- ✅ Project Management — Create, edit, and delete projects
- ✅ Task Management — Manage tasks with priorities, deadlines, and statuses
- ✅ Team Collaboration — Assign tasks to team members
- ✅ Progress Tracking — Monitor project and task progress in real-time
- ✅ Responsive Interface — Access from desktop, tablet, or mobile
- 🔑 User Authentication — Login/register with session management
- 👁️ Public Access — View projects and tasks without login (read-only)
- 🛡️ Role-based Access — Only project owners can edit
- 📊 Statistics Dashboard — Review project and task metrics
- 🔔 Status Notifications — Alerts for approaching deadlines
- 🎯 Task Prioritization — Priority system (Low, Medium, High, Urgent)
- 📅 Time Management — Manage timelines and deadlines
- 💻 Modern UI/UX — Built with Bootstrap 5 for a user-friendly experience
- Node.js — JavaScript runtime
- Express.js — Web framework
- Express Session — Session management
- BCryptJS — Password encryption
- Connect Flash — Flash message system
- EJS — Template engine
- Bootstrap 5 — CSS framework
- Font Awesome — Icons
- JavaScript — Client-side scripting
- PostgreSQL — Relational database
- Prisma ORM — Database toolkit and ORM
- Docker — Containerization
- Nodemon — Auto-restart during development
- Dotenv — Manage environment variables
web-pm/
├─ src/
│ ├─ controllers/
│ │ ├─ authController.js
│ │ ├─ projectController.js
│ │ └─ taskController.js
│ ├─ middlewares/
│ │ ├─ auth.js
│ │ └─ flash.js
│ ├─ routes/
│ │ ├─ auth.js
│ │ ├─ projects.js
│ │ ├─ tasks.js
│ │ └─ public.js
│ ├─ views/
│ │ ├─ layouts/
│ │ │ ├─ main.ejs
│ │ │ └─ public.ejs
│ │ ├─ public/
│ │ │ ├─ projects.ejs
│ │ │ ├─ project-detail.ejs
│ │ │ └─ tasks.ejs
│ │ ├─ projects/
│ │ │ ├─ list.ejs
│ │ │ ├─ show.ejs
│ │ │ └─ edit.ejs
│ │ ├─ tasks/
│ │ │ ├─ list.ejs
│ │ │ └─ show.ejs
│ │ ├─ index.ejs
│ │ ├─ login.ejs
│ │ └─ register.ejs
│ ├─ utils/
│ │ └─ password.js
│ ├─ prismaClient.js
│ └─ app.js
├─ prisma/
│ ├─ schema.prisma
│ └─ seed.js
├─ .env
├─ docker-compose.yml
├─ package.json
└─ README.md
- Node.js (v16 or higher)
- Docker & Docker Compose
- PostgreSQL (or use Docker container)
-
Clone repository
git clone <repository-url> cd web-pm
-
Install dependencies
npm install
-
Setup environment variables
cp .env.example .env
Edit
.envfile:DATABASE_URL="postgresql://admin:password@localhost:5432/project_management?schema=public" SESSION_SECRET="your-secret-key-here" PORT=3000
-
Run database with Docker
docker-compose up -d
-
Setup Prisma and seed database
npx prisma generate npx prisma db push npm run db:seed
-
Run the application
# Development npm run dev # Production npm start
-
Access the application
- Open your browser: http://localhost:3000
| Password | |
|---|---|
| admin@example.com | password123 |
| Field | Description |
|---|---|
| id | Unique identifier |
| User email (unique) | |
| password | Encrypted password |
| name | Full name |
| projects | One-to-many relation to Project |
| tasks | One-to-many relation to Task |
| Field | Description |
|---|---|
| id | Unique identifier |
| name | Project name |
| description | Project description |
| startDate | Start date |
| endDate | End date |
| managerId | User who created the project |
| tasks | One-to-many relation to Task |
| Field | Description |
|---|---|
| id | Unique identifier |
| title | Task title |
| description | Task description |
| status | Task status (PENDING, IN_PROGRESS, COMPLETED, CANCELLED) |
| priority | Priority (LOW, MEDIUM, HIGH, URGENT) |
| dueDate | Deadline |
| projectId | Related project ID |
| assigneeId | Assigned user ID |
GET /— Home pageGET /public/projects— List public projectsGET /public/projects/:id— Project detailsGET /public/tasks— List public tasks
GET /login— Login formPOST /auth/login— LoginGET /register— Registration formPOST /auth/register— RegisterPOST /auth/logout— Logout
GET /projects— List user’s projectsGET /projects/:id— View project detailsGET /projects/:id/edit— Edit projectPOST /projects— Create projectPUT /projects/:id— Update projectDELETE /projects/:id— Delete project
GET /tasks— List tasksGET /tasks/:id— Task detailsPOST /tasks— Create taskPUT /tasks/:id— Update taskPATCH /tasks/:id/status— Update statusDELETE /tasks/:id— Delete task
- Register an account
- Login with your credentials
- Create a project
- Add tasks to your project
- Create/edit/delete projects and tasks
- Assign members and manage priorities
- Track project progress
- View dashboards and notifications
- Guests can view projects/tasks (read-only)
- Share project links publicly
| Issue | Solution |
|---|---|
| Database connection error | Ensure Docker is running and .env is configured correctly |
| Prisma client error | Run npx prisma generate then restart app |
| Session error | Set SESSION_SECRET in .env and clear cookies |
| Port already in use | Change PORT in .env or stop conflicting process |
# Run app with auto reload
npm run dev
# Prisma commands
npx prisma db push
npx prisma studio
npm run db:seed
# Production mode
npm start- Fork the repository
- Create a new branch
git checkout -b feature/awesome-feature
- Commit your changes
git commit -m "Add awesome feature" - Push to branch
git push origin feature/awesome-feature
- Create a Pull Request
Guidelines
- Follow existing coding style
- Add tests for new features
- Update documentation
- Ensure all tests pass
Distributed under the MIT License.
See the LICENSE file for more information.
Developed with ❤️ by the Web-PM Development Team.
If you encounter issues or have questions:
- Check the Troubleshooting section
- Create an issue in the repository
- Contact the development team