Today I shipped Moon, a personal macOS screen recorder — the kind of tool Loom does well, but that I wanted to own end to end: local files, UI I decide, zero cloud lock-in.

I’m Alkhast Vatsaev, a junior fullstack developer in Paris. This is not a SaaS, not an App Store product, not a startup: it’s a local tool I use, built in one day to show I can ship a real desktop app — not just a landing page.

What Moon does (v1)

Full screen or window capture, a live webcam bubble bottom-left, mic, countdown 0 / 3 / 5 seconds, local .webm save, and an in-recording control bar (timer, pause, stop) in a Dynamic Island style. macOS permissions for camera, mic and screen sharing — without them, nothing records.

The app lives in the menu bar: Electron tray, no permanent main window. Launch, pick a source, record, get the file on disk.

Stack and architecture

Electron + React + TypeScript via electron-vite. Main process for the tray, overlay windows and desktopCapturer; preload to expose a safe API to the renderer; React renderer for the source picker, setup and controls.

On the capture side: desktopCapturer to list screens/windows, canvas + MediaRecorder for screen and mic. The webcam is a separate Electron overlay (always visible while recording): it lands in the .webm through screen capture, without being drawn a second time on the canvas — otherwise you get a double bubble.

macOS packaging as a DMG via electron-builder. Camera / mic / screen-recording TCC permissions are mandatory.

What I learned shipping desktop in a day

macOS permissions are not a UX detail: without camera / mic / screen-recording TCC, the app looks fine and produces black frames. Black frames also show up when the process composing the video is throttled (hidden / background window) — so a tray app has to stay alive during recording.

Source aspect ratio matters for the final file: forcing 16:9 onto a Retina display warps everything. And a live overlay plus a parallel canvas composite means two bubbles in the video: one webcam channel, not both.

Status and next steps

v1 is usable locally on my machine. No cloud, no users, no revenue — just a tool that records and saves. Possible next: ⌘⇧R shortcut, MP4 export, capture history.

If you’re hiring a junior fullstack who also ships outside the browser (Electron, native permissions, packaging), portfolio and contact are here: https://alkhastvatsaev.dev — alkhastvatsaev@icloud.com