All work

Internal Tools

PJLink Monitor

A web application for monitoring and operating a mixed projector fleet across locations and time zones, with scheduling, history, and usage reports.

My role
Sole developer and maintainer
Project state
Production
Technologies
React / TypeScript / Node.js / Express / SQLite / PJLink

What I built

I built and maintain PJLink Monitor so our team can operate projectors from different manufacturers through one application. It runs on a cloud server and gives staff access to monitoring, controls, schedules, history, and reports from a desktop or phone.

Real application and API with synthetic fleet data and simulated device replies. No live equipment or notification services were connected.

Built for a changing fleet

Our installations use projectors from several manufacturers and are usually temporary. When I looked at software for managing them, the vendor tools were largely designed for desktop PCs and offered uneven support for other manufacturers’ devices. We needed a system that could run on a cloud server and manage sites across time zones. Integrator systems were expensive and better suited to permanent installations.

Building our own application let me bring the fleet into one interface and adapt the device communication to the projectors we actually use. The backend handles differences between PJLink implementations and can be extended with vendor-specific commands or custom protocols as needed.

See what needs attention

The dashboard puts operational issues in one place so staff can quickly identify which projectors and locations need a response. Frequent polling keeps status current, while configurable alert triggers help filter out false alarms caused by network congestion or delayed replies. Alerts remain available to review and can be marked as resolved.

PJLink Monitor dashboard with synthetic fleet status, a combined issue queue, six market summaries, and offline, warning, schedule mismatch, and alert counts.
The dashboard brings together the issues that need attention, grouped by projector so staff can quickly see where to respond. View full size ↗

Schedules in each location’s time zone

Staff set operating hours in the local time of the installation, without having to convert them to the server’s time zone. Schedules can apply to a whole location or selected projectors and combine multiple time patterns for different days. That flexibility lets us accommodate unusual operating hours as well as regular weekly schedules.

Schedule editor with separate weekday and weekend patterns, projector selection, and an explicit location time zone.
Schedules combine different time patterns and run in the location’s time zone. View full size ↗

Look back at what actually happened

A current status screen cannot tell you when a problem began or whether an installation ran correctly last week. I built History to answer those questions. It records device observations and state changes, compares actual operation with scheduled hours, and lets staff move between individual projectors, locations, and different time ranges and levels of detail.

The records are archived on the server, with older data loaded as needed. That gives the team a way to investigate past incidents and confirm operation after the fact.

History page showing a week of actual and scheduled projector operation, with location navigation and a log of state changes.
History compares actual operation with the schedule and lets staff investigate individual state changes. View full size ↗

Usage reports for accounting

We also needed to track projector usage for accounting and depreciation. The application generates monthly reports automatically and supports year-to-date and custom date ranges. Reporting includes units that have left active monitoring, retaining their final readings so the accounting record covers the fleet beyond the projectors currently installed.

Reports page with monthly archives, a custom date range, reporting intervals, and CSV downloads for projector usage.
Reports provide archived monthly readings and usage over a chosen period for accounting. View full size ↗

Usable wherever the team is working

The same location navigation carries across Projectors, Schedules, and History. Staff can check a site, investigate its history, and adjust its schedule without learning a different structure on each page. Everyday controls are straightforward enough for non-technical team members to use.

The application has a fully functional mobile interface for working on site or on the go, multiple user accounts with different privileges, and dark mode. It follows the company’s design system, alongside the other internal tools I build and maintain.

Mobile projector interface in dark mode, showing a location’s devices, status filters, and controls for a selected projector.
Staff can check status and control equipment from a phone while on site or away from a desk. View full size ↗