- Spring Boot 3 Projekt mit Maven initialisieren (Spring Initializr)
- Dependencies: Spring Web, Spring Data JPA, H2, Spring Boot Test
-
DevHabitApplication.javaals Entry Point -
application.ymlmit H2-Konfiguration (In-Memory, Console aktiviert) - Verzeichnisstruktur fuer alle Feature-Module anlegen (habit, focus, git, stats)
- Jedes Modul mit Unterordnern: domain, application, adapter/in/web, adapter/out/persistence, port/in, port/out
- React-Projekt mit Vite + TypeScript erstellen
- Dependencies: React Query, TailwindCSS, React Router
- Verzeichnisstruktur fuer Feature-Module anlegen (habits, focus, git, stats)
- Jedes Modul mit Unterordnern: domain, application, infrastructure, ui
- Shared-Ordner fuer gemeinsame Komponenten und API-Client
- Basis-API-Client in
shared/api/einrichten
- ArchUnit-Dependency im Backend hinzufuegen
- Architektur-Tests fuer Hexagonal-Regeln schreiben (Domain keine Abhaengigkeiten zu Adaptern/Framework, Application kennt nur Domain und Ports, Adapter haengen von Ports ab)
- TDD: Tests fuer
HabitEntity (name, description, frequency, startDate) -
HabitEntity +FrequencyEnum (DAILY, WEEKLY) implementieren - Tests fuer Use-Case-Interfaces (
CreateHabitUseCase,UpdateHabitUseCase,DeleteHabitUseCase,GetHabitsUseCase) - Input-Port-Interfaces definieren
- Output-Port
HabitRepositoryInterface definieren
- Unit-Tests fuer Application Services (mit Mockito fuer Repository)
-
HabitServiceimplementiert alle Use-Case-Interfaces - Integration-Tests fuer JPA-Repository (
@DataJpaTest) -
JpaHabitRepositoryimplementiert Output-Port - Integration-Tests fuer REST-Controller (
@WebMvcTest) -
HabitController(GET, POST, PUT, DELETE/api/habits) - DTOs fuer Request/Response erstellen
- Domain-Typen:
Habit,Frequency,CreateHabitRequest - Infrastructure: API-Client fuer alle Habit-Endpoints
- Application: Hooks
useHabits,useCreateHabit,useUpdateHabit,useDeleteHabit - UI-Komponenten: HabitList, HabitForm, HabitCard
- Komponenten-Tests mit React Testing Library
- TDD:
HabitCompletionEntity (habitId, date, completed) -
CompleteHabitUseCasePort + Application Service -
HabitCompletionRepositoryOutput-Port + JPA-Implementierung -
POST /api/habits/{id}/completeEndpoint - Tests auf allen Ebenen
- Domain:
HabitCompletionTyp - Checkbox/Button zum Abhaken in HabitCard
-
useCompleteHabitHook mit Optimistic Update via React Query - Kalenderuebersicht (Mo-So) mit completed/missed Status
- TDD: Domain-Service
StreakCalculator(currentStreak, longestStreak) - Unit-Tests mit verschiedenen Szenarien (lueckenlos, Luecken, leere History)
- Streak-Daten in Habit-Response integrieren
- Streak-Anzeige im HabitCard und HabitDetail
- Visuelle Hervorhebung aktiver Streaks
- TDD:
FocusSessionEntity (startTime, endTime, duration, habitId optional) - Ports:
StartFocusSessionUseCase,StopFocusSessionUseCase - Application Service mit Start/Stop-Logik und Dauer-Berechnung
-
POST /api/focus/startundPOST /api/focus/stop - Tests auf allen Ebenen
- Focus-Timer-Komponente mit Start/Stop
- Laufende Timer-Anzeige
- Optionale Verknuepfung mit einem Habit
-
useStartFocus,useStopFocusHooks
-
RepositoryConfigEntity (path, enabled) -
CommitActivityEntity (date, count) - Git-CLI-Adapter: Liest
git logaus konfiguriertem Pfad -
GET /api/git/activityEndpoint (commitsToday, commitsThisWeek, commitsPerDay) - Tests (Unit-Tests mit Mock fuer Git-Adapter)
- Repository-Pfad-Konfiguration
- Git-Aktivitaetsanzeige im Dashboard
-
useGitActivityHook
-
GET /api/stats/weekly- Aggregierte Daten (Habits completed, Focus-Zeit, Commits) - Stats-Service aggregiert ueber die anderen Module
- Dashboard-Seite als Hauptansicht
- Widgets: Today's Habits, Streak, Commits Today, Focus Time, Weekly Stats
- Routing zwischen Dashboard, Habit List, Habit Detail, Focus Timer, Stats
- GitHub-Style Contribution Heatmap Komponente
- Basierend auf Habit-Completions und/oder Git-Commits
- Farbabstufungen: keine / niedrig / mittel / hoch Aktivitaet
- Integration im Stats-Modul
- GitHub-Style Heatmap Komponente, zeigt die letzten zwei Wochen an.
- Basierend auf der Focus-Zeit der letzten zwei Wochen.
- Farbabstufungen: 1h / 2h / 4h / 8h
- Die Heatmap soll in ein Tile neben dem Focus-Timer auf dem Dashboard angezeigt werden. Der Focus-Timer soll dafür über die Activity-Heatmap verschoben werden.