MeDo

AI Chat Panel Generator.

Your product already has the page where the answer is needed. MeDo generates the panel that lives there: a docked surface with a streaming message log, an attachment-aware composer, citations that trace back to sources, tool chips that tell the truth, and a recovery path for every failed request — all scoped to whatever the host page has open.

Chat Panel
C

A Chat Panel Is a Guest in Someone Else's Interface

An embedded panel succeeds on a different axis than a full-screen chat app: it shares oxygen with a page that already has a job. That constrains everything. It lives in a rail, a drawer, or a corner, so width is scarce and type must stay legible at 320 pixels. Its authority is borrowed — the user expects it to know the record on screen, the document selected, the chart in view, and one generic answer breaks the promise of embedding. Its failures happen on someone else's time: a stream that dies mid-sentence, a tool chip stuck on 'running', a draft lost to a network blip — each teaches the user to keep the panel closed. Generating it with those contracts spelled out — scope line, streaming behavior, citation format, honest tool status, recovery path — is what separates a fixture people leave open from a gimmick they close once.

4 Vorlagen

Chat Panel-Vorlagen, die Sie generieren können

Jede Vorlage ist ein echter Prompt, kein Screenshot. Kopieren Sie ihn in einen KI-Editor oder führen Sie ihn in MeDo aus und erhalten Sie React- und Tailwind-Code zurück.

Corner dockSupport Widget

Persistent Help Chat Across Routes

The support pattern: a launcher that follows the user between pages, a thread that survives navigation, and an escalation path that keeps the transcript.

Build a support chat widget docked bottom-right. Collapsed, it is a 56px round launcher with an unread dot; opened, a 360-by-520px panel with a header — 'Support' and a minimize icon — a scrolling message log, and a composer with attachments. Keep the transcript in session storage so the thread survives route changes. Stream replies with a typing indicator before the first chunk. Render help-center citations as link chips carrying the article title. On send failure, keep the draft in the composer and show a 'Message not sent — retry' line above it. Escape closes the panel and returns focus to the launcher.

In MeDo testen
Scoped sidebarDocs Copilot

Ask-This-Page Sidebar for Documentation

A rail scoped to the article on screen: answers grounded in the page, every claim cited to the section it came from, with an escape hatch to wider search.

Build a docs copilot sidebar in a 340px right rail on an article page. A context chip at the top reads 'Source: current page' with the article title; a toggle widens scope to the whole docs section. The log renders questions compactly and answers as prose whose factual paragraphs end in superscript numbers — clicking one scrolls the article to the cited heading and flashes it. Syntax-highlight code in answers with a copy button. While an answer streams, the article's scroll position stays untouched; the sidebar scrolls independently. When an answer cannot be grounded in the page, say so and offer to search the full docs instead of guessing.

In MeDo testen
Selection-anchoredReview Commenter

Inline Chat Anchored to Selected Text

The panel as a popover: select a passage, ask about it, and the exchange stays tied to that span while the document scrolls.

Build an inline reviewer for a document editor. Select a passage and press the ask shortcut: a 320px popover opens anchored below the selection, showing the quote in a grey block, a one-line composer, and any prior threads for the same span. Each exchange threads under the quote; the anchor tracks the document scroll and repositions on resize. Answers stream as plain prose with a stop button. Tool lookups show a status chip — 'Checking style guide…' — resolving to done or failed. Multiple selections keep separate threads, switchable from a dropdown at the popover top. Focus stays in the popover until Escape returns it to the document.

In MeDo testen
Primary railFull-Height Assistant

Tall Assistant Rail for Context-Heavy Work

When the assistant is the main event beside a canvas or table: room for long answers, inline artifacts, run status, and a keyboard-first entry point.

Build a full-height assistant rail: a 420px column beside an analytics dashboard, collapsible to 56px with the preference stored locally. It holds a slim header with the assistant name and a New-conversation button, a message log with day separators, and a composer that accepts attachments like CSV exports. Long answers render tables inline, each followed by a 'Show the query' disclosure revealing the tool call that produced it with its run status. While a data tool executes, show a live status line — 'Querying orders… 3s'. On failure, the log keeps its last good state and offers retry. Cmd+J focuses the composer from anywhere on the page.

