UiSlots

The connector's contributions to the core's UI slots — the eighteen slots and what each renders, the SlotContribution and SlotContext objects, the placeholder rule, and what a contribution may read.

Subscriby\Connector\Contracts\Ports\UiSlots. Required of every connector, even one that fills nothing.

Core pages that need platform-specific UI render typed slots; a connector fills the ones it wants. Returning an empty list is how a connector says the core's generic rendering is enough, and it is a perfectly good connector. Every slot has a declarative or REST-visible equivalent, so the creator apps lose nothing when a connector contributes only Blade.

The method

public function slots(): array; // list<SlotContribution>

One SlotContribution per slot the connector fills, at most one per slot:

new SlotContribution(
    slot: ConnectorSlot::Install,
    view: 'connector-example::slots.install',        // a Blade view in your namespace…
    component: null,                                  // …or a Livewire component you registered, never both
    placeholder: 'connector-example::slots.install-placeholder',
);

The core renders a slot with <x-connector-slot :slot="ConnectorSlot::Install" :connector="$key" :context="[…]" /> for the connector in scope; a connector that fills nothing renders nothing, and the page never knows what a connector shows there, only that the space exists. Your view receives the context array as its data; a component contribution is mounted with it as parameters, under a key made of the slot and the connector. When the page is lazy the core includes your placeholder view first, so skeleton parity holds for connector UI too.

What a contribution receives

The context the page passes: SDK refs and plain values the slot is about, never a model. Each slot's page section below names them. A contribution reads only its context and the connector's own services and repositories; it never queries the core's tables or imports the application's classes, and every string it shows comes from the package's lang/*.json.

The slots

The catalogue names every place a connector may contribute. Fourteen of them are rendered by a core page today; the rest are declared so a connector can fill them now and see them appear as the core pages grow into them. The kit accepts a contribution for any of the twenty-one.

SlotWhere it rendersRendered todayContext
installBeside the install form in the Connect dialog (a walkthrough video).
settingsUnder the connection and settings fields of each installation on the Configuration tab.installation (InstallationRef)
resource_badgeBeside a gated resource's connector and kind in the resources list.resource (ResourceRef), space (?SpaceRef)
resource_link_instructionsUnder "Link a resource", after the platform-side request is sent.the connector being linked, the purpose
resource_swapInside the Disaster Recovery resource replacement step.the old and new SpaceRefs
resource_health_detailThe detail panel of a resource's health verdict.SpaceRef, the verdict
member_identity_badgeBeside a member's identity on this connector.IdentityRef
grant_actionBeside each place in a subscription's detail, next to its Joined / Not Joined badge.resource (ResourceRef), space (?SpaceRef), joined (bool)
creator_login_methodA sign-in button on the creator's sign-in and sign-up pages, one per available connector that fills it.— (read your own platform installation)
portal_grant_actionThe button a member taps to open one grant on the portal's membership page.title, url (the grant's link, when it has one), resourceId
payment_setupThe setup screen of a native payment method in the payment-method editor.the provider key, the project
checkout_methodThe checkout option of a native payment method on the portal.the provider key, the plan
access_code_redemption_hintUnder "Where members redeem a code" in the access-code generator, one per live installation of the project.installation (InstallationRef)
broadcast_hintsUnder the editor in the broadcast composer, one per live installation of the project.installation (InstallationRef)
support_relay_optionsUnder the relay mode picker in the support settings, explaining each mode.mode, linked, handle
recovery_actionsThe "what you can do now" card on the Disaster Recovery page.the installation, the incident
recovery_preventionThe connector's section of the Prevention page.the installation, the coverage
recovery_stepsThe connector's recovery step components (relink an account, replace a place).the installation, the operation

portal_grant_action has a fallback: when a connector fills nothing the core renders a neutral link button from the grant's URL, so a bearer_link connector without a slot still gives the member something to tap.

Livewire components

A contribution may name a Livewire component instead of a view when the slot has to react (a relink handshake that polls, a picker). Register the component in your service provider under your own namespace, give it a @placeholder, and name it in component. The component follows the same reading rule as a view: its context and your services only.

How Telegram does it

The install slot shows the walkthrough video beside the form the core renders from connector.json; resource_link_instructions adds the "add the bot as an administrator" shortcut under the core's request button; portal_grant_action renders the "Join …" button a member taps to open the invite link a grant carries; payment_setup and checkout_method are the Stars explainer and its checkout option; support_relay_options explains the DM and the forum-group modes; creator_login_method is the "Continue with Telegram" widget button on the creator's sign-in and sign-up pages, which hands the widget's answer to the package's own callback route; settings says the bot's name, description, picture and commands live in BotFather and links to the bot; broadcast_hints names the formatting Telegram keeps and the 4,096-character limit; access_code_redemption_hint says a member redeems a code by sending it to the bot; the three recovery_* slots are the relink and replacement steps.

What the kit checks

slots.well_formed: every entry is a SlotContribution, no slot is filled twice, and every contribution ships a non-empty placeholder. Subscriby's own suite adds that every string a slot shows has a translation in each of the ten locales, and review adds that the placeholder mirrors the loaded layout.

A slot is not a page

A contribution decorates a core page; it never carries a flow of its own that the REST API cannot reach. A connector that needs a screen of its own (a wizard the platform imposes) drives it from InstallationDraft::$continueUrl or its own routes/web.php, and keeps the slot to a button that opens it.

How is this guide?

On this page

Subscriby is a product designed by you — for you.

No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request