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