No description
Tasks with no associated project were being excluded from org dashboard calculations because the query filtered by project.organization.id. Now fetches tasks by active member emails, so all tasks are counted. Tasks and history items with no project are grouped under "Geral" in project-specific charts and calculations. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .claude/skills | ||
| .github | ||
| backend | ||
| docker/postgres/init | ||
| frontend | ||
| .gitignore | ||
| CLAUDE.md | ||
| docker-compose.yml | ||
| README.md | ||
TimeTrack MVP
Minimal vertical slice for task management using:
- React + TypeScript + Tailwind CSS
- Java + Quarkus
- PostgreSQL
- Keycloak prepared for future authentication
Structure
frontend/: Vite React app with task list, task creation, and status updatesbackend/: Quarkus API with a simple Clean Architecture splitdocker-compose.yml: local PostgreSQL and Keycloak services
Run infrastructure
Start PostgreSQL and Keycloak:
docker-compose up
Services:
- PostgreSQL:
localhost:5432 - Keycloak:
http://localhost:8081 - Keycloak admin:
admin/admin
Run the backend
The backend uses the Maven wrapper generated by Quarkus.
cd backend
./mvnw quarkus:dev
Default database settings already point to the local Docker PostgreSQL instance:
- database:
timetrack - user:
timetrack - password:
timetrack
Main API endpoints:
POST /tasksPATCH /tasks/{id}/statusGET /tasks
Example create request:
curl -X POST http://localhost:8080/tasks \
-H "Content-Type: application/json" \
-d '{"name":"Prepare sprint review","description":"Collect release notes"}'
Run the frontend
cd frontend
npm install
npm run dev
The Vite dev server runs on http://localhost:5173 and proxies /api/* to the backend on http://localhost:8080.
If needed, you can override the API target with VITE_API_URL.
Architecture notes
The backend keeps the vertical slice intentionally small:
domain: task entity and status enumapplication: use cases and repository portadapter/in: REST APIadapter/out: PostgreSQL persistence with Panache
Important pragmatic decisions:
- UUIDs are generated in the application layer to keep the slice simple.
- Flyway owns schema creation with a single migration.
- Keycloak is available locally now but not integrated into the app yet.
Verification
Backend:
cd backend
./mvnw test
Frontend:
cd frontend
npm run build