CursoVisor is a desktop application built with Electron and React that organises and plays courses stored on disk. It came out of a problem of my own: folders holding hundreds of loose video files, with no progress tracking, no ordering and no way to pick up where you left off.
The problem
A downloaded course is usually a folder tree with inconsistent names. The system player does not know which module comes next, does not remember the timestamp you stopped at, and cannot tell a watched video from a pending one.
How it is built
The app pairs an Electron main process that reaches the file system with a local Express server that serves the content, and a React interface on top. Keeping the server separate from the window process meant the same catalogue logic could be reused if it ever runs in a browser.
- Electron for native disk access and packaging.
- Express to serve files with range request support, which the video scrubber depends on.
- React with TypeScript for the interface and player state.
- Local persistence for progress, with no accounts and no remote server.
What I learned
Serving local video is not just returning a file: without range requests the progress bar does not work at all. It was the detail that took the longest and changed the final experience the most.
