Sass-y Solution

SDS Sentinel

Watch a folder, get audit-ready. No spreadsheets, no cloud uploads.

SDS Sentinel
The Story Behind the Madness

How SDS Sentinel Escaped The Idea Graveyard

A local-first Windows desktop app for EHS managers. It watches a folder for SDS PDFs, extracts GHS hazards, expiry, and SVHC, and gives you one dashboard and a one-click PDF audit report. Everything stays on your machine—SQLite, no cloud. Built for the gap between "Excel + shared drives" and big enterprise SDS platforms.

Genesis Spark

EHS teams drowning in SDS PDFs across folders and inboxes, and manual tracking that falls apart before audit season. I wanted something local-first: watch a folder, extract what inspectors actually care about (GHS, expiry, SVHC), and get one view and one report—no spreadsheets, no sending chemical data to the cloud. Solo micro-SaaS, built to live within a 5–10 h/week maintenance ceiling and a 1k MRR target (four customers at $249/mo).

Core Problem & Insight

The real problem isn't storing SDS—it's fractured tracking and last-minute audit panic. The bet: ingestion and verification can be production-grade (watchdog, parser router, consensus, audit trail) even when the product started as "four fields and a dashboard." Closing the gap meant adding GHS extraction (H/P-codes, signal word, pictograms), storage incompatibility from H-codes, SVHC cross-reference, a compliance score, and a real OSHA-style PDF report—so the app delivers audit-ready output, not just an indexed filing cabinet.

Known Chaos

  • Parsing wildly different SDS PDF layouts and pulling GHS Section 2 (H/P-codes, signal word, pictograms) reliably
  • Dealing with scanned SDS with no text layer (OCR)
  • Keeping scope and maintenance low (solo, 5–10 h/week) while still adding hazard intelligence and a real audit report

Solutions

  • Format-specific parsers (e.g. SpatialGHSParser with PyMuPDF) plus a router (parser/cache/OCR); static GHS reference for storage incompatibility
  • Docling-based OCR behind a setting; router falls back when text parsing fails; clear "Parsed via OCR" and error feedback
  • Strict scope: static SVHC list, no remediation workflows; GHS + SVHC + compliance score + PDF report as the launch set

Arsenal

Python

Python

An interpreted, high-level and general-purpose programming language.

FastAPI

FastAPI

A modern, fast web framework for building APIs with Python based on standard type hints.

Jinja2

Jinja2

A fast, expressive, extensible templating engine for Python, often used for server-rendered HTML.

HTMX

HTMX

A lightweight library that lets you build dynamic interfaces with simple HTML attributes and server-rendered partials—no heavy JS framework.

SQLite

SQLite

A lightweight, file-based relational database engine that requires no separate server—ideal for local and embedded apps.

PyMuPDF

PyMuPDF

A high-performance Python library for reading, rendering, and manipulating PDF documents (fitz).

Docling

Docling

A document understanding library that converts PDFs and images into structured content, with OCR and layout analysis.

Watchdog

Watchdog

A Python library and shell utilities to monitor file system events in real-time.

pystray

pystray

A Python library for creating system tray icons and menus on Windows, macOS, and Linux.

fpdf2

fpdf2

A pure-Python library for generating PDF documents with minimal dependencies.

LemonSqueezy

LemonSqueezy

A payment and licensing platform for digital products and SaaS, with APIs for subscriptions and license keys.

PyInstaller

PyInstaller

A tool that bundles Python applications into standalone executables for distribution without a Python install.

Inno Setup

Inno Setup

A free Windows installer creator used to build setup executables with a wizard-style UI and optional silent install.

Thanks for Peeking Behind the Curtain!

This one's still brewing in the lab. Head back and explore more chaotic creations!