In MeDo testen

So passen Sie Ihre Chat Panel an

Pick the embedding shape before the styling

A docked rail, a slide-over drawer, a corner bubble, and a full-height column are different products: they differ in width budget, whether they push content or float over it, and who owns focus while open. Choose against the host page — a rail suits a dashboard with a stable grid, a drawer suits a dense editor, a corner suits occasional support. Say the shape first; everything downstream sizes from it.

Write the scope line before generating anything

One grey line under the panel title — 'Scoped to: Acme Corp order #4821' — does more than a feature list to earn trust, because it tells the user exactly what the assistant can see. Decide what the host page will pass in: the open record, the selected document, the visible date range. An unscoped panel that answers generically next to specific data reads as broken.

Keep tool status honest and cheap to read

Any call the assistant makes on the user's behalf deserves a chip: its present tense while running ('Searching tickets…'), a completion state, and a failure state that is clickable rather than decorative. Elapsed seconds cost nothing and stop users from re-sending. Silent tool activity is the fastest way to lose trust in an embedded assistant, because the user can see the page they trust doing nothing.

Design the failure as a message, not a toast

When a send or a stream fails, the evidence should stay in the log: the partial answer marked as interrupted, the unsent question back in the composer, a Retry row that resends the same request. A toast that vanishes teaches users to screenshot before sending. Name the recovery behaviors you want — draft preservation, retry semantics, offline handling — because they are invisible in a happy-path demo and decisive in week two.

Wer die Chat Panel-Komponente nutzt

CRM record assistant

A rail docked beside a customer record where every answer is scoped to that account — 'why did churn spike' means this customer's churn — and replies cite the tickets and invoices they drew from.

Documentation help sidebar

An ask-this-page panel on article pages: questions answered from the doc on screen, each claim carrying a superscript that scrolls the article to the cited section.

In-app support widget

A corner launcher that follows the user across routes, keeps the thread in session storage between pages, and escalates to a human without losing the transcript.

Analytics dashboard explainer

A full-height rail beside a chart grid where answers render the underlying query as an expandable disclosure, so a number can always be traced to its source table.

Chat Panel-Muster für verschiedene Websites

Dieselbe chat panel-Komponente, abgestimmt auf die Art der Website, auf der sie läuft.

01 / 04

SaaS Dashboards and Admin Panels

The record-scoped rail: every screen already holds a customer, an order, or a campaign, so the panel inherits specific context for free. The scope line does the trust-building; citations back it up.

Chat Panel-Stile und -Varianten

Wählen Sie die Variante, die zum Rest der Seite passt, und generieren Sie sie.

01 / 04

Quiet Rail

No bubbles: user turns are compact labeled lines, replies are full-width prose. Buys back width in a narrow dock and lets long answers read like documentation instead of text messages.

Chat Panel in React, Next.js, Vue und Svelte

React, Next.js, Vue 3, SvelteKit, Astro oder reines HTML — dieselbe chat panel, sechs Wege zur Einbindung.

01 / 03

React Chat Panel

The streaming loop the whole panel hangs on: append the reply once, grow it chunk by chunk through stable ids, and settle its status — done or failed — at the end.

src/components/AssistantPanel.tsx

const [messages, setMessages] = useState([])
const [draft, setDraft] = useState('')

async function send() {
  const text = draft.trim()
  if (!text) return
  setDraft('')
  setMessages((m) => [...m, { id: crypto.randomUUID(), role: 'user', content: text }])
  const id = crypto.randomUUID()
  setMessages((m) => [...m, { id, role: 'assistant', content: '', status: 'streaming' }])
  try {
    for await (const chunk of streamReply(text)) {
      setMessages((m) => m.map((msg) =>
        msg.id === id ? { ...msg, content: msg.content + chunk } : msg))
    }
    setMessages((m) => m.map((msg) =>
      msg.id === id ? { ...msg, status: 'done' } : msg))
  } catch {
    setMessages((m) => m.map((msg) =>
      msg.id === id ? { ...msg, status: 'failed' } : msg))
  }
}

