Aujourd’hui j’ai shippé Moon, un screen recorder macOS perso — le genre d’outil que Loom rend bien, mais que je voulais contrôler de bout en bout : fichiers locaux, UI que je décide, zéro lock-in cloud.
Je suis Alkhast Vatsaev, développeur Full Stack junior à Paris. Ce n’est pas un SaaS, pas un produit App Store, pas une startup : c’est un outil local que j’utilise, construit en une journée pour prouver que je peux livrer une app desktop réelle, pas seulement une landing.
Ce que Moon fait (v1)
Capture plein écran ou fenêtre, bulle webcam live en bas à gauche, micro, compte à rebours 0 / 3 / 5 secondes, sauvegarde locale en .webm, et une barre de contrôles pendant l’enregistrement (timer, pause, stop) façon Dynamic Island. Permissions macOS pour caméra, micro et partage d’écran — sans ça, rien n’enregistre.
L’app vit dans la barre de menu : tray Electron, pas une fenêtre principale permanente. On lance, on choisit la source, on enregistre, on récupère le fichier sur le disque.
Stack et architecture
Electron + React + TypeScript via electron-vite. Processus main pour le tray, les fenêtres overlay et desktopCapturer ; preload pour exposer une API sûre au renderer ; renderer React pour le picker de sources, le setup et les contrôles.
Côté capture : desktopCapturer pour lister écrans/fenêtres, canvas + MediaRecorder pour l’écran et le micro. La webcam est une overlay Electron séparée (toujours visible pendant l’enregistrement) : elle entre dans le .webm via la capture d’écran, sans être redessinée une seconde fois dans le canvas — sinon on se retrouve avec une double bulle.
Packaging macOS en DMG via electron-builder. Permissions TCC caméra / micro / screen recording obligatoires.
Ce que j’ai appris en shippant du desktop en un jour
Les permissions macOS ne sont pas un détail UX : sans TCC caméra / micro / screen recording, l’app « marche » en apparence et produit du noir. Les black frames apparaissent aussi quand le process qui compose la vidéo est throttlé (fenêtre cachée / background) — d’où un tray app qui doit rester vivant pendant l’enregistrement.
Le ratio d’aspect de la source compte pour le fichier final : forcer du 16:9 sur un écran Retina déforme tout. Et une overlay live + une composition canvas en parallèle, c’est deux bulles dans la vidéo : un seul canal pour la webcam, pas les deux.
Statut et suite
v1 est utilisable localement chez moi. Pas de cloud, pas d’utilisateurs, pas de revenue — juste un outil qui enregistre et sauvegarde. Suite possible : raccourci ⌘⇧R, export MP4, historique des captures.
Si vous recrutez un Full Stack junior qui shippe aussi hors du navigateur (Electron, permissions native, packaging), le portfolio et le contact sont ici : https://alkhastvatsaev.dev — alkhastvatsaev@icloud.com