D Diagent docs

Operate

White-label audit

The white-label audit is the checklist we run before a release to confirm that a buyer renaming the install to Acme Assist sees Acme Assist on every customer-facing surface โ€” never a stray "Pitchbar" sneaking through. This page is the audit template; it lives in docs so any future engineer can re-run it and update the same surface inventory in place.

Test method

  1. Set site_title = "Acme Assist" in /settings/branding, swap header logo + favicon to dummy art, set the footer brand label to "Acme", and (on a paid plan) flip Remove "Powered by" on.
  2. Walk the surfaces below, signed out for the marketing / widget rows and signed in (as a customer + as a super-admin) for the dashboard / settings rows.
  3. Grep the codebase for hard-coded literals on the way in:
    grep -rn "Pitchbar\|pitchbar\.ai\|@pitchbar\.com" \
      --include="*.tsx" --include="*.ts" --include="*.blade.php" --include="*.php" \
      --exclude-dir=tests --exclude-dir=vendor --exclude-dir=node_modules \
      resources app routes
    Filter the result by surface (anything in resources/views/documentation/ is allowed to name the source product; user-facing surfaces are not).

Surface inventory (last run: 2026-05-09, v1.1.0)

Auth (Fortify)

SurfaceStatusNotes
Login / register / forgot-password card โœ… pass auth-simple-layout.tsx reads branding.site_title; falls back to 'Pitchbar' only when the install has no brand set. Title bar, brand mark, and copy honour the rebrand.
Email-verification + password-reset emails โœ… pass Mail templates use config('branding.site_title') via AppBranding::siteTitle() โ€” Fortify's stock Laravel mailable is overridden in AppServiceProvider to use the white-labelled view.

Dashboard shell

SurfaceStatusNotes
Sidebar brand mark + tooltip โœ… pass useBranding().site_title drives both.
Sidebar "Set up X in a few steps" โœ… fixed in v1.1.0 Was hard-coded as "Set up Pitchbar". Now reads branding.site_title.
Breadcrumbs / page titles โœ… pass Driven by config('app.name') + branding.site_title shared via Inertia.
Workspace dropdown / impersonation banner โœ… pass No brand strings โ€” just user / workspace identifiers.

Marketing site

SurfaceStatusNotes
Home (/) โ€” hero / chat preview / footer โœ… pass Drives every brand-facing string from landingContent + useBranding(). The shipped defaults DO say "Pitchbar" โ€” but those are JSON content the admin edits via Settings โ†’ Marketing.
Pricing / How it works / Integrations / Privacy / Terms โœ… pass All Inertia-rendered. marketing-shell.tsx applies the rebrand. The Blade resources/views/marketing/_layout.blade.php file is dead code (no longer routed).
Public /changelog โœ… pass ChangelogController::show shares the branded site_title; the entry body is admin-authored so "Pitchbar" only appears if the admin types it.
Marketing footer "ยฉ Pitchbar..." โœ… pass Driven by landingContent.footer.copyright; editable from Settings โ†’ Marketing.

Widget (visitor surface)

SurfaceStatusNotes
"Powered by ..." footer link โœ… pass Server-resolved branding.label from AppBranding::shared(). Hidden entirely on paid plans that strip Pitchbar attribution.
Demo pill ("Live demo ยท") โœ… fixed in v1.1.0 Was "Live demo ยท ask anything about Pitchbar". Now "Live demo ยท ask the sandbox agent anything" โ€” generic so any white-label install can keep the same widget bundle.
Launcher label / chat header / agent name โœ… pass Per-agent theme.launcher_label + persona.name. Buyer-controlled.
window.Pitchbar.mount() global โšช accepted Protocol concern โ€” embed snippets in the wild already key on this name. Renaming would break every existing buyer's installation.

Outbound emails

SurfaceStatusNotes
Captured-lead notification (NewLeadCaptured) โœ… pass Subject + body use AppBranding::siteTitle() + the white-labelled lead-capture template. Test with the new "Send test lead email" button on Settings โ†’ System โ†’ Mail.
Stripe receipt (cashier) โœ… pass White-label cascade applies โ€” cashier.invoices.from_address + from_name resolved from AppSetting.
PayPal / Razorpay receipts โœ… pass Notification templates pull from AppBranding::siteTitle(). Round-tripped on a renamed install.
Paddle / Iyzico / PayU receipts โธ deferred Gateway integrations not yet shipped (cards #12, #13, #14). Re-run this audit row once the gateway code lands so the email templates inherit the same white-label cascade.

Documentation pages

SurfaceStatusNotes
/documentation/* Blade pages โšช accepted Documentation describes the source codebase by name. Buyers running a white-label install can edit the Blade files directly to substitute their own brand โ€” we don't auto-rebrand docs because the project name ("Pitchbar") is part of the source identity that the buyer is licensing.

Summary

  • 2 leaks fixed in v1.1.0 โ€” sidebar onboarding text + widget DEMO pill.
  • 0 leaks open on customer-facing surfaces today.
  • 3 deferred rows โ€” Paddle / Iyzico / PayU email templates, blocked on the gateways themselves landing.
  • 1 accepted by-design โ€” window.Pitchbar.mount() global, kept as a protocol identifier. Documented under Embed the widget.

Re-run this audit on every release that touches an outbound email, a marketing surface, the widget bundle, or a Fortify auth flow. The grep one-liner at the top makes it a 5-minute job.