Center-Website: Webpack Bundle Analysis
The public Center Website (apps/center-website, among others, base template under /{centerSlug}/…) uses the same Next.js Webpack Bundle Analyzer integration as the dashboard: When building with ANALYZE=true, interactive Treemap Reports will open after completion (Client and Server Bundles).
Prerequisites
- Monorepo root with installed dependencies (
pnpm install) - As with a normal Production build: sufficient RAM (default
NODE_OPTIONS=--max-old-space-size=4096in the script)
Command
From the Repository Root:
pnpm --filter @cockpitos/center-website run build:analyze
Dashboard (Webpack report after next build, local):
pnpm --filter @mall-os/dashboard run build:analyze
(ANALYZE=true in apps/dashboard/package.json; active configuration: next.config.js with @next/bundle-analyzer.)
The script first runs prisma generate, like build, and then builds the app. After next build, the analyzer opens the HTML reports (locally).
Reports
After the build, the HTML files are located in apps/center-website/.next/analyze/ (client.html, nodejs.html, edge.html). Open them in the browser and view the largest tiles in the client treemap.
Insights (Analysis Status)
- Many
/[slug]/…routes report First Load JS ~1.4–1.5 MB — substantial client bundles are closely related to the shared client graph. The homepage/{slug}now only loads a small route chunk due to manifest lazy loading (build output "Size"); the large First Load JS value still comes from the shared Vendor/Shared graph. template-registry(Server) loads manifests per template through dynamicimport()(load-template-manifest+ Reactcache). For the client:template-client-registryfor cookie/overlay/chat loaders without the server registry.import * as lucide-reactpulls all icons into the bundle. This is unnecessary for homepage tiles: only definitely defined icon names are selectable (tile-form-dialog.tsx) in the dashboard.components/ui/dynamic-icon.tsxstill employs the full Lucide library (Services/Shops/HBB — free icon names from the DB). It should only be refactored there if the number of icons can be limited.
Implementation: Homepage Tiles without Full-Lucide
Instead of namespace import, resolveHomepageTileLucideIcon from apps/center-website/lib/tile-lucide-icons.ts is used (also in lib/cms/cms-mapper-tiles.ts and in the Style Guide). New tile icons should be added first in the dashboard select, then updated in tile-lucide-icons.ts.
Monorepo: outputFileTracingRoot
In apps/center-website/next.config.js, outputFileTracingRoot is set to the monorepo root — avoiding incorrect lockfile/trace warnings and suitable for deployments with output: 'standalone' (e.g., Render).
Base Background (AnimatedBackground)
The component apps/center-website/components/ui/animated-background.tsx is attached to PageLayout and many base pages. It uses soft radial and linear gradients with CSS-only animations (transform / opacity in globals.css, classes animate-ambient-*) — without extensive blur filters, without mouse tracking, and without rotating cone gradients. On devices with limited resources or prefers-reduced-motion, only the static gradient remains (readLeanDeviceVisuals in lib/client/read-lean-device-visuals.ts).
Distinction
- Bundle Analyzer: displays module sizes and dependencies in the Webpack output — ideal for identifying heavy client chunks (e.g., chat, 3D, charts) and possibly splitting them with
next/dynamic. - Lighthouse: measures LCP, TBT, network etc. in the running or exported page context — supplementary, not a replacement.
See also: Public Center Website API — Contract (data flow of the public pages).
Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/developer-guide/center-website-bundle-analyse