Files
MyClub/diagrams/frontend-overall.mmd
T
Tomas Dvorak c941313fd5 dev day #92
2025-11-14 15:53:12 +01:00

237 lines
7.2 KiB
Plaintext

%%{init: {"theme":"forest","flowchart":{"curve":"linear"},"themeCSS":".edgePath path { stroke-dasharray: 6 4; animation: dash 16s linear infinite; } @keyframes dash { to { stroke-dashoffset: -1000; } }" }}%%
flowchart LR
%% Overall Frontend Architecture
classDef cluster fill:#eef7ff,stroke:#2b6cb0,color:#0b3a60;
classDef svc fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e;
classDef page fill:#fff7ed,stroke:#f59e0b,color:#7c2d12;
classDef comp fill:#ecfdf5,stroke:#16a34a,color:#064e3b;
classDef ctx fill:#f3e8ff,stroke:#6d28d9,color:#3b0764;
classDef hook fill:#fef9c3,stroke:#ca8a04,color:#7c2d12;
classDef infra fill:#e3f2fd,stroke:#1e88e5,color:#0c4a6e;
subgraph Client
Browser((Browser)):::infra
end
Browser --> index_tsx[index.tsx]:::infra
index_tsx --> ErrorBoundary
index_tsx --> AppLazy[App.lazy.tsx]
index_tsx --> ServiceWorker[serviceWorkerRegistration.ts]
index_tsx --> ErrorReporterSvc[services/errorReporter.ts]
subgraph Providers
Chakra[ChakraProvider]:::infra --> RQ[QueryClientProvider]:::infra --> Router[BrowserRouter]:::infra --> AuthProv[AuthProvider]:::ctx --> ClubThemeProv[ClubThemeProvider]:::ctx --> Helmet[HelmetProvider]:::infra --> Suspense:::infra
SEO[DefaultSEO]:::comp
CookieBanner:::comp
end
AppLazy --> Chakra
AppLazy --> SEO
AppLazy --> CookieBanner
Suspense --> Routes
subgraph Routing
Routes:::infra
ProtectedRoute:::comp
end
Routes --> PublicRoutes
Routes --> AdminRoutes
subgraph PublicRoutes[Public Pages]
HomeRoute --> HomePage
HomeRoute --> PremiumHomePage
BlogRoute --> BlogPage
BlogRoute --> PremiumBlogPage
PublicOther[Other Public Routes]
end
subgraph AdminRoutes[Admin Pages]
AdminDashboardPage
AdminContent[Other Admin Pages]
end
Router --> Routes
AuthProv --> ProtectedRoute
%% Pages and components
subgraph Pages[Key Pages]
HomePage:::page
BlogPage:::page
ArticleDetailPage:::page
ActivityDetailPage:::page
MatchDetailPage:::page
ClubPage:::page
AboutPage:::page
CalendarPage:::page
ActivitiesCalendarPage:::page
TablesPage:::page
MatchesPage:::page
PlayersPage:::page
PlayerDetailPage:::page
SponsorsPage:::page
ContactPage:::page
GalleryPage:::page
AlbumDetailPage:::page
VideosPage:::page
SearchPage:::page
ClothingPage:::page
PollsPage:::page
OverlayScoreboardPage:::page
OverlaySponsorsPage:::page
NotFoundPage:::page
ForbiddenPage:::page
SetupPage:::page
StylePreviewPage:::page
AuthPage:::page
RegisterPage:::page
ForgotPasswordPage:::page
ResetPasswordPage:::page
NewsletterUnsubscribePage:::page
NewsletterPreferencesPage:::page
SemiAdminPage:::page
ShortRedirectPage:::page
PremiumHomePage:::page
PremiumBlogPage:::page
end
PublicRoutes --> Pages
AdminRoutes --> AdminContent
subgraph AdminPages[Admin Management]
AdminDashboardPage:::page
AdminDocsPage:::page
AboutAdminPage:::page
AdminVideosPage:::page
GalleryAdminPage:::page
AdminMerchPage:::page
SponsorsAdminPage:::page
MatchesAdminPage:::page
PlayersAdminPage:::page
TeamsAdminPage:::page
UsersAdminPage:::page
BannersAdminPage:::page
MessagesAdminPage:::page
SettingsAdminPage:::page
NewsletterAdminPage:::page
PollsAdminPage:::page
CompetitionAliasesAdminPage:::page
PrefetchAdminPage:::page
AdminResetPasswordPage:::page
ScoreboardAdminPage:::page
MobileScoreboardControlPage:::page
AnalyticsAdminPage:::page
ErrorsAdminPage:::page
FilesAdminPage:::page
ContactsAdminPage:::page
NavigationAdminPage:::page
CommentsAdminPage:::page
ShortlinksAdminPage:::page
EngagementAdminPage:::page
SweepstakesAdminPage:::page
SweepstakeVisualPage:::page
end
AdminContent --> AdminPages
%% Components (subset)
subgraph Components
MainLayout[components/layout/MainLayout]:::comp
ProtectedRoute:::comp
CookieBanner:::comp
DefaultSEO[components/seo/DefaultSEO]:::comp
TeamLogo[components/common/TeamLogo]:::comp
ClubHeroTopbar[components/home/ClubHeroTopbar]:::comp
BannerDisplay[components/banners/BannerDisplay]:::comp
BlogCardsScroller[components/home/BlogCardsScroller]:::comp
BlogSwiper[components/home/BlogSwiper]:::comp
VideosSection[components/home/VideosSection]:::comp
MerchSection[components/home/MerchSection]:::comp
PollsWidget[components/home/PollsWidget]:::comp
GallerySection[components/home/GallerySection]:::comp
NewsletterSubscribe[components/newsletter/NewsletterSubscribe]:::comp
MyUIbrixEditor[components/editor/MyUIbrixEditor]:::comp
MyUIbrixErrorBoundary[components/editor/MyUIbrixErrorBoundary]:::comp
ClubModal[components/home/ClubModal]:::comp
MatchModal[components/home/MatchModal]:::comp
NewsList[components/pack/NewsList]:::comp
StandingsCard[components/pack/StandingsCard]:::comp
NextMatch[components/pack/NextMatch]:::comp
MatchesSlider[components/pack/MatchesSlider]:::comp
ActivitiesList[components/pack/ActivitiesList]:::comp
SweepstakeWidget[components/sweepstakes/SweepstakeWidget]:::comp
end
HomePage --> MainLayout
HomePage --> ClubHeroTopbar
HomePage --> BannerDisplay
HomePage --> BlogCardsScroller
HomePage --> BlogSwiper
HomePage --> VideosSection
HomePage --> MerchSection
HomePage --> PollsWidget
HomePage --> GallerySection
HomePage --> NewsletterSubscribe
HomePage --> NewsList
HomePage --> StandingsCard
HomePage --> NextMatch
HomePage --> MatchesSlider
HomePage --> ActivitiesList
HomePage --> SweepstakeWidget
HomePage --> ClubModal
HomePage --> MatchModal
TeamLogo -. logos .- HomePage
%% Contexts & Hooks
subgraph Contexts
AuthContext[contexts/AuthContext]:::ctx
ClubThemeContext[contexts/ClubThemeContext]:::ctx
end
subgraph Hooks
usePublicSettings[hooks/usePublicSettings]:::hook
usePageElementConfig[hooks/usePageElementConfig]:::hook
useUmami[hooks/useUmami]:::hook
useFontLoader[hooks/useFontLoader]:::hook
end
AuthProv --> AuthContext
ClubThemeProv --> ClubThemeContext
Pages --> AuthContext
Pages --> ClubThemeContext
Pages --> Hooks
%% Services & Data
subgraph Services
settingsSvc[services/settings.ts]:::svc
pageElementsSvc[services/pageElements.ts]:::svc
articlesSvc[services/articles.ts]:::svc
playersSvc[services/players.ts]:::svc
sponsorsSvc[services/sponsors.ts]:::svc
bannersSvc[services/banners.ts]:::svc
compAliasesSvc[services/competitionAliases.ts]:::svc
eventsSvc[services/eventService.ts]:::svc
facrApi[services/facr/facrApi.ts]:::svc
setupSvc[services/setup.ts]:::svc
engagementSvc[services/engagement.ts]:::svc
actionLogSvc[services/actionLog.ts]:::svc
errorReporter[services/errorReporter.ts]:::svc
apiCore[services/api.ts - API_URL]:::svc
end
Components --> Services
Pages --> Services
Hooks --> Services
subgraph Backends
Backend[(fotbal-club backend API)]:::infra
ErrorIngest[(errors.tdvorak.dev)]:::infra
FACR[(FACR APIs)]:::infra
end
Services --> Backend
errorReporter --> ErrorIngest
facrApi --> FACR
apiCore --> Backend
ServiceWorker -.->|PWA| Browser