Day 139
Backend
Full Task CRUD - create, read, update, patch status, delete
JWT-protected routes - unauthenticated requests get 401, wrong user gets 404
Enum validation on status & priority - "YOLO" gets rejected before it touches the DB
Ownership boundary
Backend is Hard
Day 138
Backend
- User registration with bcrypt password hashing
- JWT authentication returning signed tokens
- Schema separation so passwords never leak in responses
Hit a bcrypt version conflict. passlib couldn't read bcrypt 4.x metadata. Fixed by pinning bcrypt==4.0.1.