Matthieu 22373a0b87 refactor : migrate UI to Malio layer-ui components (MalioButton, MalioDrawer, MalioSelectCheckbox)
- Replace all AppDrawer with MalioDrawer across 10 drawer components
- Replace native <button> with MalioButton/MalioButtonIcon in all pages and components
- Fix TimeTrackingExportDrawer: use MalioSelectCheckbox for multi-select filters
- Add Malio design system colors (m-btn-*, m-disabled, m-surface) to tailwind.config.ts
- Align toggle button heights with MalioButton (h-[40px])

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 09:33:28 +01:00
2026-03-08 19:47:19 +01:00
2026-03-25 17:42:21 +00:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00

Lesstime

Application de gestion de projet avec suivi du temps et portail client.

Stack

Couche Technologies
Backend PHP 8.4, Symfony 8, API Platform 4, Doctrine ORM
Frontend Nuxt 4 (SPA), Vue 3, Pinia, Tailwind CSS
Base de données PostgreSQL 16
Auth JWT HTTP-only cookie (lexik/jwt-authentication-bundle)
Infrastructure Docker (PHP-FPM, Nginx, PostgreSQL)

Fonctionnalités

  • Gestion de projets et tâches (kanban, groupes, priorités, tags, efforts)
  • Suivi du temps (timer, calendrier, vue liste)
  • Portail client avec tickets (bug, amélioration, autre)
  • Gestion de documents (upload, prévisualisation, téléchargement)
  • Profil utilisateur avec avatar (crop circulaire)
  • Notifications temps réel
  • Intégration Gitea (issues, repos)
  • Serveur MCP pour assistants IA
  • Multi-langue (i18n)

Prérequis

  • Docker & Docker Compose
  • Git

Installation

# 1. Cloner le repo
git clone <url> && cd lesstime

# 2. Démarrer les containers
make start

# 3. Installation complète (composer, migrations, fixtures, build Nuxt)
make install

L'application est accessible sur http://localhost:8082.

Comptes de test (fixtures)

Utilisateur Mot de passe Rôle Détails
admin admin ROLE_ADMIN Administrateur
alice alice ROLE_USER Utilisateur interne
bob bob ROLE_USER Utilisateur interne
charlie charlie ROLE_USER Utilisateur interne
client-liot client ROLE_CLIENT Client LIOT (projet SIRH)
client-acme client ROLE_CLIENT Client ACME (projet CRM)

Commandes

Docker

make start              # Démarrer les containers
make stop               # Arrêter les containers
make restart            # Redémarrer les containers
make shell              # Shell dans le container PHP
make shell-root         # Shell root dans le container PHP

Développement

make dev-nuxt           # Dev server Nuxt (hot reload, port 3002)
make cache-clear        # Vider le cache Symfony
make logs-dev           # Tail logs Symfony

Base de données

make migration-migrate  # Lancer les migrations
make fixtures           # Charger les fixtures
make db-reset           # Reset BDD + migrations + fixtures (⚠️ supprime les données)

Tests & Qualité

make test                       # PHPUnit
make php-cs-fixer-allow-risky   # Fix code style PHP (Symfony + PSR-12)

Installation complète

make install            # Composer + migrations + fixtures + build Nuxt
make reset              # Tout supprimer et réinstaller (⚠️ supprime la BDD)

Architecture

src/
├── Entity/             # Entités Doctrine
├── ApiResource/        # Ressources API Platform (découplées)
├── State/              # Providers et Processors API Platform
├── Controller/         # Controllers custom Symfony
├── Service/            # Services métier
├── EventListener/      # Listeners Doctrine
├── Exception/          # Exceptions custom
├── Security/           # Authenticators custom
├── Repository/         # Repositories Doctrine
├── Command/            # Commandes console
├── DataFixtures/       # Fixtures
└── Mcp/Tool/           # MCP tools par domaine
    ├── Project/
    ├── Task/
    ├── TaskMeta/
    ├── TimeEntry/
    └── Reference/

frontend/
├── pages/              # Pages Nuxt (routing auto)
│   ├── portal/         # Pages portail client
│   └── projects/       # Pages projets
├── layouts/            # Layouts (default, portal)
├── components/         # Composants Vue
│   ├── ui/             # Composants génériques
│   ├── task/           # Tâches
│   ├── user/           # Utilisateur (avatar, etc.)
│   ├── project/        # Projets
│   ├── client/         # Clients
│   ├── client-ticket/  # Tickets client
│   ├── admin/          # Administration
│   ├── notification/   # Notifications
│   └── time-tracking/  # Suivi du temps
├── composables/        # Composables (useApi, useNotifications, etc.)
├── stores/             # Stores Pinia (auth, ui, timer)
├── services/           # Services API
│   └── dto/            # Types TypeScript
├── plugins/            # Plugins Nuxt
├── utils/              # Utilitaires
├── i18n/locales/       # Traductions
└── middleware/          # Middleware auth

config/                 # Config Symfony
migrations/             # Migrations Doctrine
docker/                 # Dockerfiles et config Nginx

Docker

Container Port Description
php-lesstime-fpm 3002 (dev Nuxt) PHP-FPM + Node 24
nginx-lesstime 8082 Nginx reverse proxy
PostgreSQL 5435 Base de données

Configuration : docker/.env.docker (override local : docker/.env.docker.local)

API

Toutes les routes API sont préfixées /api (API Platform).

  • Documentation auto-générée : http://localhost:8082/api
  • Auth : POST /login_check avec { username, password } → cookie JWT BEARER

Serveur MCP

Lesstime expose un serveur MCP (Model Context Protocol) permettant aux assistants IA d'interagir avec les données.

Tools disponibles (22)

Domaine Tools
Reference list-users, list-clients
Project list-projects, get-project, create-project, update-project
Task list-tasks, get-task, create-task, update-task, delete-task
TaskMeta list-statuses, list-priorities, list-efforts, list-tags, list-groups, create-group, update-group
TimeEntry list-time-entries, create-time-entry, update-time-entry, delete-time-entry

Configuration locale (STDIO)

{
  "mcpServers": {
    "lesstime": {
      "command": "docker",
      "args": ["exec", "-i", "php-lesstime-fpm", "php", "bin/console", "mcp:server"]
    }
  }
}

Configuration réseau (HTTP)

{
  "mcpServers": {
    "lesstime": {
      "type": "url",
      "url": "http://<ip-serveur>:8082/_mcp",
      "headers": {
        "Authorization": "Bearer <api-token>"
      }
    }
  }
}

Gestion des tokens API

docker exec -u www-data php-lesstime-fpm php bin/console app:generate-api-token <username>

Déploiement

  1. Déployer le code sur le serveur
  2. composer install --no-dev --optimize-autoloader
  3. php bin/console doctrine:migrations:migrate --no-interaction
  4. php bin/console cache:clear --env=prod
  5. cd frontend && npm install && npm run build:dist
  6. docker restart nginx-lesstime
  7. Ouvrir le port 8082 sur le firewall (LAN uniquement)

Licence

Propriétaire — Tous droits réservés.

Description
No description provided
Readme 1.8 MiB
v0.3.18 Latest
2026-04-02 10:14:43 +00:00
Languages
PHP 48.2%
Vue 43.7%
TypeScript 6.1%
Dockerfile 0.7%
CSS 0.5%
Other 0.8%