AI components

Conversations, rich responses, tools, voice, and workflows. Built with the same paper, ink, and controls as the rest of Vlak.

Compose an assistant from React components, then connect your model and data. Each piece works on its own or as part of a conversation.

Launch brief
Example project
YouComplete
Review the launch brief. What should we focus on first?
AssistantComplete

I’d focus the first release on three things:

  • Keep the scope small. Ship the review flow before adding more ways to collaborate.
  • Give each decision an owner. Make it clear who is taking the next step.
  • Keep sources close. Link the brief behind each recommendation.

The review flow is a good place to start. Want me to turn this into an action list?

Reviewed the launch brief1 source

The example checks the proposed scope, ownership, and supporting sources.

Read launch-brief.mdComplete

Input

Example project / launch-brief.md

Output

Scope, owners, and sources reviewed from the recorded example.

Enter to send. Shift+Enter for a new line.

The assistant reference app connects these components to the AI SDK and OpenAI. It includes saved conversations, attachments, editing, regeneration, tool approvals, and React and iframe widgets.

Open the live assistant or run it locally with your server credentials. The integration guide explains the setup and the boundary between reusable UI and application code.

50 components and patterns

Read the component index as Markdown or the AI integration guide for complete compositions and model integration.

npm install @noorddev/vlak-react
import "@noorddev/vlak-react/css";
import { Chat, MessageComposer, Reasoning, Response, ResponseActions } from "@noorddev/vlak-react";

<Chat title="Project conversation"
  composer={<MessageComposer compact maxRows={6} sendOnEnter onSend={sendMessage}
    generating={status === "streaming"} onStop={stop} />}>
  <Response from="user">Review the launch brief.</Response>
  <Response status={status}
    actions={status === "complete" ? <ResponseActions text={text} /> : undefined}>
    <Reasoning variant="inline" title="Reviewed the launch brief" status="complete">
      <p>Checked the supplied scope, owners, and sources.</p>
    </Reasoning>
    {renderResponse(text)}
  </Response>
</Chat>

Supply the response content and its status from your application. In this example, renderResponse, sendMessage, stop, text, and status come from your model integration. The compact composer grows from one line to six, outside the scrolling history. Response actions provide copy, narration, feedback, and share controls.

Use the optional Response Markdown renderer for streamed text, highlighted code, math, and diagrams. The integration guide includes a complete composition, an AI SDK recipe, and mappings for response and tool states.

Add Message composer for prompts and attachments, References for citations, and Code block for code. Chat provides the frame and scrolling history used above. Follow the widget patterns for application data and third-party integrations.