So fügen Sie Ihre Chat Panel einem Projekt hinzu

Vier Schritte, von der Auswahl einer chat panel-Vorlage bis zum Einsatz in der Produktion.

01~5min

Pick Where the Panel Lives

Rail, drawer, corner bubble, or full-height column — the shape sets the width budget, when it opens, and who owns focus. Choose against the host page: a stable dashboard grid wants a docked rail, a dense editor wants a drawer, occasional support wants a corner.

02~10min

Write the Scope Line

Decide exactly what host context the panel sees — the open record, the current article, the visible date range — and name it in one line under the panel title. Every claim the assistant makes is trusted or doubted against this line.

03~3min

Generate Against the Real Page

With the host page open, tell MeDo the embedding shape, the scope line, citation format, attachment rules, and tool chips in one prompt. Judge the result docked in place — a panel that reads well in isolation can fail at 380px beside a real grid.

04~5min

Break It on Purpose

Kill the network mid-stream, force a tool call to fail, send while offline, navigate away and back. Panels earn daily use through recovery — interrupted marks, retry rows, preserved drafts — not through their first reply.

Häufige Fragen zu Chat Panel

Is a chat panel the same thing as a conversation?

No — one is a widget, the other is the pattern the widget hosts. A conversation is the organizing model: who spoke, in what order, how streaming appends, what a fork means. A chat panel is the embedded surface that implements that model inside someone else's page, with the constraints embedding adds: narrow width, host-page context, focus rules, panel behaviors like collapse and close. MeDo has a separate Conversation pattern page for the organizing model; use this page when the question is where the dialogue lives and how it behaves as a guest in your interface.

When does a chat panel stop being enough and I need an agent workspace?

When the assistant stops advising and starts doing. A panel is one region; if the AI needs to edit files, run commands, show diffs, manage approvals, or drive a live preview that the user watches change, you have crossed into an agent workspace — a multi-region environment where the conversation is one column among code, files, and results. Adding a diff viewer and a terminal inside a 380px rail is not an upgrade, it is a workspace crushed into a panel. Keep the panel for asking, explaining, and summarizing around the page the user is already in.

Can I use a chat panel as the prompt box on my landing page?

That job belongs to a task input, not a panel. A landing-page prompt box is single-shot: one task in, one result out, no history, no thread. A chat panel implies an ongoing exchange — prior turns visible, context accumulating, a log that persists. Dropping a full panel onto a marketing page adds scroll weight and state you do not need. The common pattern is a single-shot entry on the landing page that hands off into a panel once the user commits, so the dialogue starts exactly when there is something to continue.

How do I make an embedded chat panel accessible?

Three named pieces: a labelled panel region, a message area with role="log" — which politely announces newly appended messages to assistive technology without stealing focus — and a real textarea for the composer. Mark only new content for announcement, keep the stop and send controls as named buttons, return focus to the trigger when the panel closes, and support Escape to dismiss. Streaming complicates this: announce once when a reply starts rather than per token, which is exactly what the log role's polite behavior gives you.

How should citations work in a panel this narrow?

Numbered superscripts in the reply, resolving to a compact source list directly beneath the message — title, source type, and a link. Skip inline URL previews at panel widths; they eat the column. Make each citation durable: if the panel closes or the thread reloads, the link still resolves. In a docs context, clicking a citation should scroll the host article to the cited section, which turns the citation from decoration into navigation and quietly proves the answer was grounded.

What should happen when a request fails mid-stream?

Keep the partial text visible and mark it — 'interrupted' or 'failed' — rather than deleting it, because the half answer often contains useful work. A Retry row resends the same request without the user retyping. Distinguish the failure causes in the copy: a network drop says reconnect, a rejected request says why, a failed tool says which step. And never lose the draft: if the user had typed a follow-up while waiting, it is still in the composer after the failure, untouched.