Case study / Personal deployment

ClosetCast.

A purpose-built household operating screen for an older Windows laptop: five RTSP cameras, media, weather, traffic, calendars, Yankees automation, and daily modes designed to keep working without constant attention.

RoleIndividual builder and operator
AudienceHousehold ambient display
StatusActive daily system
StackElectron, Node.js, FFmpeg, PowerShell

01 / Context

A household screen that has to keep working

ClosetCast started with a practical constraint: turn an old Windows laptop into a useful all-day dashboard customized to my home. The goal was not a generic smart-home demo. It was a calm, durable screen that could run every day without needing attention.

The hardest part was translating how I wanted the dashboard to behave into clear product rules. Morning mode needed weather, traffic, and calendar context. Normal mode needed to stay useful without becoming noisy. Yankees mode had to take over at the right time, and wind-down mode needed a different pace.

Contribution boundary

I designed, built, configured, and operate the application. Camera hardware, Apple Calendar, Open-Meteo, media sources, and sports data remain external dependencies.

Current ClosetCast interface with camera feeds and personal information sanitized for security and privacy
Current versionCamera feeds and personal information intentionally sanitized for security and privacy

02 / System

Simple stack, explicit security boundaries

The stack stays intentionally straightforward: Electron, plain HTML, CSS, JavaScript, JSON configuration, FFmpeg, and focused Node modules. That keeps the system understandable and maintainable on the older laptop it was built to use.

01Private local configuration

Lorex and Ring RTSP URLs, feature flags, and local paths stay outside git; a public example file documents the expected shape.

02Independent services

Camera bridging, calendars, weather, traffic, media, schedules, and time rules fail separately.

03Kiosk renderer

The interface coordinates modes and layouts while keeping unavailable services visible but contained.

Calendar privacy

Calendar support uses user-provided .ics or webcal:// feed URLs. The application does not store Apple ID credentials or depend on account passwords.

03 / Operation

What runs every day

  • Five RTSP camera feeds—including Lorex cameras and a Ring doorbell—bridged through FFmpeg with focus, split, grid, and primary-camera layouts.
  • Morning, normal, Yankees, and wind-down modes that change the information and media shown throughout the day.
  • Weather, traffic, calendar events, local media, and configured YouTube ambiance with explicit unavailable states.
  • Schedule-driven Yankees behavior that detects the game window, opens the configured stream page, resolves matching links during prepare and live windows, and returns to the dashboard afterward.
  • Windows Task Scheduler support for wake behavior, scheduled relaunch, and a friendly setup entry point for the target laptop.
  • Local logs, private configuration, and an isolated test profile for troubleshooting without real household data or disruptive kiosk behavior.

04 / Verification

Recovery is part of the interface

Feeds reconnect

Exited RTSP processes wait and retry while the camera tile remains visible.

Data degrades safely

Calendar data is cached, while failed weather, traffic, schedule, or media requests are logged without taking down the display.

Failures stay isolated

A broken camera, media source, or Yankees lookup does not collapse the rest of the kiosk.

Tests avoid side effects

The isolated profile disables fullscreen, sleep, autostart, wake tasks, and real private configuration.

The interface below is preserved as a version-history artifact. It shows the earlier ClosetCast 1.0/beta design, before the current layout and feature set shown above.

ClosetCast 1.0 beta interface from before the current layout and expanded feature set
ClosetCast 1.0 / betaEarlier interface retained to show the product's evolution

05 / Result

From experiment to active household system

ClosetCast now runs as an operated display on the machine it was designed for, waking on schedule, presenting five camera feeds and the right household context for each part of the day, and degrading visibly when an external service is unavailable.

The biggest lesson was that implementation speed is not the same as product judgment. AI helped me generate and modify code, but I still had to define the architecture, daily behavior, security boundaries, failure modes, and tradeoffs that made the application useful instead of a pile of features.

Operational evidence

Active local configuration, scheduled tasks, logs, isolated test profiles, and documented recovery paths.