Blocks

Drop in a whole interface

Blocks are pre-composed, themeable surfaces built from skeehn primitives + the AI SDK layer. Import one, wire your data, and re-skin it with any theme — chat, agent, voice, and site. Available from @skeehn/react/blocks.

ChatConsole

Header + model picker, an autoscrolling conversation, an empty-state with prompt suggestions, and an input. Try it — type or pick a suggestion:

Support
tsx20 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { useChat } from '@ai-sdk/react';
import { ChatConsole } from '@skeehn/react/blocks';
import '@skeehn/core/styles.css';

export function Support() {
  const { messages, sendMessage, status } = useChat();
  return (
    <ChatConsole
      title="Support"
      messages={messages}
      busy={status === 'streaming'}
      onSend={(text) => sendMessage({ text })}
      models={['anthropic/claude-opus-4-8', 'anthropic/claude-sonnet-4-6']}
      suggestions={[
        { value: 'refund', text: 'How do I get a refund?' },
        { value: 'status', text: 'Where is my order?' },
      ]}
    />
  );
}

AgentConsole

A run monitor: a live status pill, the current task, and the agent’s reasoning + tool calls as they stream.

Builder
acting
Refactor parseTree to O(n)
Refactor parseTree to O(n).
search_codebasesuccess
{
  "query": "parseTree"
}
{
  "matches": 3,
  "file": "src/parse/parseTree.ts"
}
apply_editsuccess
{
  "file": "parseTree.ts"
}
{
  "applied": true,
  "lines": 12
}
Done — replaced the inner find() with a pre-built Map. One O(n) pass.

VoiceConsole

A framed voice surface — waveform, transcript, and mute/end controls.

AssistantListening
00:42
What's on my calendar today?
You have three meetings — the first is standup at 10.
Speak naturally — tap End to finish

HeroSection

Not just chat — skeehn builds sites too. A themeable landing hero from the core foundation.

Open source · MIT

Build it with skeehn

The customizable UI foundation for AI products and the sites around them.

Every block re-themes with data-theme — try switching the theme from the navbar and watch them transform.