MDX component showcase

A review surface for the Plandalf docs components that mirror the Mintlify-style documentation primitives.

This page is a visual QA surface for the docs component system. It shows the primitives that authors can use when writing implementation guides, API reference pages, and SDK walkthroughs.

Component goal

Components should make the implementation path easier to scan without turning docs into marketing copy. Use cards for choices, steps for sequence, lists and tables for compact structure, fields for API shape, and examples for request or response code.

Page notices

Component catalog

Use this catalog to jump to the visual QA section for the component family you are checking.

Structure content

Draw attention

Showcase AI prompts

Show and hide content

Document API shape

Link to other pages

Visual context

Callout aliases

Note

Use named callout components when porting Mintlify-style MDX directly.

Tip

Use tips for helpful implementation advice that should stand out but not interrupt the page.

Warning

Use warnings for constraints that can break an integration if ignored.

Customized alias

Named callout aliases forward Mintlify-style customization props instead of only supporting title and icon.

Check

Use checks for completion states, verified setup, or recommended defaults.

Custom callout

Generic callouts support custom icons, icon types for MDX compatibility, and color tints.

Cards

Horizontal card

Use horizontal cards for compact links inside dense implementation guides.

Open this page

Typed warning card

Typed cards use the same visual language as callouts when the whole container needs emphasis.

The Numi offer editor screen.

Image card

Image cards can frame screenshots or product surfaces without nesting a card inside another card.

See Offers

Tiles

The Numi offer editor preview.
Offer setup Create the buying surface.
Coupon expiration settings preview.
Promo setup Attach a deadline to the sale.
Developer API docs preview.
Event setup React when checkout changes.
The Numi checkout elements palette preview.
Image prop tile Use the `img` prop when a preview tile only needs one visual.

Compatibility aliases

Images and embeds

The Numi offer editor with checkout and automation controls.
Embedded docs pages stay contained when they are wrapped in Frame.

Lists and tables

  1. Create the offer.
  2. Add the buying action.
  3. Watch the checkout event.
    • Preserve the checkout ID.
    • Send the customer to the right next step.
  4. Route the backend handoff.
  • SDK installed
  • Test offer opened
  • Live payment processor connected
SurfaceOwnerAlignment
Buy buttonFrontendStart
Checkout sessionPlandalfCenter
Fulfillment eventBackendRight

Installation

npm install @plandalf/browser

Use plain column content when the page needs prose, code, or lists instead of linked cards.

Usage

window.Plandalf.openOffer({
  offerId: "offer_123",
  mode: "modal",
});

Columns can hold nested MDX without adding another card surface.

Steps

  1. Create the test offer

    Start with the smallest buying surface that can open in preview.

    Add one Offer, one product, and one price before adding variants or upsells.

  2. Install the browser SDK

    Load the SDK where the sales page owns the click.

    Use the script tag or package install path that matches the host page.

  3. Open checkout from one action

    Bind the button to the offer before adding extra page logic.

    Keep the first interaction visible and easy to test.

  4. Handle the checkout result

    Listen for completion before adding automation branches.

    Redirect, unlock access, record analytics, or call your backend with the completed checkout ID.

  5. Connect the next document

    End with the next implementation page, not a dead end.

    Link to events, webhooks, or going live depending on what the reader should do next.

  1. Use card steps when each step needs more surface area or a visible state icon.

  2. Use stepNumber only when ported MDX continues an existing procedure.

  3. Imported steps can preserve their heading level without forcing the whole sequence to change.

  1. Compact step

    Use this in dense reference pages.

    Compact steps preserve the numbered sequence while taking less vertical space.

  2. Inline SVG step

    Inline SVG icons work in numbered instructions too.

    Use this when a docs page is ported from Mintlify with custom icon markup.

Code blocks

window.Plandalf.openOffer({
  offerId: "offer_123",
  mode: "modal",
});
npm install @plandalf/js @plandalf/react && npx plandalf init --offer offer_123 --mode modal --redirect /thanks --events checkout.started,checkout.completed,checkout.dismissed
type CheckoutResult = {
  status: "completed" | "dismissed" | "failed";
  checkoutId?: string;
  offerId: string;
};

export function handleCheckout(result: CheckoutResult) {
  if (result.status === "completed") {
    window.location.href = `/thanks?checkout=${result.checkoutId}`;
  }
}
window.Plandalf.on("checkout.completed", (event) => {
  console.log(event.checkoutId); // [!code --]
  analytics.track("Checkout completed", event); // [!code ++]
  window.location.href = "/thanks"; // [!code ++]
});
  type CheckoutMode = "modal" | "slideout" | "inline";

