CWClock

Nous proposons une alternative simple et facile à utiliser à Clockify pour le suivi du temps, écrite en Go et en React.
C'est un logiciel OpenSource sous licence MIT que vous pouvez héberger vous-même, le dépôt est disponible sur notre gitlab (ou ici sur github).
Une instance est également disponible ici.
Résumé des fonctionnalités​
Voici les principales fonctionnalités de CWClock :
- Suivi du temps passé sur les tâches
- Connexion Ă votre calendrier Google ou Outlook
- Gestion des organisations, clients et projets
- Export au format PDF ou CSV compatible avec le format Clockify
- API d'export compatible avec Clockify
- Réimport des fichiers CSV exportés depuis Clockify
- Impression de factures avec taux journaliers et TVA
- Envoi des factures par email
- Synchronisation de vos factures avec Google Drive ou un stockage S3/objet ou encore git
- Job d'export automatisé pouvant envoyer les exports et/ou factures par email, Google Drive, stockage S3/objet ou dépôts git
- I18N (anglais et français pour le moment)
- Mode clair/sombre
- Observabilité OpenTelemetry & OpenMetrics (Prometheus)
- Intégration OIDC avec Google OIDC, Github et Keycloak
- Authentification double facteur (TOTP et yubikey)
- Formulaire de contact
- CLI adaptée aux humains comme aux agents IA, avec des modes serveur MCP et agent web
Technologies​
- Go et PostgreSQL pour l'API
- React pour l'interface graphique
- Flyway pour les migrations
Connexions externes​
Vous pouvez ajouter des connexions externes comme un stockage S3/objet ou des connexions Google Drive ou encore git pour téléverser vos factures :
Vous pouvez préciser si vous souhaitez que les factures soient téléversées directement à la racine du dossier (pour cela, choisissez l'option "flat directory") ou dans des sous-dossiers MM.{nom du mois}.

Google Drive​
Pour Google Drive, vous aurez besoin d'un projet avec un compte de service.
Vous pourrez ensuite partager un dossier avec le nom du compte de service et récupérer l'identifiant directement dans l'URL comme ceci :

Réimportation des factures​
Vous pouvez réimporter les factures qui ont été générées avant l'association de vos connexions externes, en cliquant sur ce bouton :

Calendrier​
Vous pouvez utiliser une vue calendrier pour visualiser ou modifier vos enregistrements de temps :

Et la synchroniser avec Google Calendar ou Outlook comme ceci :

API​
Vous pouvez trouver la documentation openAPI directement ici : api.cwclock.me
Clés API​
Pour manipuler l'API dans des scripts ou des programmes, vous aurez besoin de clés API.
Voici comment générer des clés API :

Puis copiez et enregistrez la valeur dans un endroit sûr :

Vous pourrez l'utiliser avec l'en-tĂŞte X-Api-Key Ă la place du JWT avec l'en-tĂŞte classique Authorization dans vos scripts.
API d'export​
Voici un exemple avec curl montrant comment générer l'export entre deux dates
#!/usr/bin/env bash
start_date="2026-06-26"
end_date="2026-06-30"
export_type="summary"
export_format="PDF"
api_url="https://api.cwclock.me"
api_key="changeit"
org_id="changeit"
client_id="changeit"
file_report="report-${start_date}-${end_date}.pdf"
curl -H "content-type: application/json" \
-H "X-Api-Key: $api_key" \
-X POST -d '{"exportType":"'"${export_format}"'", "dateRangeStart":"'"${start_date}"'T00:00:00.000Z","dateRangeEnd":"'"${end_date}"'T23:59:59.000Z", "clients":{"ids": ["'"${client_id}"'"]}, "detailedFilter": {"page": 1,"pageSize": 100}}' "${api_url}/v1/organizations/${org_id}/reports/${export_type}" > "${file_report}"
Notes :
- Ce endpoint est compatible avec clockify.me
- Les types d'export autorisés sont
summaryoudetailed - Les formats d'export autorisés sont
PDFouCSV - Vous pouvez trouver le
orga_idou leclient_iden utilisant le bouton copier ici :
Et enfin, vous obtiendrez votre rapport :

Job d'export​
Vous pouvez envoyer automatiquement les rapports ou les factures par email, vers un dépôt git, un dossier Google Drive ou des buckets S3/stockage objet grâce aux fonctionnalités de job d'export :
Notes :
- La planification utilise des [expressions cron] (un assistant avec des raccourcis est disponible)
- La période utilise la syntaxe
now()-{nombre}{d|h|m}(un assistant avec des raccourcis est également disponible)



