ProjectsProject · Industrial Monitoring

Gas Cylinder Monitor

A web app for tracking the calibration gas cylinders used by process analyzers — status, expiration dates and stock for every group, with automatic alerts instead of manual checks.

End-to-end design and developmentReact 19 + TypeScriptFirebaseMobile-first

The problem

Process analyzers (monitoring CO, NOx, SO2 and other parameters) need regular calibration with reference and zero gas cylinders, often shared across several lines. Tracking them by hand — which cylinder is full, which is in use, which are about to expire, how much stock is left for each line — is easy to lose track of, and a mistake has real consequences: an analyzer down for lack of stock or, worse, a calibration done with expired gas without anyone noticing.

The solution

Gas Cylinder Monitor centralizes cylinder tracking by analyzer group: the status of each cylinder (Full / In Use / Running Low / Empty / Expired / Ordered / Shipped), expiration date, pressure and any subgroup it belongs to. A three-level alert system (green / yellow / red) flags insufficient stock or expiring/expired cylinders for each group, so problems surface right away instead of when you need the gas.

Overview

Every group's status at a glance

Group details

Inventory, subgroups and shared zero gas

Setup

Creating groups and subgroups

Design highlights

More than a list of cylinders: every interface decision makes a problem visible before it turns into downtime.

01 — Alerts

Automatic alerts, always with a clear reason

Configurable thresholds (months of notice before expiration, minimum stock) color each group green/yellow/red, but the reason for the alert is always spelled out — never left to color alone — so it stays readable for screen reader users too.

02 — History

Every status change is tracked

A global chronological log records every status change for every cylinder, plus a separate history of manual checks — useful for understanding what happened and when, without having to piece it together from memory.

Shared zero gas

A cylinder can be marked as a shared system resource (Zero/Nitrogen) and automatically appear on every group that uses it, with no need to duplicate it or track it separately.

Subgroups

Analyzer groups with more complex setups (e.g. multiple calibration racks) can have their own subgroups, with dedicated inventory and filters.

Mobile-first

Originally designed only for smartphone use on the plant floor, then adapted for tablet and desktop while keeping the mobile experience intact.

Tech stack

Frontend

React 19TypeScriptVite 6React Router 7Tailwind CSS v4

Backend

FirebaseFirestoreEmail/password authServerless

Deployment

VercelAutomatic build on every push

My role

Gas Cylinder Monitor started as a simple tool for a real, personal need: always knowing the actual status of the calibration cylinders, with automatic alerts instead of manual checks.

Over time I turned it into a real product: locked it down (authentication, protected routes, Firestore rules), fixed data integrity bugs that surfaced in real-world use (orphaned cylinders after a group was deleted, out-of-sync history), and finally redesigned the entire interface — a high-contrast industrial visual identity ("Cylinder Steel"), shared components, accessibility and desktop/tablet support — while keeping the app working and verified at every step.

Note: the screenshots on this page show the app filled with fictional demo data (sample analyzer groups and cylinders), created specifically for this presentation — no real data is involved.

Contact

Facing a similar problem?

Every project above started from a real need. If one of them sounds familiar, a 20-minute call is enough to see if and how I can help you too.