A Agentbar docs

Platform admin

PWA install & icons

Pitchbar ships as a Progressive Web App so admins can install the dashboard to their home screen and run it like a native app. The install prompt appears automatically in supported browsers (Chrome, Edge, Safari iOS 16.4+, Brave) once the page meets the install criteria โ€” usually after a few seconds on the dashboard.

Manifest endpoint

The Web App Manifest is served dynamically at /manifest.webmanifest by App\Http\Controllers\PwaManifestController so the white-label cascade (site title, favicon) flows into the install prompt โ€” operators rebranding the site never ship "Pitchbar" to home-screen labels.

start_url is /dashboard

The installed app opens to /dashboard:

  • Unauthenticated installers โ€” Fortify redirects to /login.
  • Authed admin with no workspace yet โ€” the dashboard renders an empty state.
  • Authed admin with a workspace โ€” Inertia renders the live dashboard.

Client report 2026-05-25: start_url was previously /app, which has no bare route. Installed PWAs opened to a 404 and the service worker cached the 404 shell until the next SW version bump. Fixed by repointing to /dashboard and rolling the SW VERSION constant in public/sw.js.

App icon comes from Settings โ†’ Branding โ†’ Favicon

When an operator uploads a favicon under /settings/branding, the manifest prepends it as a generic any-sized icon so the install prompt uses that brand mark. The bundled icon-192.png and icon-512.png placeholders stay behind it so installers that demand exact PNG sizes still match.

User-uploaded favicons are NOT tagged purpose=maskable โ€” they aren't safe-zone designed, so Android's adaptive-icon mask would crop the corners badly. The bundled placeholders are purpose-built for maskable use and stay tagged that way.

Bumping the service worker version

public/sw.js has a top-level VERSION constant (e.g. pitchbar-shell-v2). When you change anything about the install behaviour or shell caching, bump the suffix โ€” the activate handler deletes every cache that doesn't start with the new VERSION, so existing installs purge stale assets on next visit.

Cache strategy

  • Shell HTML (Inertia routes) โ€” network-first with a 4-second timeout, falling back to last-known cache so a flaky-mobile-data operator still sees something.
  • Vite bundles under /build/* โ€” cache-first (URLs are content-hashed; hash rolls every deploy).
  • Icons / manifest โ€” cache-first.
  • Mutation endpoints (POST/PATCH/DELETE) and /api/v1/widget/* โ€” network-only, never cached.