Projekt

Newsletter systém

Webová aplikace pro tvorbu a rozesílání interních newsletterů — se sledováním otevření, správou odběratelů synchronizovaných z HR systému a jednoduchým odhlášením přes UUID token.

Django 6 Python HTMX MariaDB CKEditor 5 Bootstrap 5

O projektu

Systém vznikl jako interní nástroj pro pravidelné newslettery v organizaci. Nahrazuje ruční rozesílání e-mailů a poskytuje redaktorům jednoduché rozhraní pro skládání obsahu z jednotlivých článků, správu odběratelů a sledování úspěšnosti doručení.

Důraz byl kladen na jednoduchost ovládání — redaktor nepotřebuje technické znalosti. Obsah se skládá z řaditelných bloků, odesílání probíhá na vybrané distribuční skupiny a po odeslání je newsletter automaticky uzamčen proti dalším úpravám.

Životní cyklus newsletteru

Koncept Testovací odeslání Odesláno (uzamčeno)

Klíčové funkce

Článkový obsah

Newsletter se skládá z řaditelných článků editovaných přes CKEditor 5. Každý článek má nadpis a tělo s podporou obrázků a formátování.

Sledování otevření

Do každého odeslaného e-mailu je vložen sledovací pixel (1×1 GIF). Systém zaznamenává otevření per-příjemce včetně opakovaných a zobrazuje míru otevření v přehledu.

Odhlášení přes UUID token

Každý příjemce má v e-mailu odkaz s unikátním UUID tokenem. Kliknutím se sám odhlásí bez nutnosti kontaktovat správce a bez přihlášení do systému.

Synchronizace odběratelů z HR

Plánovaná úloha pravidelně synchronizuje seznam odběratelů z externí personální databáze. Zaměstnanci, kteří odešli, jsou automaticky deaktivováni.

Distribuční skupiny

Odběratelé jsou organizováni do distribučních skupin. Každý newsletter lze odeslat vybrané skupině nebo kombinaci skupin.

Statistiky doručení

Přehled odeslaných e-mailů, otevření a míry otevření pro každý newsletter. Detail zobrazuje stav pro jednotlivé příjemce. Souhrnná stránka agreguje statistiky napříč všemi newslettery.

Správa odhlášených

Přehled odběratelů, kteří se odhlásili přes token. Správce může jednotlivce ručně reaktivovat, pokud o to požádají.

Technický stack
  • Django 6.0 / Python 3.13
  • MariaDB (konfigurace pro dvě databáze)
  • HTMX — dynamické aktualizace
  • Bootstrap 5
  • CKEditor 5 — rich text + obrázky
  • EmailMultiAlternatives — HTML e-mail
  • python-decouple — konfigurace
  • Gunicorn + Nginx + systemd
Zajímavosti implementace
  • Relativní URL v obsahu jsou před odesláním automaticky převedeny na absolutní, aby obrázky fungovaly v e-mailových klientech
  • Dva UUID tokeny pro každého příjemce — jeden pro tracking otevření, druhý pro odhlášení
  • Po odeslání je newsletter přepnut do stavu odesláno a obsah je uzamčen proti úpravám