Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Ajith66310/task-manager-full/llms.txt

Use this file to discover all available pages before exploring further.

TaskFlow runs exclusively inside Docker Compose. There is no supported way to run any service directly with node server.js outside of containers — the services depend on Docker’s internal DNS (service names like mongo-user and task-service) to resolve each other, and those names only exist within the Compose network. Every code change you make must be compiled into a fresh container image before you can test it.

Service ports reference

The following ports are exposed on your local machine when the full stack is running:
ServiceLocal portNotes
api-gateway5000Single entry point for all API requests
user-service5001Auth, user profiles, admin accounts
task-service5002Task lifecycle and assignments
notification-service5003Email alerts via EmailJS
admin-frontend3000React admin dashboard (served by Nginx)
user-frontend5173React user interface (served by Nginx)
mongo-user27018MongoDB for user data (maps to container port 27017)
mongo-task27019MongoDB for task data (maps to container port 27017)
Inside the Compose network, services connect to MongoDB using the internal hostnames mongo-user:27017 and mongo-task:27017. The external ports 27018 and 27019 are only for direct access from tools on your host machine such as MongoDB Compass or mongosh.

Modifying and testing a service

Use this workflow any time you change source code in a backend service or a frontend. You only need to rebuild the specific container you changed — the rest of the stack keeps running.
1

Make your code changes

Edit the source files for the service you want to update. For example, modify a route handler in task-service/ or update a component in task-manager-user-frontend/src/.
2

Stop and remove the running container

Stop the container for the changed service and remove it so Docker Compose replaces it with a fresh build:
docker-compose stop task-service
docker-compose rm -f task-service
Replace task-service with the name of the service you changed. Valid service names are api-gateway, user-service, task-service, notification-service, admin-frontend, and user-frontend.
3

Rebuild and restart the container

Build a new image from your updated source and start the container in detached mode:
docker-compose up -d --build task-service
The --build flag forces Docker to re-run the Dockerfile instead of using the cached image layer. The running containers for other services are not affected.
4

Verify the container is healthy

Confirm the rebuilt service started correctly:
docker-compose ps
The service should show a running or Up state. If it exited immediately, check its logs in the next step.
5

Tail the logs to confirm behavior

Stream the output of the rebuilt service to verify it connected to its database and is handling requests as expected:
docker-compose logs -f task-service
Press Ctrl+C to stop following the log stream without stopping the container.
Keep a terminal open with docker-compose logs -f <service> running while you develop. Streaming logs in real time lets you see startup errors, database connection messages, and request activity immediately after each rebuild, without having to run a separate command.

Checking container health

Run the following command at any point to see the status of all 8 containers, their uptime, and their exposed ports:
docker-compose ps
A healthy stack shows all services in a running or Up state. Any service showing Exit or Restarting indicates a startup failure — check that service’s logs for details.

Viewing logs

Stream logs from every service simultaneously:
docker-compose logs -f
Stream logs from a single service:
docker-compose logs -f <service>
Common services to inspect during development:
docker-compose logs -f user-service
docker-compose logs -f task-service
docker-compose logs -f api-gateway
docker-compose logs -f notification-service

Connecting to MongoDB directly

Both MongoDB instances expose ports on your host machine for use with a database client such as MongoDB Compass or mongosh:
DatabaseHostPortDatabase name
User databaselocalhost27018TaskManagerUser
Task databaselocalhost27019TaskManagerTask
Example connection string for the user database:
mongosh "mongodb://localhost:27018/TaskManagerUser"

Stopping the stack

To stop all containers and preserve database volumes:
docker-compose down
To stop all containers and delete all persistent data:
docker-compose down -v
docker-compose down -v permanently deletes the mongo_user_data and mongo_task_data volumes. All user records and tasks stored in the database are destroyed and cannot be recovered.

Build docs developers (and LLMs) love