export function openOffer(offerId: string, mode: CheckoutMode = "modal") {
return window.Plandalf.openOffer({
  offerId,
  mode,
});
}
  npx plandalf init --offer offer_123 --mode modal --redirect /thanks --events checkout.started,checkout.completed,checkout.dismissed

Install options

<script src="https://cdn.plandalf.com/sdk.js" defer></script>
import { PlandalfProvider } from "@plandalf/react";

export function App({ children }) {
  return <PlandalfProvider>{children}</PlandalfProvider>;
}

Dropdown code group

<button data-buy>Buy now</button>
window.Plandalf.openOffer({
  offerId: "offer_123",
  mode: "modal"
});
window.Plandalf.on("checkout.completed", (event) => {
  console.log(event.checkoutId);
});

What the checkout snippet does

offerId: "offer_123"
Selects the Plandalf Offer that owns the products, prices, checkout content, and follow-up automation.
mode: "modal"
Opens the buying surface over the current page instead of sending the customer away immediately.

Choose an implementation style

HTML

Use this for Plandalf-specific guides that need short generated code samples from structured data.

Use this on static pages and CMS templates.

<button data-buy>Buy now</button>

Single example

Example
{
  "status": "completed",
  "checkoutId": "checkout_123"
}

Tabbed example

Example
const result = await window.Plandalf.present("founder-plan");
await plandalf.checkout.sessions.create({
  offerId: "founder-plan",
});

Use plain HTML when the page is static, CMS-owned, or built in a no-code tool.

Use React when the buying action depends on logged-in state, app routing, or component-level events.

Use image icons when a tab represents a platform, framework, or payment provider.

Selecting this tab also selects matching JavaScript tabs and code groups on the page.

Matching titles stay synchronized for language and framework choices.

This tab group is independent because sync is disabled.

Use this when matching labels mean different things in two nearby panels.

API fields

SDK API surface

Use API surface summaries for Plandalf-specific SDK pages that need a compact method map.

Implementation path

Use visual flows sparingly when a page needs to show how Plandalf primitives connect.

pathofferIdstringrequiredplaceholder: offer_123

The offer identifier from the Plandalf dashboard or API.

querymode"modal" | "slideout" | "inline"default: modal

Controls how checkout opens on the page.

queryincludestring[]placeholder: line_items,invoices

Optional response expansions for API-style endpoints.

querypreviewbooleandefault: false

Boolean defaults render cleanly instead of relying on string-only metadata.

headerIdempotency-Keystringdeprecated

Optional request header for retry-safe API calls.

bodycustomerobjectrequired

Customer context passed into checkout when your app already knows the buyer.

bodycustomer.emailstringrequiredplaceholder: buyer@example.com

Email address used for receipts, buyer matching, and follow-up automation.

bodycustomer.external_idstringplaceholder: user_123

Stable identifier from your app.

Checkout request fields

Group related `ParamField` entries when a page needs a Mintlify-style API field section.

Fields
bodyoffer_idstringrequiredplaceholder: offer_123

The offer opened by the checkout session.

bodysuccess_urlstringplaceholder: https://example.com/thanks

The page Plandalf can send the customer to after checkout completes.

Quiet field list

Use list mode when fields should read like native Mintlify rows instead of a framed API panel.

querycustomer_idstringplaceholder: cus_123

Optional buyer identifier from your app.

queryexpandstring[]default: []

Additional objects to include in the response.

datacheckoutIdstringrequired

The completed checkout session identifier returned after the customer finishes checkout.

status"open" | "completed" | "expired"default: openenum

The current checkout session state.

attempt_countnumberdefault: 0

Numeric defaults keep their API shape in the field metadata.

line_itemsarray

Returned when the response includes expanded invoice or cart data.

customerCustomer Object

Buyer details returned when checkout is attached to a known customer.

full_namestring

The customer’s display name when it is available.

emailstringrequired

Email address used for receipts and buyer matching.

dataofferobjectrequired

The offer snapshot attached to the checkout session.

offer.idstringrequired

Stable offer identifier.

offer.currencystringdefault: usdISO 4217

Currency used for the displayed checkout price.

offer.metadataobjectdefault: {"source":"docs-showcase"}

Custom metadata attached to the offer snapshot.

Checkout response fields

