Deckee is a single-purpose macOS app that shows one of my NicDeck reveal.js decks and nothing else. It replaces the Chrome window I used to launch with deck open: one window, one deck, no tabs, no address bar, locked to kiosk mode on my presentation monitor.

Why I built it
Presenting from a browser put tabs, the address bar, the bookmarks bar, and the macOS menu bar on screen, plus the risk of a notification popping up or a stray shortcut closing the deck mid-meeting. I wanted a distraction-free fullscreen surface on the external 1080p panel while keeping my other monitors usable for notes. A plain file:// window does not cut it either: decks load their engine, theme, and avatar video by absolute path over HTTP, and the video needs range requests to seek.
How it works
Its own embedded server. Decks are single HTML files that link the shared runtime and media by absolute path, so Deckee runs a small Node server that mirrors my deck-server.py: rooted at /, follows symlinks, answers Range with real 206 responses for the avatar video, and sends no-cache so live theme edits show on reload. It works even when my always-on deck server is not running.
Native fullscreen, per display. Present mode uses native macOS fullscreen, which hides the menu bar only on the presenting display. My other monitors keep their menu bars and stay usable. The first version used simpleFullscreen, which hid the menu bar on every monitor at once, so I switched once I understood the difference (native fullscreen plus "Displays have separate Spaces" gives per-display behaviour).
One window per deck. Each deck opens in its own window, so I can present one deck while reviewing another. Cmd + backtick cycles between them like any native app.
Recents and a file browser. Cmd+O lists decks I opened recently. Cmd+F scans my decks folder plus my Dropbox sales and client folders for reveal.js decks, skipping saved web pages and LinkedIn exports, so I can jump to any deck without opening Finder.
Features
- Frameless kiosk on a chosen external display, plus a windowed review mode for editing on the 4K monitor
- A discreet filename badge in the corner so I always know which deck is on screen
- Cursor auto-hide while presenting, display-sleep blocker, drag-and-drop a deck to open it
- Config-driven (target display, fullscreen mode, browse folders) with no code changes
Hotkeys
| Key | Action |
|---|---|
| Cmd+O | Recent decks |
| Cmd+F | File browser |
| Cmd + backtick | Cycle between windows |
| R | Reload, cache-bypassed |
| F | Toggle present / review |
| Cmd+W / Cmd+Q | Close window / quit |
Esc stays unbound on purpose: my decks use it for the slide sorter.
Stack
Electron with a CommonJS main process, a hand-rolled Node static and range server, and electron-builder for an ad-hoc-signed arm64 build. No renderer framework, no TypeScript. The whole app is six small modules.