A Agentbar docs

Platform admin

Integration card copy

The four cards on the public /integrations landing page (Notion, Google Docs, Slack, Stripe) ship with default copy. Operators can override the name, category, tagline, and description of any card from /settings/system โ†’ Integrations โ†’ Integration card copy. The icon and accent colour stay controlled by the codebase so editing copy can't break the layout.

Where the override lives

Stored as JSON on app_settings.integration_cards. Resolved at render time by App\Support\IntegrationCardsContent::resolve() which overlays admin overrides on top of the hardcoded defaults in defaults(), keyed by card name (case-insensitive).

Per-field fallback semantics

  • Override row missing โ†’ default card rendered as-is.
  • Override row present + field non-blank โ†’ admin value wins.
  • Override field blank or whitespace โ†’ falls back to default for that field. Lets the admin "clear" an edit without deleting the whole row.
  • Submitting an empty integration_cards array via the admin form clears all overrides, resetting every card to defaults.

Adding a new card

Not exposed in the admin UI by design โ€” the card layout depends on a known icon + accent + integration kind. To add a card, edit IntegrationCardsContent::defaults() and rebuild. The admin form will then surface it as a new editable row.

Why icon + accent aren't editable

Both feed Tailwind colour tokens + lucide-react icon imports bundled by Vite. Letting the admin type an arbitrary icon name or hex code would either silently render an empty box or break the page when the build can't tree-shake the import. The trade- off is intentional: editable copy gives operators ownership of messaging without the foot-guns of layout / styling.