> ## Documentation Index
> Fetch the complete documentation index at: https://docs.introw.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Asset Hub

> Embed a curated, branded library of assets directly in the partner portal, with full control over what each partner sees.

export const Headless = ({prompts = []}) => {
  const PromptRow = ({prompt}) => {
    const [copied, setCopied] = useState(false);
    const copy = () => {
      try {
        navigator.clipboard?.writeText(prompt);
      } catch {}
      setCopied(true);
      setTimeout(() => setCopied(false), 1600);
    };
    return <div className="group flex items-center justify-between gap-3 px-4 py-3 transition-colors hover:bg-[#FD90FF]/[0.06]">
        <span className="text-sm leading-relaxed text-zinc-700 dark:text-zinc-200">{prompt}</span>
        <button type="button" onClick={copy} aria-label={copied ? "Copied to clipboard" : "Copy prompt"} className={`shrink-0 rounded-md p-1.5 transition-all hover:bg-[#FD90FF]/10 focus:opacity-100 focus:outline-none ${copied ? "text-[#FD90FF] opacity-100" : "text-zinc-400 opacity-0 group-hover:opacity-100 dark:text-zinc-500"}`}>
          {copied ? <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M20 6L9 17l-5-5" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg> : <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <rect x="9" y="9" width="11" height="11" rx="2" stroke="currentColor" strokeWidth="2" />
              <path d="M5 15V5a2 2 0 0 1 2-2h10" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>}
        </button>
      </div>;
  };
  return <>
      <p>
        Introw is <strong>headless</strong> by design: run everything here in plain language from Claude, ChatGPT,
        Slack, Teams, or your own CRM through Introw's <a href="/features/developer/mcp">MCP server</a>, with every
        action written straight back to your CRM source of truth. The portal is one surface, never the only one.
      </p>

      {prompts.length > 0 ? <div className="not-prose my-6 overflow-hidden rounded-2xl border border-zinc-200/80 bg-white shadow-sm dark:border-white/10 dark:bg-white/[0.02]">
          <div className="flex items-center gap-2 border-b border-zinc-200/80 bg-gradient-to-r from-[#FD90FF]/10 via-[#FD90FF]/5 to-transparent px-4 py-2.5 dark:border-white/10">
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4 text-[#FD90FF]" aria-hidden="true">
              <path d="M12 2.5l2 5.5 5.5 2-5.5 2-2 5.5-2-5.5L4.5 10l5.5-2 2-5.5z" fill="currentColor" />
              <path d="M18.5 14l1 2.6 2.6 1-2.6 1-1 2.6-1-2.6-2.6-1 2.6-1 1-2.6z" fill="currentColor" opacity="0.55" />
            </svg>
            <span className="text-xs font-semibold uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
              Try it from your LLM
            </span>
          </div>

          <div className="flex flex-col divide-y divide-zinc-100 dark:divide-white/[0.06]">
            {prompts.map(prompt => <PromptRow key={prompt} prompt={prompt} />)}
          </div>

          <a href="/headless" className="flex items-center justify-between gap-2 border-t border-zinc-200/80 px-4 py-2.5 text-sm font-medium text-zinc-600 no-underline transition-colors hover:text-[#FD90FF] dark:border-white/10 dark:text-zinc-300">
            <span>See the full headless playbook</span>
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
          </a>
        </div> : <Card title="See the headless motion" icon="wand-magic-sparkles" href="/headless">
          The agentic playbook - lifecycle deep dives and a Claude Code skill library that run your partner program
          from Claude, ChatGPT, Slack, and your CRM.
        </Card>}
    </>;
};

> The Asset Hub puts a curated, searchable library right inside the partner portal, so partners find the content they need without leaving the portal, and you control exactly which assets each one sees.

## What it does

The Asset Hub is a content block you embed in a portal experience that surfaces assets from your
library. Instead of sending one-off links, you give partners a browsable, searchable hub right in
their portal. You curate which folders and assets appear, choose a table or thumbnail layout, and
turn on search and filters so partners can find what they need fast.

Visibility carries through from the library, and a partner-specific hub can show only the assets
tied to an individual partner. Views are tracked, so you can see what partners engage with inside
the portal. The result is a self-serve enablement experience that stays governed and on-brand.

## The problem it solves

Sending assets one at a time does not scale, and a dump of everything is worse:

* **Partners hunt for content across links** → Give them one curated hub in the portal.
* **You cannot control what each partner sees** → Curate folders and assets per hub, with library visibility carried through.
* **A long list is unusable** → Turn on search, filters, and a layout that fits the content.
* **Some assets are partner-specific** → Show a partner-specific hub with just their assets.

## From problem to solution

The Asset Hub makes the portal a self-serve enablement surface. Curate the assets, set the
layout, and let partners browse and search in their portal. Visibility stays governed and views are
tracked, so partners help themselves while you keep control and insight.

```mermaid theme={"theme":{"light":"github-light","dark":"github-dark"}}
flowchart LR
  curate["Curate assets"] --> embed["Embed in portal"]
  embed --> browse["Partner browses and searches"]
  browse --> track["Views tracked"]
```

## Use cases

<CardGroup cols={2}>
  <Card title="Self-serve enablement" icon="circle-check">
    Give partners a browsable hub in the portal.
  </Card>

  <Card title="Curate per portal" icon="circle-check">
    Choose which folders and assets each hub shows.
  </Card>

  <Card title="Make it findable" icon="circle-check">
    Add search, filters, and the right layout.
  </Card>

  <Card title="Show partner-specific assets" icon="circle-check">
    Surface only the assets tied to one partner.
  </Card>
</CardGroup>

## Impact

* **Low total cost of ownership** - Partner marketing curates hubs with no engineering.
* **Work where you already are** - The hub lives in the partner portal, not a separate destination to hunt down.

## Who it's for

<CardGroup cols={2}>
  <Card title="Partner Marketing & Enablement" icon="user">
    Curates the in-portal content experience.
  </Card>

  <Card title="Partner Operations" icon="user">
    Keeps hub visibility aligned with library governance.
  </Card>
</CardGroup>

## Works with

{/* CONNECTS:START - generated content goes here */}

<CardGroup cols={2}>
  <Card title="Asset Library" icon="folder-open" href="/features/content/asset-library">
    Embed governed library assets anywhere.
  </Card>

  <Card title="Embed" icon="code" href="/features/developer/embed">
    Embed assets outside Introw too.
  </Card>
</CardGroup>

## Headless

<Headless
  prompts={[
"What content has Acme viewed recently?",
"Which assets are getting the most partner engagement?",
]}
/>

## Going deeper

<CardGroup cols={2}>
  <Card title="How to" icon="screwdriver-wrench" href="./technical">
    Setup, configuration, and all how-to guides.
  </Card>

  <Card title="API reference" icon="code" href="/general/introduction">
    Integration surface and code.
  </Card>
</CardGroup>
