📜 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 Fehler →
flash
-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: Beim Senden von Daten wurden zuvor
-
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.
- Alle Routen im Frontend wurden in den Ordner
-
🖼️ 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.
- Celery-Worker hat jetzt Zugriff auf das
-
⚡ Optimierte Medienbereitstellung
- Frontend stellt
/media/
nun direkt bereit, Backend ist nicht mehr involviert. - Vorteil: Kein Overhead durch API-Calls → Medien werden schneller geladen.
- Frontend stellt
-
🖼️ 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.
- Falls das gespeicherte Profilbild nicht existiert, wird nun automatisch ein Standardbild (
[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.
- Alle Zeitstempel werden jetzt einheitlich in UTC gespeichert und korrekt in
🐞 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 allecreated_at
- undtimestamp
-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
- Sonne (
🐛 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.
- UTM-Parameter (
🛠 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