Retour aux projets

Projet 02/ 12·2026

Work Companion

Mochi, un chat de bureau en pixel art pour Windows et macOS : il mesure ta concentration et ferme les Shorts, TikTok et Reels d'un coup de patte.

93%/24:13
Interactive demo

Démo interactive : ouvre une distraction depuis la barre des tâches, ou clique sur Mochi pour le caresser.

Année
2026
Stack technique
ElectronNode.jsJavaScriptUI AutomationJXAPixel artExtension MV3GitHub ActionsOpen source

Un chat de bureau qui ferme tes distractions d'un coup de patte.

Avec PetPal, j'avais un compagnon qui récompensait les heures de concentration. Il manquait l'essentiel : agir au moment où je décroche. Work Companion va plus loin. Son chat, Mochi, surveille la fenêtre active, reconnaît les sites et les apps que je me suis interdits, et vient les fermer lui-même. Et comme on ne progresse que sur ce qu'on mesure, il tient un vrai journal de ma journée : combien de temps de travail, combien de distraction, et à quel moment.

Ce que fait Mochi

  • Un compagnon vivant : il marche le long de la barre des tâches, cligne des yeux, ronronne quand on clique dessus, se laisse porter à la souris, dort quand tu t'absentes et reste sagement dans un coin pendant les sessions focus.
  • Il ferme les distractions : à l'ouverture d'un site ou d'une app interdite, il se fâche, court jusqu'à la fenêtre, laisse un court délai de grâce pour partir de soi-même, puis ferme l'onglet ou l'application.
  • Sessions focus façon Pomodoro : blocages renforcés, notifications coupées, Discord ou WhatsApp fermés au lancement, pause enchaînée automatiquement.
  • Rappels de pause après 50 minutes de travail d'affilée, et démarrage avec l'ordinateur pour qu'il soit là dès l'ouverture de session.
  • Tout reste en local : aucun compte, rien n'est envoyé sur Internet.

Trois modes de blocage

Chaque règle a un mode. Toujours : fermé dès qu'il passe au premier plan (Shorts, TikTok et Reels par défaut). Pendant le focus : fermé seulement pendant une session (Instagram, X, Reddit, Netflix, Twitch, Steam…). Compter : autorisé mais compté comme distraction, comme YouTube. Un motif peut viser un chemin précis (youtube.com/shorts) ou plusieurs domaines à la fois, et des mots du titre servent de secours.

Savoir sur quel site tu es, sans extension

Le plus gros défi technique. Sous Windows, l'app lit la barre d'adresse du navigateur actif via l'API d'accessibilité UI Automation : Chrome, Edge, Brave, Opera, Vivaldi, Arc ou Firefox, sans rien installer. Sous macOS, elle interroge directement Chrome, Edge, Brave, Arc et Safari en JXA, après une autorisation d'automatisation demandée une seule fois. En dernier recours, elle se rabat sur le titre de la fenêtre. Une extension Manifest V3 optionnelle ferme l'onglet proprement au lieu d'envoyer Ctrl+W ; elle dialogue avec l'app sur un WebSocket local que seules les extensions peuvent joindre, pas les pages web.

Un suivi de la concentration qui a du sens

Chaque seconde passée au premier plan est classée en travail, distraction ou autre, d'après les règles et une liste d'outils de travail (éditeurs de code, Figma, Notion, GitHub…). Le tableau de bord affiche une frise de la journée, le détail par app et par site, un score de focus (la part du travail dans le temps travail + distraction) et un historique sur 7 ou 30 jours. Le temps d'absence n'est pas compté, et une activité mal classée se reclasse d'un clic : le chat s'en souvient.

Des sprites générés par IA, nettoyés par l'app

Les animations de Mochi (repos, marche, sommeil, alerte, coup de patte, joie) sont des planches générées par IA, donc jamais parfaitement régulières. Au chargement, l'app détoure le fond (y compris entre les pattes), repère chaque figure grâce aux vides qui les séparent, la recadre, la centre et la pose au sol, puis réduit la bande et la met en cache. Un petit fichier de configuration choisit les figures à garder et ajuste la hauteur de chaque animation pour que la tête du chat garde la même taille d'une pose à l'autre. On peut remplacer le chat par ses propres sprites sans toucher au code.

Distribuer sur Windows et macOS

L'application est construite avec Electron et empaquetée par electron-builder : un installeur NSIS pour Windows, deux images disque pour macOS (puce Apple et Intel). Comme l'installeur macOS doit être construit sur un Mac, un workflow GitHub Actions le fabrique sur un runner macOS à chaque release et l'attache automatiquement. La désinstallation retire aussi l'entrée de démarrage.

Sous le capot

  • Application : Electron, Node.js, JavaScript sans framework pour le compagnon et le tableau de bord.
  • Détection : PowerShell et UI Automation sous Windows, JXA sous macOS, repli sur le titre de fenêtre.
  • Extension : Manifest V3 pour Chrome et Firefox, WebSocket local.
  • Sprites : décodage PNG et JPEG maison (pngjs, jpeg-js), détourage et découpe automatiques.
  • Distribution : electron-builder, NSIS, DMG arm64 et x64, GitHub Actions.

Architecture & flux

De la fenêtre active au coup de patte

L'app lit la fenêtre au premier plan, applique les règles, alimente le suivi du temps et, pour un site interdit, laisse un délai de grâce avant que Mochi ne ferme la fenêtre.

Loading diagram...

Téléchargement

Work Companion

L'app n'est pas signée par un certificat payant, le système affiche donc un avertissement au premier lancement. Windows : SmartScreen → « Informations complémentaires » → « Exécuter quand même ». macOS : glisse l'app dans Applications, ouvre-la une fois, puis Réglages Système → Confidentialité et sécurité → « Ouvrir quand même ».