Use `Responses` or the `Response` alias when importing Mintlify-style MDX that groups return values.

Response fields
idstringrequired

Stable checkout session identifier.

status"open" | "completed" | "expired"required

Current state of the checkout session.

Quiet response list

Response groups can also render as a low-chrome list.

livemodebooleandefault: false

Whether the checkout session was created against a live payment connection.

created_atstringISO 8601

Timestamp for the session creation event.

Compatibility response alias

Response fields
object"checkout.session"

The object type returned by this response.

Request and response

Request / response

Create checkout session

Request
curl https://api.plandalf.com/v1/checkout/sessions \
  -H "Authorization: Bearer $PLANDALF_API_KEY" \
  -d offer_id=offer_123
await fetch("https://api.plandalf.com/v1/checkout/sessions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.PLANDALF_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ offer_id: "offer_123" })
});

Checkout session response

Response
{
  "id": "checkout_123",
  "status": "open",
  "offer_id": "offer_123"
}
{
  "error": {
    "code": "invalid_offer",
    "message": "Offer could not be found."
  }
}

Prompt

Agent implementation prompt

Implement a Plandalf buy button that opens one test offer, listens for checkout completion, and sends the completed checkout ID to my backend.

Generate a complete implementation plan for adding Plandalf checkout to an existing product page.

You are helping me add Plandalf to an existing site.

  • Start with one test Offer and one buy button.
  • Use the browser SDK before adding backend webhooks.
  • Explain the files you would change and include code samples.
  • Link terms like Offer, Timer, event, and webhook back to the relevant docs page.

Accordion alias

Yes. Accordions maps to AccordionGroup for imported Mintlify-style MDX.

Supporting details

Use expandable sections for rare constraints, platform caveats, or migration details that matter but should not interrupt the main path.

This should stay collapsed when an author writes defaultOpen="false" in MDX.

properties Hide properties

Imported Mintlify MDX may omit the title on nested API expandables. Plandalf falls back to properties instead of rendering an empty control.

Implementation questions

Keep secondary caveats collapsed. Default-open accordions should explain the immediate next step or the most common branch.

You can add inline help with a tooltip , a plain definition , or a small icon when a sentence needs a compact signal. Mintlify-style icon prop aliases work too . Numeric icon sizing also works .

Use offer_123 for a copyable ID, PLANDALF_API_KEY for an environment variable, or modal when the value should read like inline code without a copy affordance.

Use frames for real product screenshots, videos, and inspectable UI context rather than abstract diagrams.
The Numi offer editor with checkout and automation controls.
Offer editor screenshot with checkout and automation controls in context.
The Numi API docs page with request examples.
Browser frames can hold real product or docs states without a fake placeholder.
Frame hints can include inline code and emphasis.
The Numi checkout elements palette preview.
Captions support bold, emphasis, inline code, and links.
2026-06-18

Docs component parity pass

The docs system now supports richer media frames, badges, tooltips, changelog-style updates, tabbed examples, API fields, and recursive sidebar groups.

2026-06-17

2026-06-17

Preview tiles now support direct img and imgAlt props as well as child media.

  • Use compact tiles for dense navigation.
  • Use preview tiles for screenshots, component previews, and visual choices.

Premium Verified Beta Locked With tooltip SVG className

Visual context

Checkout handoff
graph TD
Button[Buy button] —> Offer[Plandalf Offer]
Offer —> Payment[Payment stack]
Offer —> Events[SDK events]
Events —> Backend[Backend handoff]
Example docs structure

docs ├─ sdk │ ├─ install.mdx │ └─ configure.mdx └─ api ├─ authentication.mdx └─ reference.mdx

Compound tree
content
docs
introduction.mdx
quickstart.mdx
docs.json
Alias tree
snippets
install.mdx
offer-glossary.mdx
assets
checkout-preview.png
Compact color formats
Compound color palette

Brand

Surfaces

View and visibility

Use the browser SDK when the checkout action lives on a plain page or CMS template.

JavaScript setup

window.Plandalf.openOffer({
  offerId: "offer_123",
  mode: "modal"
});

Use a backend call when your server needs to prepare customer context before checkout.

Python setup

session = plandalf.checkout.sessions.create(
    offer_id="offer_123",
    customer={"external_id": "user_123"}
)

Use named icons for operator-facing variants that are not programming languages.

- Test the offer
- Confirm checkout events
- Connect the backend handoff
Legacy human view still renders
Human-facing note

Feature detail