%%{init: { 'theme': 'forest', 'flowchart': { 'curve': 'linear' }, 'themeCSS': '.edgePath path { stroke-dasharray: 6 4; animation: dash 20s linear infinite; } @keyframes dash { to { stroke-dashoffset: -1000; } }' }}%% flowchart LR classDef job fill:#ecfdf5,stroke:#16a34a,color:#064e3b; classDef svc fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e; classDef ext fill:#faf5ff,stroke:#a855f7,color:#6b21a8; classDef api fill:#eef2ff,stroke:#6366f1,color:#312e81; subgraph jobs["Background Jobs & Services"] direction TB j_prefetch["Prefetcher (StartPrefetcher)\nFetches public endpoints periodically"]:::job j_news_sched["NewsletterScheduler"]:::job j_news_auto["NewsletterAutomation\nWeekly, match alerts, blog notifications, results"]:::job j_sweep["SweepstakesScheduler\nFinalize & pick winners"]:::job j_err_auto["ErrorReview Auto-Register\nRegisters backend in monitors"]:::job j_filetrk["FileTracker\nScan/uploads tracking"]:::svc j_logo["LogoCache"]:::svc j_cache["CacheService"]:::svc j_imgopt["ImageOptimizer"]:::svc j_umami["UmamiService"]:::svc end api_public["/api/v1 (public)"]:::api smtp["SMTP Provider"]:::ext err_recv["Error Receiver: errors.tdvorak.dev or local :8083"]:::ext facr["FACR Scraper/API"]:::ext umami["Umami Server"]:::ext j_prefetch -.-> api_public j_news_sched --> j_news_auto j_news_auto --> smtp j_sweep --> smtp j_err_auto --> err_recv j_umami <---> umami j_filetrk --> j_cache j_imgopt --> j_cache j_logo --> j_cache