📜 Changelog - m5o.de - URL Shortener


[0.10.8] - März 2025

🚀 Neue Features & Verbesserungen

  • 📆 Einführung eines Datums- und Uhrzeitfeldes für das Ablaufdatum

    • Beim Erstellen eines Kurzlinks kann nun eine exakte Ablaufzeit (Datum & Uhrzeit) gesetzt werden.
    • Verwendet das HTML5-Element <input type="datetime-local">, um eine benutzerfreundliche Auswahl zu ermöglichen.
    • Verbesserung: Mindestdatum wird automatisch auf die aktuelle Zeit gesetzt.
  • 🕒 Verbesserte Ablaufprüfung für Links

    • Backend überprüft jetzt, ob ein Link abgelaufen ist, bevor er weitergeleitet wird.
    • Falls ein Shortlink abgelaufen ist (410 Gone), wird eine spezielle Fehlerseite (error-410.html) angezeigt.
    • Frontend-Handling optimiert:
      • 401 (Passwortgeschützte Links) → Weiterleitung zur Passwort-Eingabeseite.
      • 410 (Abgelaufene Links) → Zeigt nun eine Benachrichtigung & Fehlerseite an.
      • Sonstige Fehlerflash-Meldung für eine allgemeine Fehleranzeige.

🐞 Bugfixes & Optimierungen

  • 🌍 Korrekte Zeitzonen-Umrechnung für Ablaufdaten

    • Ablaufdatum wird jetzt in UTC gespeichert und geprüft, um Zeitverschiebungen zu vermeiden.
    • Fix: Beim Speichern wurde vorher eine Stunde addiert, jetzt wird das Datum korrekt behandelt.
  • 📋 Sicherstellung, dass nur gültige Ablaufdaten gesetzt werden

    • Prüfung hinzugefügt: Ablaufdatum darf nicht in der Vergangenheit liegen.
    • Falls das Ablaufdatum bereits abgelaufen ist, wird die Erstellung abgelehnt.
  • 🔗 Frontend leitet nicht mehr auf URLs mit Klartext-Parametern weiter

    • Fix: Beim Senden von Daten wurden zuvor GET-Parameter im Browser angezeigt (?url=...&password=...).
    • Jetzt wird ein sicheres JSON-Formular verwendet, das die Daten im POST-Body sendet.
  • Fix Weiterleitung bei Passwortänderungen im Profil

  • Fix Weiterleitung zur Statistikseite im Profil
  • Anpassung der Abstände bei Login, Registrieren und Passwort vergessen mb-3 nach unten angepasst.

[0.10.7] - März 2025

🚀 Neue Features & Verbesserungen

  • 📂 Einführung eines media/ Ordners als zentrales Volume

    • Medien-Dateien werden nun vom Frontend verwaltet, während das Backend nur Dateien speichert.
    • Verzeichnisstruktur bleibt klar getrennt (static/ für Frontend-Assets, media/ für Benutzerdateien).
    • Vorteil: Kein API-Call für statische Medien notwendig, schnellere Ladezeiten.
  • 🖼️ Asynchrone Generierung von zufälligen Profilbildern

    • Celery generiert nun automatisch pixelbasierte Avatare für neue Benutzer.
    • Speicherung erfolgt direkt im media/profiles/ Ordner, ohne dass das Backend die Dateien ausliefern muss.
    • Bilder werden anhand einer symmetrischen 5x5-Random-Matrix erzeugt.
  • 📂 Verbesserung der Projektstruktur im Frontend

    • Alle Routen im Frontend wurden in den Ordner routes/ verschoben, um eine bessere Struktur und Wartbarkeit zu gewährleisten.
    • Profilbezogene Routen wurden in einen eigenen Router (profile_router.py) ausgelagert.
  • 🖼️ Verbesserte UI für die Verwaltung des Profilbilds

    • Profilbild-Upload und Generierung sind nun besser in das Design integriert.
    • Profilbild und Benutzername wurden visuell zusammengeführt.
    • Upload- und Generierungsoptionen sind nun klar strukturiert & ausgerichtet.
    • Asynchroner Generierungsprozess wird dem Benutzer nun klarer mit einem Hinweis angezeigt.

