GREGORIO PIROLINI

Programmierung

Hier finden Sie eine Auswahl meiner Programmierprojekte – sowohl abgeschlossene Arbeiten als auch laufende Entwicklungen.

  • Intelligentes Post- und Dokumentenmanagement (Flask & OCR)

    🧠Zweck des Projekts

    Dieses Projekt ist eine webbasierte Anwendung auf Basis von Python und Flask, die den gesamten Prozess der physischen Postverarbeitung automatisiert und digitalisiert.

    Ziel ist es, eingehende Briefe, Rechnungen und Belege effizient zu erfassen, zuzuordnen, zu archivieren und Nutzer automatisiert darüber zu informieren — mit minimalem manuellem Aufwand.

    Das System wurde als real eingesetzter Service konzipiert und umgesetzt, nicht als Demo- oder Lernprojekt.

    🎯Hauptfunktionen & Zielsetzung

    • Digitalisierung physischer Post mittels OCR
    • Automatische Zuordnung von Briefen zu Kundenkonten
    • Zentrale Verwaltung von Dokumenten und Metadaten
    • Benachrichtigung der Nutzer über neue Post
    • Abrechnung optionaler Zusatzleistungen
    • Admin-Werkzeuge zur vollständigen Steuerung des Workflows

    🧩 Zentrale Funktionen

    👤 Benutzerverwaltung & Authentifizierung

    • Sicheres Login-System
    • Rollenbasierter Zugriff (Administrator/Kunde mit 3 verschiedenen Abonnementoptionen)
    • Jeder Nutzer sieht ausschließlich seine eigenen Dokumente
    • Persönliches Dashboard pro Kunde

    📨 OCR-basierte Briefverarbeitung

    • Eingehende Briefe werden fotografiert
    • OCR erkennt automatisch:
      • Empfängername
      • Adresse
      • Unternehmen
    • Das System:
      • ordnet den Brief dem richtigen Kundenkonto zu
      • dokumentiert den Verarbeitungsstatus

    🗂️ Dokumenten- & Postverwaltung

    • Speicherung pro Dokument:
      • Scan (PDF oder Bild, falls vom Kunden gewünscht)
      • Eingangsdatum
      • Status (neu, gescannt, weitergeleitet, abgeholt)
    • Kunden sehen:
      • neue Post seit dem letzten Login
      • vollständige Historie aller Briefe
      • Scans von den Briefen
      • Invoices
    • Sendungsverfolgung wird mit der API der Deutschen Post gespeichert

    💾 Datenbank-Architektur

    • Eigene relationale Datenbank für:
      • Benutzer
      • Briefe
      • Scans
      • Zahlungen
      • Tracking-Events
    • Umsetzung mit ORM (Flask / SQLAlchemy-Stil)
    • Trennung von operativen Daten und Business-Übersicht

    📊 Airtable-Integration

    • Airtable dient als zentrale Kunden-Stammdatenbank
    • Synchronisiert werden u. a.:
      • Name
      • Kontaktdaten
      • Service-Status
    • Die Flask-App bleibt das operative Kernsystem, Airtable dient als Business-Übersicht

    🔔 Automatisierte Benachrichtigungen

    Kunden werden einmal täglich automatisch über neue Post informiert via:

    • 📧 E-Mail
    • 📱 SMS
    • 💬 WhatsApp

    Umgesetzt mit Twilio.

    Dadurch müssen Nutzer sich nicht aktiv einloggen, um informiert zu bleiben.

    💳 Abrechnung & Monetarisierung

    Unterstützte kostenpflichtige Services:

    • Scannen von Briefen
    • Weiterleitung physischer Post

    Zahlungsabwicklung erfolgt über PayPal:

    • Zahlungen werden in der Datenbank gespeichert
    • Verarbeitungsschritte können vom Zahlungsstatus abhängig gemacht werden

    🖥️ Kunden-Dashboard (GUI)

    Kunden können:

    • sich sicher einloggen
    • sofort sehen, ob neue Post seit dem letzten Login eingegangen ist
    • gescannte Dokumente ansehen und herunterladen
    • den Status ihrer Briefe verfolgen
    • Scans ihrer Briefe anfordern
    • Versand ihrer Briefe anfordern

    Fokus: Übersichtlichkeit, Automatisierung, geringe kognitive Last

    🛠️ Admin-Dashboard (GUI)

    Administratoren können:

    • Briefe fotografieren oder Scans hochladen
    • Briefe sortieren und zuordnen
    • Versandlabels / Briefmarken für Weiterleitungen drucken (verschiedene Tarife)
    • Briefe als weitergeleitet markieren
    • Nutzer bei ausstehenden Zahlungen sperren
    • Benachrichtigungen manuell auslösen, falls Automatisierungen fehlschlagen
    • Logs und Systemstatus einsehen

    🧰 Technischer Stack

    • Backend: Flask
    • OCR: Python-basierte OCR-Pipeline
    • Datenbank: SQL-Datenbank (ORM)
    • Benachrichtigungen: Twilio
    • Zahlungsabwicklung: PayPal
    • Externe Datensynchronisation: Airtable
    • Benutzer-Authentifizierung & Sessions
    • PDF- & Bildverarbeitung
    • Logging & geplante Hintergrundaufgaben

  • Filip – Webhook-basierter Chatbot mit n8n und OpenAI

    Kurzbeschreibung

    Filip ist ein leichter, selbst gehosteter Chatbot, der als digitale Anlaufstelle („Front Desk“) für einen Coworking-Space konzipiert wurde. Er läuft auf einer lokalen n8n-Installation und kommuniziert über eine einfache HTTP-Webhook-Schnittstelle

    Projektidee

    In vielen Coworking-Umgebungen gibt es wiederkehrende Fragen:
    Öffnungszeiten, Räume, Atmosphäre, allgemeine Infos. Ziel von Filip war es, einen einfachen, flexiblen und selbst kontrollierten Chatbot zu bauen – ohne Abhängigkeit von externen SaaS-Plattformen.

    Der Fokus lag dabei nicht auf einem komplexen UI, sondern auf:

    • klarer Architektur
    • leichter Wartbarkeit
    • schneller Integration in bestehende Systeme

    Funktionen

    • Persönlichkeits-Prompt („Filip“) für einen freundlichen, informellen Ton
    • Entgegennahme von Nachrichten über einen HTTP-Webhook
    • Antwortgenerierung mit einem OpenAI-Chatmodell
    • Kurzzeit-Kontext („Conversation Memory“) für zusammenhängende Dialoge
    • Automatische Anpassung der Sprache an die Sprache des Nutzers

    Technischer Aufbau

    • n8n (self-hosted, lokal, ohne Docker)
    • Webhook-Workflow als API-Einstiegspunkt
    • JavaScript Code Nodes zur Vorverarbeitung der Eingaben und Verwaltung des Chat-Verlaufs
    • OpenAI Chat Model zur Textgenerierung

    Der gesamte Chatbot kann lokal auf einem PC, NAS oder Server betrieben werden und benötigt keine Datenbank für den Basisbetrieb.

    Warum dieser Ansatz

    • Volle Kontrolle über Daten und Infrastruktur
    • Keine UI-Abhängigkeit (Chat kann später in Websites, Tools oder Apps eingebunden werden)
    • Sehr niedrige Einstiegshürde für Anpassungen
    • Gute Grundlage für spätere Erweiterungen (Rate-Limiting, Logging, Website-Integration)

    Status

    • Funktionsfähiger Prototyp
    • Lokal getestet
    • Workflow versioniert (Git)

    Eine direkte Website-Integration ist möglich, wurde aber bewusst nachgelagert, um zuerst eine stabile und dokumentierte Basis zu schaffen.


  • Eufy Security – Android Automation for Bulk Video Download

    Kontext

    Die Android-App von Eufy Security bietet keine praktikable Möglichkeit, viele aufgezeichnete Videos gesammelt herunterzuladen.  

    Dieses Projekt automatisiert den manuellen UI-Workflow, indem ein Android-Smartphone vom Computer aus gesteuert wird.

    Ziel:

    > Viele Eufy-Kamera-Videos zuverlässig sichern – ohne Cloud-Abo.

    Grundidee

    • Ein Android-Smartphone läuft mit der Eufy-Security-App
    • Das Smartphone ist per USB (ADB) mit einem Computer verbunden  
    • Die Automation wird vom Computer aus gestartet
    • Taps, Navigation und Downloads werden in der App simuliert
    • Bildschirmänderungen werden per OCR erkannt, nicht nur über feste Wartezeiten  

    Das macht den Ablauf etwas langsamer, aber deutlich stabiler.

    Beteiligte Dateien

    Die Automation besteht aus mehreren kleinen Skripten mit klaren Aufgaben.

    AutoHotkey (Hauptsteuerung)

    download_from_eufy-4.ahk

    • Läuft auf dem Computer  
    • Steuert das Android-Gerät über ADB  
    • Simuliert Taps, Zurück-Navigation und Screenshots  
    • Ruft das Python-OCR-Skript auf  
    • Durchläuft die Videoliste automatisch  

    Dieses Skript wird manuell gestartet.

    Python-OCR-Hilfsskript

    4_compare_screenshots.py

    • Vergleicht zwei Screenshots des Android-Bildschirms  
    • Nutzt Tesseract OCR zur Texterkennung  
    • Erkennt, ob sich der Bildschirm geändert hat oder nicht  
    • Gibt das Ergebnis (`identical` oder `different`) an AutoHotkey zurück  

    So wird vermieden, sich nur auf feste Delays zu verlassen.

    Konfigurationsdatei

    config.ini

    Alle systemabhängigen Pfade sind zentral in einer Datei gespeichert:

    Energie- / Schlafsteuerung

    keep_awake.bat

    Verhindert, dass der Computer während langer Downloads in den Ruhezustand geht.

    allow_sleep.bat

    Stellt das normale Energieverhalten nach Abschluss wieder her.

    So werden USB-Abbrüche und unterbrochene Downloads vermieden.

    Nutzung

    1 Entwickleroptionen und USB-Debugging auf dem Android-Gerät aktivieren

    2 Smartphone per USB mit dem Computer verbinden

    3 Eufy Security App öffnen und zur Aufnahmeliste navigieren

    4 AutoHotkey-Skript auf dem Computer starten

    Ab diesem Punkt läuft der Download automatisiert.


  • Tuya Cameras → NAS File Transfer

    Kurzbeschreibung

    Automatisierte Übertragung von Videoaufnahmen günstiger Tuya-basierter IP-Kameras auf ein lokales NAS – komplett ohne RTSP, ohne Cloud und ohne Abo.

    Ausgangslage / Problem

    Viele preisgünstige Tuya-Kameras bieten kein RTSP.
    Die Hersteller-Cloud ist für lokale Archivierung ungeeignet, unsicher und verursacht laufende Kosten.

    Ziel

    Regelmäßige, vollständige und zuverlässige lokale Sicherung aller Kameraaufnahmen – ohne Cloud-Zwang und ohne Abonnement.

    Lösung

    Ich habe einen direkten Datei-Transfer-Workflow zwischen Kamera und NAS umgesetzt:

    • Kamera und NAS befinden sich im selben lokalen Netzwerk
    • Vergabe fester IP-Adressen für Kamera und NAS
    • Das NAS lauscht aktiv auf eingehende Verbindungen
    • Ein eigenes Skript wird auf die microSD-Karte der Kamera kopiert
    • Zugriff auf die Kamera über Telnet
    • Start des Skripts direkt auf der Kamera
    • Die Kamera sendet Videodateien alle 10 Minuten an das NAS
    • Parallel wird eine Logdatei zur Überwachung geschrieben

    Der gesamte Prozess läuft vollautomatisch, ohne Benutzerinteraktion.

    Technischer Ablauf (vereinfacht)

    Tuya Camera
    └─ Custom Script (SD-Karte)
    ├─ sammelt Videodateien
    ├─ überträgt Dateien via netcat
    └─ schreibt Logdatei

    NAS (feste IP, Listening Port)

    Persistenter lokaler Speicher

    Technologien

    • Embedded Linux (Tuya Camera)
    • Shell-Skripte
    • netcat (nc)
    • Telnet
    • Lokales Netzwerk (statische IPs)
    • NAS (lokaler Speicher)

    Ergebnis

    • Automatisierte lokale Sicherung von Kameraaufnahmen
    • Kein Cloud-Zwang, keine Abonnements
    • Volle Kontrolle über Speicher und Zugriff
    • Stabiler Dauerbetrieb über längere Zeiträume
    • Erweiterbar (Rotation, Monitoring, Backups)

    Kontext

    Privates / semi-professionelles Projekt.
    Die Lösung wurde speziell für kostengünstige Tuya-Kameras ohne RTSP-Unterstützung entwickelt.

    GitHub

    Link wird später hinzugefügt.


  • Mp3 Player – Retro Tape Deck

    Ein leichter, selbst gehosteter MP3-Player im Retro-Kassetten-Look.

    Click on the name of a track and it will play…

    ♪ ♫ Play me!

    Trough the hidden Landscape

    Nein Nein

    It’s all about the Frequency

    Guitar Opus

    Eine kleine Waldmusik

    Select a track to play…

    if it doesn’t start please wait till track is loaded or click here to show player control.

    Funktionen

    • HTML5-MP3-Wiedergabe
    • Benutzerdefinierte Wiedergabelisten-Benutzeroberfläche
    • Retro-Kassettenanimation
    • Responsives Layout
    • Autoplay-Block-Fallback-Behandlung

    Technologie:

    HTML5 · CSS · JavaScript · jQuery

    GitHub links

    Quellcode auf GitHub:

    github.com/gregorio-pirolini/mp3_player

    Live demo:

    https://gregorio-pirolini.github.io/mp3_player


  • Dictée magique

    Ein französisches Buchstabier-Spiel (inspiriert von einem Spiel aus meiner Kindheit).
    Der Computer wählt Wörter aus einer Datenbank und der User muss sie korrekt buchstabieren.

    Live-Demo: http://dictee.gregoriopirolini.com/

    Login: user
    Passwort: password2026

    Funktionen

    • Audio-Diktat mit korrekter französischer Aussprache
    • 4 Schwierigkeitsstufen (A–D)
    • Lern-Sessions mit je 15 Wörtern
    • Direktes Feedback & Punktesystem
    • Intelligente Wortauswahl (schwierige Wörter kommen häufiger)
    • User-Accounts mit persönlichem Lernfortschritt

    Spielprinzip

    • Das Wort wird per Audio abgespielt
    • Der User tippt die Schreibweise ein
    • Je nach Anzahl der Versuche gibt es Punkte
    • Fehlerhafte Wörter werden später gezielt wiederholt

    Ziel ist es, durch Wiederholung und Gewichtung langfristig die Rechtschreibung zu verbessern.

    Technischer Hintergrund

    • Frontend: HTML, CSS, JavaScript
    • Backend: PHP
    • Datenbank: MySQL (SQL)
    • Audio-basiertes Lernen mit dynamischer Wortauswahl

  • Zoom Effect (Magnifier Lens)

    Frontend-Demo für einen Maus-/Touch-Zoom mit vergrößertem Bildausschnitt.

    Projektbeschreibung

    Idee & Ausgangspunkt

    Bei der Erstellung einer Website für einen Künstler habe ich eine Fotogalerie mit vollflächig dargestellten Bildern umgesetzt. Trotz der großformatigen Darstellung gingen jedoch sehr feine Details der Bilder verloren.

    Die Idee war daher, einen dezenten Zoom-Effekt direkt auf der Seite zu entwickeln, der es ermöglicht, noch mehr Details sichtbar zu machen, als es selbst eine Vollbildansicht erlaubt – ohne das Bild zu verlassen oder eine neue Ansicht zu öffnen.

    Technisch interessant

    • Der Zoom basiert auf einem separaten, hochauflösenden Originalbild, das als Hintergrund in einer schwebenden „Lens“ verwendet wird.
    • Die Position des vergrößerten Bildausschnitts wird proportional zur Maus- bzw. Fingerposition berechnet.
    • An den Bildrändern wird der Zoom bewusst leicht versetzt, um leere Bereiche zu vermeiden und eine stabile Darstellung zu gewährleisten.
    • Für Touch-Geräte wurde eine Press-&-Hold-Interaktion umgesetzt, um Konflikte mit Scroll- und Swipe-Gesten zu vermeiden.
    • Das System nutzt eine WordPress-typische Dateinamenslogik (-WIDTHxHEIGHT), um automatisch vom verkleinerten Bild auf das Original zu schließen.

    Ergebnis

    Ein leichter, unaufdringlicher Zoom-Effekt, der:

    • Bilddetails sichtbar macht
    • den Seitenfluss nicht unterbricht
    • sowohl mit Maus als auch Touch nutzbar ist
    • ohne externe Libraries oder Overlays auskommt

  • Swipe – Touch-basierter Image Slider (Vanilla JS)

    Es handelt sich um eine einfache swipe Funktion für Mobiles & IPads.

    Swipe über das Bild um es zu tauschen und die verschiedenen werte zu berechnen.

    Swipe Start:

    Swipe End:

    Swipe Time:

    x Touch Start Pos:

    x Touch End Pos:

    y Touch Start Pos:

    y Touch End Pos:

    xDiff:

    yDiff:

    Swipe Richtung:

    Ergbenis:

    Projektbeschreibung

    Dieses Projekt ist ein schlanker, touch-basierter Image-Slider, umgesetzt mit Vanilla JavaScript, HTML und CSS — komplett ohne externe Libraries.

    Der Fokus liegt bewusst auf Touch-Gesten für mobile Geräte (Smartphones & Tablets).

    In diesem Beispiel ist der Swipe-Event direkt mit einem Bildwechsel verknüpft.

    Features

    • 📱 Swipe-Navigation per Touch
    • 🎯 Sauberes Einrasten der Bilder (Snapping)
    • ⚡ Sehr leichtgewichtig (keine Abhängigkeiten)
    • 📐 Responsives Layout
    • 🧩 Einfach erweiterbar und wiederverwendbar

    Motivation & Ziel

    Viele Slider-Lösungen sind unnötig komplex oder stark von Libraries abhängig.

    Ziel dieses Projekts war es:

    • Touch-Events besser zu verstehen
    • Eine klare, kontrollierte Swipe-Logik zu entwickeln
    • Sauberen, gut lesbaren JavaScript-Code zu schreiben
    • Eine einfache Grundlage für spätere Projekte zu schaffen

    Der Slider ist als technisches Bauteil gedacht — nicht als fertiges Plugin.

    Technischer Stack

    • HTML5
    • CSS3
    • Vanilla JavaScript

    GitHub

    Download

    https://github.com/gregorio-pirolini/swipe

    Vorschau

    https://gregorio-pirolini.github.io/swipe