A full-stack task management application built with Spring Boot, H2, Thymeleaf, and Google Gemini AI.
The application supports task management, analytics dashboards, AI-powered task suggestions, and AI-generated task breakdowns to help users organize and prioritize work more effectively.
- Java 17
- Spring Boot 3.5.14
- Spring Data JPA
- H2 Database
- Maven
- JUnit 5
- Google Gemini API
- HTML/CSS/JavaScript
- Thymeleaf
- Create, update, delete, and view tasks
- Filter by status and priority
- Sort by due date, created date, title, and priority
- Search by ID or title
- AI task suggestion from natural language
- AI task breakdown into subtasks
- Graceful fallback AI provider when Gemini API key is not configured
- Task counts by status and priority
- Overdue task count
- Upcoming tasks (next 7 days)
- Analytics dashboard with visual task distribution by status and priority
- Active HIGH priority task monitoring
- Create/manage tasks
- AI suggestion and AI breakdown buttons
- Task details modal
- API quick links for reviewers
Mac/Linux:
export GEMINI_API_KEY=your-api-keyWindows PowerShell:
$env:GEMINI_API_KEY="your-api-key"application.properties file already has:
gemini.api.key=${GEMINI_API_KEY:}So the project runs without api key but below are actual steps to add the real key:
gemini.api.key=${GEMINI_API_KEY}./mvnw spring-boot:runApplication runs at:
http://localhost:8080
./mvnw test| Method | Endpoint | Description |
|---|---|---|
| POST | /tasks |
Create task |
| GET | /tasks |
Get all tasks |
| GET | /tasks/{id} |
Get task by ID |
| PUT | /tasks/{id} |
Update task |
| DELETE | /tasks/{id} |
Delete task |
| GET | /tasks/analytics |
Task analytics |
| POST | /tasks/suggest |
AI task suggestion |
| POST | /tasks/{id}/breakdown |
AI task breakdown |
{
"title": "Prepare quarterly report",
"description": "Finalize metrics and submit",
"dueDate": "2026-05-30T17:00:00",
"priority": "HIGH",
"status": "TODO"
}- Maximum of 3 active HIGH priority tasks at any time
- Due date must be a future date
- Title is required and limited to 200 characters
- Description is limited to 1000 characters
- Tasks support LOW, MEDIUM, and HIGH priorities
- Tasks support TODO, IN_PROGRESS, and DONE statuses
Each task response includes:
createdAt: set when the task is createdupdatedAt: set when the task is created and refreshed whenever the task is updated
How to verify:
- Create a task using
POST /tasks - Note the
createdAtandupdatedAtvalues - Update the same task using
PUT /tasks/{id} - Call
GET /tasks/{id}
Expected result:
createdAtstays the sameupdatedAtchanges to the latest update time
Includes:
- Unit tests
- Integration tests
- Controller tests
- AI endpoint tests
Run:
./mvnw testEndpoint:
POST /tasks/suggest
Example request: You can also find some more examples in text file "AI-PromptsForTestingAIEndpoint.txt"
{
"description": "Prepare slides for the quarterly review meeting next Friday"
}Other example prompts:
- "Remind me to submit tax documents tomorrow"
- "Plan onboarding session for new interns next week"
- "Finish backend API integration before Monday"
Endpoint:
POST /tasks/{id}/breakdown
Example workflow:
- Create a complex task
- Click AI Breakdown in the UI
- Or call:
POST /tasks/1/breakdown
Recommended complex tasks:
- "Launch company onboarding portal"
- "Prepare annual engineering roadmap"
- "Organize company hackathon event"
- "Migrate legacy authentication system"
AI tools were used (Claude code CLI) Sonnet 4.6 for implementation support, debugging assistance, and documentation refinement.
You can find all AI Transcripts in folder AITranscripts. It also has a dedicated folder "Prompt Highlights" which has a text file of all my prompts used.