🐞 Bugfixes & Optimierungen

  • 🔄 Korrekte Volumenverwaltung für Celery

    • Celery-Worker hat jetzt Zugriff auf das media-Volume, um Profilbilder direkt ins Frontend zu speichern.
    • Sicherstellung, dass /app/media/profiles/ vor dem Speichern angelegt wird.
  • ⚡ Optimierte Medienbereitstellung

    • Frontend stellt /media/ nun direkt bereit, Backend ist nicht mehr involviert.
    • Vorteil: Kein Overhead durch API-Calls → Medien werden schneller geladen.
  • 🖼️ Sicherstellung, dass Profilbilder oder ein Fallback-Bild angezeigt werden

    • Falls das gespeicherte Profilbild nicht existiert, wird nun automatisch ein Standardbild (user-x.png) verwendet.
    • Fallback ersetzt fehlerhafte Bilder dynamisch durch ein Ersatzbild (user-x.png), falls ein 404-Fehler auftritt.

[0.10.6] - März 2025

🚀 Neue Features & Verbesserungen

  • Automatisches Abmelden bei Session-Ablauf 🔒
    • Nutzer werden nun automatisch aus dem System abgemeldet, wenn ihre Session abläuft.
    • Ein regelmäßiger Session-Check alle 5 Minuten erkennt abgelaufene Tokens und loggt den Benutzer aus.
    • Falls der User inaktiv ist, erfolgt ein automatisches Logout nach 30 Minuten ohne Interaktion.
  • Die Navbar wird nun dynamisch aktualisiert, sodass der "Meine URLs"-Button verschwindet, wenn die Session beendet wird.

🐞 Bugfixes & Optimierungen

  • Session-Handling verbessert: Das Frontend erkennt nun zuverlässig, wenn ein Nutzer nicht mehr eingeloggt ist.
  • Login-Weiterleitung optimiert: Nach einem abgelaufenen Token wird der User sofort zur Login-Seite umgeleitet.
  • Dashboard optimiert Ein Fehler bei der Mobiloptimierung des Dashboards wurde behoben.
  • Admin Linkstatistiken Der Admin nutzt nun die selbe Ansicht wie der User bei der Linkstatistik.
  • Admin Userübersicht Die Buttons in der Userübersicht wurden angepasst und sind nun besser lesbar.
  • Profilstatistiken haben nun auch Zugriff auf die QR Codes der Links

[0.10.5] - März 2025

🆕 Neue Features & Verbesserungen

  • 🌍 Zeitzonen-Handling optimiert:
    • Alle Zeitstempel werden jetzt einheitlich in UTC gespeichert und korrekt in Europe/Berlin umgewandelt.
    • Backend gibt nun ISO-Zeitstempel mit UTC-Offset (+00:00) aus, um Zeitzonen-Probleme zu vermeiden.
    • Frontend rechnet UTC-Zeiten automatisch in Europe/Berlin um, sodass Benutzer stets die richtige lokale Zeit sehen.

🐞 Bugfixes & Optimierungen

  • 🛠 Falsche Zeitanzeige auf verschiedenen Seiten behoben:
    • timestamp-Werte wurden zuvor als UTC-String angezeigt (2025-03-01T16:46:19.730868+00:00).
    • Jetzt wird localtime_filter in Flask/Jinja2 korrekt angewendet, sodass alle Zeiten richtig dargestellt werden.
  • 🔄 Datenbank-Modelle aktualisiert:
    • DateTime(timezone=True) für alle created_at- und timestamp-Spalten gesetzt.
    • Sicherstellung, dass SQLAlchemy immer tzinfo=UTC verwendet.

[0.10.4] - März 2025

