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
Install the SDK
Load the browser package and confirm that the global object is available.
Configure checkout
Choose modal, slideout, bottom sheet, fullscreen, or inline behavior.
Listen for events
React to checkout lifecycle changes from the browser.
Inline SVG icon
Cards accept inline SVG strings for Mintlify-style icon portability.
Horizontal card
Use horizontal cards for compact links inside dense implementation guides.
Typed warning card
Typed cards use the same visual language as callouts when the whole container needs emphasis.
Image card
Image cards can frame screenshots or product surfaces without nesting a card inside another card.
Layer card
Use for high-value next steps.
Layer cards give important navigation choices a richer surface without nesting cards inside other cards.
Compact linked card
Linked cards get a default icon.
Compact cards keep dense grids readable when a page needs several next links.
Tiles
Checkout surface
Deadline engine
Browser stream
Backend handoff
Payment platform
Compatibility aliases
Cards alias
Cards maps to CardGroup for imported or generated MDX that names the wrapper after the collection.
Field alias
Field and Param map to ParamField for compact API docs.
Images and embeds
Frame.Lists and tables
- Create the offer.
- Add the buying action.
- Watch the checkout event.
- Preserve the checkout ID.
- Send the customer to the right next step.
- Route the backend handoff.
- SDK installed
- Test offer opened
- Live payment processor connected
| Surface | Owner | Alignment |
|---|---|---|
| Buy button | Frontend | Start |
| Checkout session | Plandalf | Center |
| Fulfillment event | Backend | Right |
Installation
npm install @plandalf/browserUse 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
-
Start with the smallest buying surface that can open in preview.
Add one Offer, one product, and one price before adding variants or upsells.
-
Load the SDK where the sales page owns the click.
Use the script tag or package install path that matches the host page.
-
Bind the button to the offer before adding extra page logic.
Keep the first interaction visible and easy to test.
-
Listen for completion before adding automation branches.
Redirect, unlock access, record analytics, or call your backend with the completed checkout ID.
-
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.
-
Use card steps when each step needs more surface area or a visible state icon.
-
Use
stepNumberonly when ported MDX continues an existing procedure. -
Imported steps can preserve their heading level without forcing the whole sequence to change.
-
Compact step
Use this in dense reference pages.
Compact steps preserve the numbered sequence while taking less vertical space.
-
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" mode: "modal" Choose an implementation style
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> Use this when the page owns the click handler.
window.Plandalf.openOffer({ offerId: "offer_123" }); Single example
{
"status": "completed",
"checkoutId": "checkout_123"
} Tabbed 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.
offerIdstringrequiredplaceholder: offer_123The offer identifier from the Plandalf dashboard or API.
mode"modal" | "slideout" | "inline"default: modalControls how checkout opens on the page.
includestring[]placeholder: line_items,invoicesOptional response expansions for API-style endpoints.
previewbooleandefault: falseBoolean defaults render cleanly instead of relying on string-only metadata.
Idempotency-KeystringdeprecatedOptional request header for retry-safe API calls.
›bodycustomerobjectrequired
Customer context passed into checkout when your app already knows the buyer.
customer.emailstringrequiredplaceholder: buyer@example.comEmail address used for receipts, buyer matching, and follow-up automation.
customer.external_idstringplaceholder: user_123Stable identifier from your app.
Checkout request fields
Group related `ParamField` entries when a page needs a Mintlify-style API field section.
offer_idstringrequiredplaceholder: offer_123The offer opened by the checkout session.
success_urlstringplaceholder: https://example.com/thanksThe 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.
customer_idstringplaceholder: cus_123Optional buyer identifier from your app.
expandstring[]default: []Additional objects to include in the response.
checkoutIdstringrequiredThe completed checkout session identifier returned after the customer finishes checkout.
status"open" | "completed" | "expired"default: openenumThe current checkout session state.
attempt_countnumberdefault: 0Numeric defaults keep their API shape in the field metadata.
line_itemsarrayReturned when the response includes expanded invoice or cart data.
›dataofferobjectrequired
The offer snapshot attached to the checkout session.
offer.idstringrequiredStable offer identifier.
offer.currencystringdefault: usdISO 4217Currency 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.
idstringrequiredStable checkout session identifier.
status"open" | "completed" | "expired"requiredCurrent state of the checkout session.
Quiet response list
Response groups can also render as a low-chrome list.
livemodebooleandefault: falseWhether the checkout session was created against a live payment connection.
created_atstringISO 8601Timestamp for the session creation event.
Compatibility response alias
object"checkout.session"The object type returned by this response.
Request and response
Request / responseCreate checkout session
curl https://api.plandalf.com/v1/checkout/sessions \
-H "Authorization: Bearer $PLANDALF_API_KEY" \
-d offer_id=offer_123await 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
{
"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
Does the plural alias work?
Yes. Accordions maps to AccordionGroup for imported Mintlify-style MDX.
Supporting details
Implementation questions
Can this be linked directly? Hash links open the matching accordion.
Yes. Opening an accordion updates the URL hash, and loading the page with that hash opens the matching item.
When should an accordion be default-open? Use it when the first item is part of the primary explanation.
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.
inline code and emphasis.inline code, and links.The docs system now supports richer media frames, badges, tooltips, changelog-style updates, tabbed examples, API fields, and recursive sidebar groups.
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
docs ├─ sdk │ ├─ install.mdx │ └─ configure.mdx └─ api ├─ authentication.mdx └─ reference.mdx
content
docs
products
snippets
assets
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