Application de gestion d'activité quotidienne pour développeurs.
KairuFocus centralise en un seul endroit tout ce dont un développeur a besoin pour rester focus et organisé : todo list de micro-tâches, journal de bord, sessions Pomodoro et intégration avec les outils de ticketing (Jira).
| Module | Description |
|---|---|
| ☑️ Tasks | Micro-tâches quotidiennes — ajout, modification, statut, lien Jira |
| 🍅 Pomodoro | Sessions de focus (sprint / pause courte / pause longue) avec chronomètre circulaire |
| 📖 Journal | Timeline d'activité quotidienne générée automatiquement + commentaires personnels |
| 🎫 Tickets | Intégration Jira Cloud — liste des tickets assignés, liaison avec les tâches |
| ⚙️ Settings | Thème clair/sombre/système, durées Pomodoro, credentials Jira |
| 🔐 Auth | Connexion via GitHub OAuth 2.0, JWT HS256, multi-utilisateurs |
- Runtime : .NET 10
- API : ASP.NET Core Web API
- Web : Blazor WebAssembly
- Mobile/Desktop : .NET MAUI (Blazor Hybrid) — Windows, Android, iOS, macOS
- Orchestration : .NET Aspire 13.1
- Base de données : SQLite + EF Core 10
- Auth : GitHub OAuth 2.0 + JWT HS256
- Tests : xUnit — 192 tests (Domain + Application)
Clean Architecture (Uncle Bob) + DDD, avec CQRS sans MediatR.
Domain → Entités, Value Objects, règles métier
Application → Commands / Queries / Handlers (CQRS)
Infrastructure → EF Core, SQLite, Jira API client
Api → Controllers ASP.NET Core, Auth JWT
Web / Maui → UI Blazor (WASM + Hybrid)
📐 Règle fondamentale : les dépendances ne pointent que vers l'intérieur. Le Domain ne connaît rien des couches externes.
src/
├── KairuFocus.Domain/ # 🧠 Bounded Contexts : Tasks, Pomodoro, Journal, Settings, Identity
├── KairuFocus.Application/ # ⚡ 30 use cases CQRS
├── KairuFocus.Infrastructure/ # 🗄️ EF Core + migrations + repositories
├── KairuFocus.Api/ # 🌐 REST API + GitHub OAuth + JWT
├── KairuFocus.Web/ # 💻 Blazor WASM
├── KairuFocus.Maui/ # 📱 .NET MAUI Blazor Hybrid
├── KairuFocus.AppHost/ # 🔭 Aspire orchestration
└── KairuFocus.ServiceDefaults/ # 📊 OpenTelemetry, health checks
tests/
├── KairuFocus.Domain.Tests/
├── KairuFocus.Application.Tests/
└── KairuFocus.Infrastructure.Tests/
docs/
├── spec.md # 📋 Spécification complète + ADR
└── project-state.md # 📍 État de l'itération courante
- .NET 10 SDK
- Une GitHub OAuth App (voir ci-dessous)
Crée une OAuth App sur github.com/settings/developers :
| Champ | Valeur |
|---|---|
| Homepage URL | http://localhost:5010 |
| Authorization callback URL | http://localhost:5205/signin-github |
Puis renseigne les credentials dans src/KairuFocus.Api/appsettings.Development.json :
{
"GitHub": {
"ClientId": "<ton-client-id>",
"ClientSecret": "<ton-client-secret>"
},
"WebBaseUrl": "http://localhost:5010",
"Jwt": {
"SecretKey": "une-clé-secrète-de-minimum-32-caractères",
"ExpiryHours": 24
}
}
⚠️ Ne jamais committer ce fichier avec de vraies valeurs.
Option A — Aspire (recommandé) : démarre API + Web + dashboard observabilité
dotnet run --project src/KairuFocus.AppHost/KairuFocus.AppHost.csproj --launch-profile http| Service | URL |
|---|---|
| 🔭 Dashboard Aspire | http://localhost:15100 |
| 💻 Web app | http://localhost:5010 |
| 🌐 API | http://localhost:5205 |
Option B — Séparé
# Terminal 1 — API 🌐
dotnet run --project src/KairuFocus.Api/KairuFocus.Api.csproj --launch-profile http
# Terminal 2 — Web 💻
dotnet run --project src/KairuFocus.Web/KairuFocus.Web.csproj --launch-profile httpdotnet test✅ Réussi! — 192 tests, 0 échec
Dans l'application → ⚙️ Paramètres → section Jira :
| Champ | Exemple |
|---|---|
| Base URL | https://ton-domaine.atlassian.net |
ton@email.com |
|
| API Token | Généré sur id.atlassian.com/manage-profile/security/api-tokens |
docs/spec.md— 📋 Spécification complète, use cases, diagrammes, ADRdocs/project-state.md— 📍 État de l'itération courante et historique
Usage privé — projet personnel.