✨ Neue Features & Verbesserungen bei den Statistiken

  • Dynamische Pagination 📄: Die Seitenzahlen in werden nun auf maximal 10 Einträge begrenzt und erweitern sich dynamisch bei großen Datenmengen. Es werden Pro Seite immer 20 Elemente angezeigt
  • Live-Suche innerhalb der Statistiken 🔍: Die Suchfunktion filtert die Ergebnisse direkt ohne Neuladen der Seite.
  • Spaltenauswahl verbessert ✅:
    • Ausgewählte Spalten bleiben nun auch nach dem Seitenwechsel erhalten.
    • Benutzerpräferenzen werden im LocalStorage gespeichert, sodass sie bei erneutem Laden nicht verloren gehen.
  • Optimierte Datenaktualisierung innerhalb der Statistiken 🔄:
    • Die Statistikdaten werden jetzt asynchron nachgeladen.
    • Alle Event-Listener für Spaltenauswahl und Suche werden nach jeder Aktualisierung neu gesetzt.

🛠️ Bugfixes & Optimierungen

  • Fix: Spaltenauswahl-Fehler 🛠️: Die Spaltenauswahl funktionierte nach dem Laden neuer Seiten nicht mehr – dies wurde behoben!
  • Fix: Pagination-Fehlverhalten 🔢: Seitenzahlen wurden vorher nicht korrekt aktualisiert – nun passt sich die Anzeige dynamisch an.
  • Performance-Optimierung ⚡: Die Client-seitige Verarbeitung wurde verbessert, um die Statistikseite schneller und reaktionsfähiger zu machen.

[0.10.3] - März 2025

🚀 Neue Features & Verbesserungen

  • 🔄 Menü vollständig überarbeitet für eine bessere Mobiloptimierung und Dark-/Light-Mode-Kompatibilität.
  • 🎨 Icons hinzugefügt für alle Menüpunkte mit Tabler Icons (Webfont-Variante für bestmögliche Performance).
  • 📏 Verbesserte Abstände durch Bootstrap-Klasse me-2, um Text und Icons sauber auszurichten.
  • 🌙 Theme-kompatible Icons – alle Icons passen sich jetzt automatisch an das Dark-/Light-Theme an.
  • 📱 Dropdown-Menü für Admins verbessert für eine saubere Anzeige auf Mobilgeräten.
  • ☀️🌙 Dynamischer Theme-Umschalter hinzugefügt
    • Sonne (ti-sun) erscheint im Dunkelmodus
    • Mond (ti-moon) erscheint im Hellmodus
    • Speicherung der Auswahl mit localStorage, damit das Theme erhalten bleibt

🐛 Bugfixes & Optimierungen

  • Menü war nicht mobiloptimiert – das Problem wurde durch collapse navbar-collapse behoben.
  • 🎨 Farbanpassung für Icons – Icons passen sich nun über currentColor an die Schriftfarbe an.
  • 🛠 Entfernung von CSS-Workarounds – Icons funktionieren jetzt ohne zusätzliche CSS-Regeln in base.html.

[0.10.2] - Februar 2025

🚀 Neue Features & Verbesserungen

  • 📊 Korrekte Erfassung von UTM-Parametern für normale Links
    • UTM-Parameter (utm_source, utm_medium, utm_campaign) werden nun zuverlässig in den Statistiken erfasst.
    • Beispiel zur Verwendung von utm Kampagnen https://m5o.de/kurzlink/?utm_source=google&utm_medium=cpc&utm_campaign=promotion1
    • Verbesserte Verarbeitung von Query-Parametern zur präzisen Analyse von Kampagnen-Daten.

🛠 Optimierungen

  • 🔄 Verbesserte Weiterleitung für passwortgeschützte Links
    • Die Weiterleitung von passwortgeschützten Links funktioniert weiterhin einwandfrei.
    • Die Erfassung von Statistiken für Passwort-Links wird in einer späteren Version optimiert.

🐞 Bekannte Probleme

  • ⚠️ Keine UTM Statistikerfassung bei passwortgeschützten Links
    • Aktuell werden für passwortgeschützte Links keine UTM-Tracking-Daten erfasst.
    • Dieses Problem wird in einer zukünftigen Version behoben, um auch bei Passwort geschützten Links utm Kampagnen zu unterstützen.

[0.10.1] - Februar 2025

