Monitoring a public information source is not just a matter of fetching its latest contents. The useful question is what changed since the last observation.
PingTEO is a Python service that monitors the Universidad Pablo de Olavide’s official electronic noticeboard. It stores state in SQLite and sends ntfy notifications for additions, changes, and confirmed removals.
State gives changes meaning
A noticeboard snapshot only describes one moment. Determining whether an entry is new, modified, or no longer present requires a durable reference to earlier observations.
PingTEO uses SQLite for that persistent state. Keeping the monitoring history outside process memory gives the service a stable basis for classifying later observations, including across service restarts.
Model events, not raw snapshots
The notification vocabulary is deliberately specific: additions, changes, and confirmed removals. Those categories describe transitions rather than forwarding every observed page state to the subscriber.
This is the central distinction in stateful monitoring. The source may be checked repeatedly, but the meaningful output is an event—a change relative to what the service already knows.
Treat the monitor as a service
The repository documents deployment with systemd. That matches the shape of the application: a monitor is intended to run as a managed background service rather than depend on an interactive terminal.
Service management and SQLite persistence address different parts of continuity. systemd provides a documented way to run the Python process, while the database preserves the state the process needs when it starts again.
Keep transition logic testable
The README also includes instructions for running the project’s unittest suite. For a stateful monitor, this is an important boundary: additions, edits, and removals are behaviours that can be checked without treating a live noticeboard as the only source of validation.
The broader lesson is compact: persist what has been seen, describe changes with explicit event types, and keep the monitoring logic verifiable.