Simple full-stack task manager with:
- Spring Boot backend (
backend/) - React + Vite frontend (
frontend/)
- Java 17+
- Maven 3.9+
- Node.js 18+
- npm 9+
cd /Users/uttamkumar/uttam-all-data/01_github-projects/task-manager/backend
mvn spring-boot:runBackend: http://localhost:8080
If backend startup fails with FATAL: role "postgres" does not exist, run this one-time local PostgreSQL setup:
psql -h localhost -p 5432 -d postgres -c "CREATE ROLE postgres WITH LOGIN SUPERUSER PASSWORD 'postgres123';"
createdb -h localhost -p 5432 -O postgres taskdbThen start backend again:
cd /Users/uttamkumar/uttam-all-data/01_github-projects/task-manager/backend
mvn spring-boot:runcd /Users/uttamkumar/uttam-all-data/01_github-projects/task-manager/frontend
npm install
npm run devFrontend: http://localhost:5173
Create frontend/.env:
VITE_API_BASE_URL=http://localhost:8080For production (Vercel), set:
VITE_API_BASE_URL=https://<your-backend>.onrender.comcd /Users/uttamkumar/uttam-all-data/01_github-projects/task-manager/backend
mvn test
mvn clean packagecd /Users/uttamkumar/uttam-all-data/01_github-projects/task-manager/frontend
npm run build
npm run previewcd /Users/uttamkumar/uttam-all-data/01_github-projects/task-manager
# first-time setup
cp .env.example .env
# backend change
cd backend
mvn clean package -DskipTests
cd ..
docker compose up -d --build backend
# frontend change
cd frontend
npm run build
cd ..
docker compose up -d --build frontend
# full rebuild
docker compose up -d --build
# verify
docker ps
# debug if needed
docker compose logs -f
# just restart
docker compose down && docker compose up -d
# stop
docker compose downRoot .env values used by Compose:
DB_NAME,DB_USER,DB_PASSWORDTASK_MANAGER_AUTH_USERNAME,TASK_MANAGER_AUTH_PASSWORD,TASK_MANAGER_AUTH_ROLETASK_MANAGER_CORS_ALLOWED_ORIGINSVITE_API_BASE_URL(baked into frontend image at build time)JWT_SECRET,JWT_EXPIRATION_MS(optional)
This project currently uses session-based authentication.
- Login creates a server session
- Browser stores
JSESSIONIDcookie - Frontend sends cookie automatically (
withCredentials: true) - Protected endpoints require a valid session
- New users can self-register and access only their own tasks
Default credentials (unless overridden with env vars):
- Username:
admin - Password:
admin123
Backend env overrides:
export TASK_MANAGER_AUTH_USERNAME="myuser"
export TASK_MANAGER_AUTH_PASSWORD="mypassword"
export TASK_MANAGER_AUTH_ROLE="USER"
export TASK_MANAGER_CORS_ALLOWED_ORIGINS="https://task-manager-ashen-nu-54.vercel.app"Auth endpoints:
POST /api/auth/registerPOST /api/auth/loginPOST /api/auth/logoutGET /api/auth/me
Task endpoints:
GET /api/tasksGET /api/tasks/{id}GET /api/tasks?status={status}GET /api/tasks/search?keyword={keyword}GET /api/tasks/statsPOST /api/tasksPUT /api/tasks/{id}PATCH /api/tasks/{id}/completePATCH /api/tasks/{id}/pendingDELETE /api/tasks/{id}
curl -i -c cookies.txt -X POST https://task-manager-backend-51pf.onrender.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
curl -i -b cookies.txt https://task-manager-backend-51pf.onrender.com/api/tasks- Database: PostgreSQL only (configured in
docker-compose.ymland backendapplication.properties) - Frontend API backend:
https://task-manager-backend-51pf.onrender.com(setVITE_API_BASE_URLin.envto override) - If frontend cannot call backend, verify
VITE_API_BASE_URLand backend CORS settings inbackend/src/main/java/backend/security/SecurityConfig.java - Backend-specific details are in
backend/README.md; frontend-specific details are infrontend/README.md