🚀 Neue Features & Verbesserungen

  • 📊 Erweiterte und optimierte Tracking-Statistiken

    • Die Speicherung von Klick-Statistiken wurde überarbeitet und umfasst nun zusätzliche Datenpunkte:
    • Kurz-URL & Ziel-URL
    • Zeitstempel (Datum & Uhrzeit)
    • Gesamtanzahl der Klicks
    • Referrer (Herkunftsseite des Nutzers)
    • Geografische Daten (Land, Region, Stadt)
    • Browsertyp & -version, Betriebssystem & Gerätetyp
    • Sprach- und Ländereinstellungen des Nutzers
    • Kampagnen- oder UTM-Parameter zur Analyse von Werbemaßnahmen
    • Ladezeit / Response-Time der Link-Aufrufe
    • Fehlermeldungen / Abbruchraten
    • Falsche Passworteingaben bei geschützten Links
    • Die Tracking-Daten werden nun sowohl für normale als auch für passwortgeschützte Links korrekt erfasst.
    • Fehlgeschlagene Passwortversuche werden gezählt und in den Statistiken angezeigt.
    • Die Statistiken bleiben erhalten, selbst wenn ein Kurzlink gelöscht wird – der Shortcode kann jedoch für neue Links wiederverwendet werden.
  • ⚡ Asynchrone Speicherung der Tracking-Daten mit Celery

    • Die Speicherung der Statistiken erfolgt jetzt asynchron über Celery, um die Performance bei Weiterleitungen zu verbessern.
    • Anstatt die Tracking-Daten direkt zu speichern, werden sie nun in einer Warteschlange über Redis verwaltet und von einem separaten Celery-Worker verarbeitet.
    • Dies sorgt für eine schnellere Weiterleitung und eine niedrigere Serverlast, insbesondere bei vielen gleichzeitigen Anfragen.
  • 🎛 Verbesserte Statistik-Ansicht mit Datatables

    • Die Statistikseite wurde überarbeitet und nutzt nun eine interaktive Tabelle mit Datatables.js.
    • Nutzer können nun Spalten ein- und ausblenden, um nur die relevanten Daten anzuzeigen.
    • Die Tabelle ist nun durchsuchbar und sortierbar, was eine bessere Analyse der Daten ermöglicht.

🐞 Bugfixes & Optimierungen

  • ✅ Korrekte Erfassung der Tracking-Daten für passwortgeschützte Links

    • Die IP-Adresse wurde zuvor nicht korrekt gespeichert – dies wurde nun behoben.
    • User-Agent-Informationen für Browser und Betriebssystem werden jetzt auch bei passwortgeschützten Links korrekt erfasst.
    • Doppelte Tracking-Einträge wurden entfernt, sodass jeder Linkaufruf nur einmal in der Datenbank erfasst wird.
  • 🔄 Verbesserte Sicherheit und Zugriffskontrolle für Statistiken

    • Nutzer können nun nur noch die Statistiken ihrer eigenen Links einsehen.
    • Unautorisierte Zugriffsversuche auf fremde Statistiken werden blockiert und protokolliert.
  • 🚀 Optimierte Fehlerbehandlung und Logging

    • Fehlerhafte API-Aufrufe oder fehlende Tracking-Daten führen nun nicht mehr zu unklaren Fehlermeldungen.
    • Das Debugging von Celery-Prozessen wurde verbessert, um Probleme mit der asynchronen Speicherung besser zu erkennen.

[0.10.0] - Februar 2025

