Time tracking for freelance missions. Log hours, list entries, show summaries by project/period. Data in /data/pro/time-entries.json, missions in /data/pro/missions.yaml.
Track billable hours for freelance missions.
| Fichier | Rôle |
|---|---|
/data/pro/missions.yaml | Référentiel missions (source de vérité) : clients, TJM, contacts, Pennylane IDs |
/data/pro/time-entries.json | Entrées de temps : heures loguées par jour/mission |
Les missions sont définies dans missions.yaml (sections active et progress). Ne jamais dupliquer les infos mission dans time-entries.json.
| Command | Description |
|---|---|
/timetrack log <slug> <hours> [note] | Log hours for today |
/timetrack log <slug> <hours> <date> [note] | Log hours for a specific date (YYYY-MM-DD) |
/timetrack list [slug] [--month YYYY-MM] | List entries, optionally filtered |
/timetrack summary [slug] [--month YYYY-MM] | Summary: total hours, amount, billed/unbilled |
/timetrack missions | List active missions with client et TJM |
Default (no subcommand): summary for current month.
time-entries.json — entrées uniquement, pas de définition de missions :
{
"entries": [
{
"id": "2026-03-15-001",
"date": "2026-03-15",
"project": "roundtable",
"hours": 7,
"billed": false,
"invoiceId": null,
"note": "Jour 1"
}
]
}
missions.yaml → vérifier que le slug existe dans active. Sinon, erreur.<date>-<NNN> (next sequence for that date).entries array in time-entries.json.Logged Xh on <slug> (<date>) — "<note>"Date Mission Hours Note
2026-03-15 roundtable 7.0 Jour 1
missions.yaml pour les TJM et infos client.Lire missions.yaml et afficher les missions actives :
Slug Client TJM Contact
roundtable Roundtable 700 Simon Ternoir
la-fabrique-ca La Fabrique by CA — Charlotte Guyard
stephanie-le-beuze Stéphanie Le Beuze 800 Stéphanie Le Beuze
active dans missions.yamlmissions.yamltime-entries.json ne contient que les entrées de temps (plus de section projects)