🚀 Neue Features & Verbesserungen

  • 🔐 Passwortgeschützte Kurzlinks

    • Kurzlinks können nun mit einem Passwort geschützt werden, das beim Erstellen optional festgelegt werden kann.
    • Besucher müssen das korrekte Passwort eingeben, um zur Original-URL weitergeleitet zu werden.
    • Die Passwortvalidierung erfolgt serverseitig und speichert keine Passwörter im Klartext (verschlüsselte Speicherung).
    • Fehlgeschlagene Passwortversuche führen zu einer klaren Flash-Meldung mit einer neuen Eingabemöglichkeit.
    • Erfolgreiche Passwort-Eingaben leiten Nutzer nahtlos zur Zielseite weiter.
  • 🛠 Verbesserte Weiterleitung & Fehlerhandling

    • Die Passwortprüfung erfolgt nun vollständig serverseitig mit einer klaren Trennung zwischen Frontend und Backend.
    • Fehlerhafte oder fehlende Passworteingaben führen nicht mehr zu unklaren Fehlern, sondern zu deutlichen Flash-Nachrichten.
    • Unangemeldete Nutzer können passwortgeschützte Links aufrufen, sofern sie das richtige Passwort kennen – eine Anmeldung ist nicht erforderlich.
    • Verbesserte Fehlerbehandlung für nicht gefundene oder abgelaufene Kurzlinks.
  • 📊 Korrekte Erfassung von Tracking-Daten für passwortgeschützte Links

    • Tracking-Daten für passwortgeschützte Links werden nun vor der Weiterleitung korrekt erfasst.
    • Besucher mit einem gültigen Passwort werden jetzt genauso in den Statistiken erfasst wie reguläre Besucher.
    • Die IP-Adresse, der User-Agent, das Betriebssystem und der Browser werden nun korrekt gespeichert.
    • Die Tracking-Logik wurde überarbeitet, um sicherzustellen, dass auch für passwortgeschützte Links eine vollständige Statistik verfügbar ist.
  • 🎨 Neues Design für die Passwort-Eingabeseite

    • Die Passwort-Eingabeseite wurde komplett überarbeitet und bietet jetzt ein modernes, zentriertes Layout.
    • Eine Tabler-Illustration (fingerprint.png) verbessert die visuelle Darstellung.
    • Flash-Nachrichten werden jetzt klar und ansprechend als Bootstrap-Alerts ausgegeben.

🐞 Bugfixes & Optimierungen

  • ⚡ Beseitigung von Weiterleitungsproblemen

    • Falsche Passwörter führen nun nicht mehr zu einer Neulade-Endlosschleife.
    • Korrekte Passworteingaben sorgen jetzt für eine sofortige Weiterleitung ohne zusätzliche Flash-Nachricht.
  • 🔄 Stabilere API-Interaktionen

    • Backend-Routen für Passwortvalidierung und Weiterleitungen wurden optimiert.
    • Flash-Nachrichten erscheinen jetzt garantiert nur, wenn es einen Fehler gibt, und nicht nach erfolgreichen Weiterleitungen.
    • Tracking-Probleme bei passwortgeschützten Links behoben – Die Erfassung erfolgt jetzt korrekt, bevor eine Weiterleitung ausgeführt wird.

[0.9.0] - Februar 2025

🚀 Neue Features & Verbesserungen

  • 📊 Dashboard-Überarbeitung:
    • Das Dashboard wurde modernisiert und bietet nun eine verbesserte Übersicht über erstellte und meistgeklickte Links.
    • Statistiken sind nun klarer strukturiert und visuell optimiert.
    • Der „Neuen Link erstellen“-Button öffnet jetzt ein modales Fenster für eine schnellere Erstellung.
  • Landingpage:
    • Es wurde eine neue Landingpage für unangemeldete User hinzugefügt
  • 📋 Tabellen für Links verbessert:
    • Letzte erstellte Links und meistgeklickte Links wurden neu strukturiert und bieten jetzt eine einheitliche Darstellung.
    • Beide Tabellen enthalten nun die Spalte „Ablaufdatum“, sofern ein Link eine festgelegte Gültigkeitsdauer hat.
    • Aktionen wie Löschen, Bearbeiten, Statistiken anzeigen und QR-Code generieren sind nun direkt über die Tabellen möglich.
  • 📷 QR-Code im Modal-Fenster:
    • QR-Codes für Kurzlinks werden jetzt in einem modalen Fenster anstelle eines neuen Tabs geöffnet.
    • Ein Button in der Aktionsspalte ermöglicht das direkte Anzeigen des QR-Codes.
  • 🔄 Verbesserte Benutzerführung:
    • Nach dem Erstellen eines neuen Links wird das Dashboard automatisch aktualisiert, sodass der neue Link sofort sichtbar ist.
    • Beim Löschen eines Links wird der Benutzer nun zur vorherigen Seite zurückgeleitet, anstatt immer zur Link-Verwaltung.

🐞 Bugfixes

  • 🔗 Links mit Ablaufdatum:
    • Das Ablaufdatum wurde im Backend korrekt integriert und wird nun auch im Frontend angezeigt.
    • Fehlerhafte oder fehlende Werte für erstellte Links wurden korrigiert.
  • 🚀 Optimierung der API-Aufrufe:
    • API-Routen wurden überarbeitet, um konsistenter zu arbeiten und weniger Fehleranfälligkeit zu haben.
    • Fehlerbehandlung bei ungültigen oder fehlenden Werten verbessert.

[0.8.0] - Februar 2025

🔄 Automatische Versionierung & Changelog

  • Versionierung mit version.py eingeführt
  • Version im Footer der Web-App sichtbar und Design des Footers aktualisiert
  • Neue changelog.html Seite zeigt Änderungen direkt im Web-Interface
  • Automatisches Einlesen des CHANGELOG.md ins Frontend
  • Neue Versionen können einfach per version.py verwaltet werden

[0.7.0] - Februar 2025

🌍 Verbesserungen für E-Mail-Links

  • E-Mails enthalten nun die korrekte URL des Frontends
    • Benutzer werden auf die korrekte Domain weitergeleitet, auch wenn verschiedene Domains verwendet werden
    • Admin-Panel enthält eine Konfigurationsmöglichkeit für Standard-Domain

[0.6.0] - Februar 2025

📢 Verbesserungen für die Benutzerverwaltung

  • Admins können Benutzer freischalten/sperren
  • Admin-Benachrichtigungen per E-Mail bei neuen Registrierungen sofern der Nutzer gesperrt ist
  • Erweiterte Benutzerstatistiken für Administratoren
  • E-Mail-Versand bei Profiländerungen (optional aktivierbar)
    • Änderungen am Profil können mit einer Mail an den User bestätigt werden

[0.5.0] - Februar 2025

✉️ Asynchroner E-Mail-Versand mit Celery & Redis

  • Celery als Task-Queue für E-Mail-Versand eingeführt
  • Redis als Message Broker konfiguriert
  • Emails für Passwort-Reset, Admin-Benachrichtigungen, Benutzer-Updates werden nun asynchron verschickt
  • Performance-Verbesserung: Keine Verzögerung mehr beim Absenden von Formularen

[0.4.0] - Februar 2025

📊 Tracking & Statistiken

  • Klick-Statistiken für Kurzlinks hinzugefügt
    • Anzahl der Klicks wird in der Datenbank gespeichert
    • Geografische Analyse von Aufrufen (Land, Stadt)
    • Geräte- & Plattform-Analyse (Desktop, Mobile, OS)
    • Referer-Tracking: Welche Website hat den Link aufgerufen?

[0.3.0] - Februar 2025

🛠 Verbesserungen & Erweiterungen

  • Admin-Panel hinzugefügt
    • Verwaltung von Benutzern & URLs
    • Benutzer können gesperrt und entsperrt werden
  • Passwort vergessen / Benutzername vergessen Funktionalität
    • E-Mail-Versand für Passwort-Reset & Benutzername
    • JWT-Token mit individueller reset_secret für mehr Sicherheit
  • Passwort-Validierung nach einstellbaren Regeln (Mindestlänge, Komplexität)
  • Admins können Benutzer sperren & freigeben
  • Registrierungen können Admin-Freigabe erfordern

[0.2.0] - Februar 2025

🚀 Basis-Funktionalität verbessert

  • Erweiterte Benutzerkonten-Funktionen
    • Registrierung, Login, Logout, Passwort vergessen
    • JWT-Authentifizierung für sichere Sitzungen
  • Admin-Accounts erhalten automatisch erweiterte Rechte
  • URL-Kürzung & Weiterleitung verbessert

[0.1.0] - Februar 2025

🚀 Erste veröffentlichte Version (Beta)

  • Projekt gestartet
  • Basis-Funktionalität implementiert
  • Docker & Docker-Compose eingerichtet
  • PostgreSQL als Datenbank integriert
  • FastAPI als Backend & Flask als Frontend implementiert
  • Tabler.io als Admin-Theme für UI verwendet
  • Datenbankmodell für Benutzer und URLs erstellt
  • Einfache URL-Verkürzung entwickelt
  • Weiterleitung von Kurz-URLs auf Original-URLs