IntegrationsGatsby
Add AI Chat to your Gatsby app
What is Gatsby
Gatsby is a React-based open source framework for creating websites.
Install the component library
npm install @inkeep/uikit
bun add @inkeep/uikit
pnpm add @inkeep/uikit
yarn add @inkeep/uikit
Customize your settings
First, create a useInkeepSettings.ts
file that will contain a hook that returns configuration for the Inkeep component(s).
Below is an example with common customizations:
const useInkeepSettings = () => {
const baseSettings = {
apiKey: process.env.INKEEP_API_KEY,
integrationId: process.env.INKEEP_INTEGRATION_ID,
organizationId: process.env.INKEEP_ORGANIZATION_ID,
primaryBrandColor: "#26D6FF", // your brand color, widget color scheme is derived from this
organizationDisplayName: "Inkeep",
// ...optional settings
};
const modalSettings = {
// optional settings
};
const searchSettings = {
// optional settings
};
const aiChatSettings = {
// optional settings
botAvatarSrcUrl: "/img/logo.svg", // use your own bot avatar
quickQuestions: [
"Example question 1?",
"Example question 2?",
"Example question 3?",
],
};
return { baseSettings, aiChatSettings, searchSettings, modalSettings };
};
export default useInkeepSettings;
import type {
InkeepAIChatSettings,
InkeepSearchSettings,
InkeepBaseSettings,
InkeepModalSettings,
} from "@inkeep/uikit";
type InkeepSharedSettings = {
baseSettings: InkeepBaseSettings;
aiChatSettings: InkeepAIChatSettings;
searchSettings: InkeepSearchSettings;
modalSettings: InkeepModalSettings;
};
const useInkeepSettings = (): InkeepSharedSettings => {
const baseSettings: InkeepBaseSettings = {
apiKey: "INKEEP_API_KEY",
integrationId: "INKEEP_INTEGRATION_ID",
organizationId: "INKEEP_ORGANIZATION_ID",
primaryBrandColor: "#26D6FF", // your brand color, widget color scheme is derived from this
organizationDisplayName: "Inkeep",
// ...optional settings
};
const modalSettings: InkeepModalSettings = {
// optional settings
};
const searchSettings: InkeepSearchSettings = {
// optional settings
};
const aiChatSettings: InkeepAIChatSettings = {
// optional settings
botAvatarSrcUrl: "/img/logo.svg", // use your own bot avatar
quickQuestions: [
"Example question 1?",
"Example question 2?",
"Example question 3?",
],
};
return { baseSettings, aiChatSettings, searchSettings, modalSettings };
};
export default useInkeepSettings;
Define the component
Next, create an InkeepChatButton.tsx
file for the Chat Button
component.
import * as React from "react";
import { useEffect, useState } from "react";
import useInkeepSettings from "@/utils/useInkeepSettings";
export default function InkeepChatButton() {
const [ChatButton, setChatButton] = useState(null);
const { baseSettings, aiChatSettings, searchSettings, modalSettings } =
useInkeepSettings();
// load the library asynchronously
useEffect(() => {
const loadChatButton = async () => {
try {
const { InkeepChatButton } = await import("@inkeep/uikit");
setChatButton(() => InkeepChatButton);
} catch (error) {
console.error("Failed to load ChatButton:", error);
}
};
loadChatButton();
}, []);
const chatButtonProps = {
baseSettings,
aiChatSettings,
searchSettings,
modalSettings,
};
return ChatButton && <ChatButton {...chatButtonProps} />;
}
import * as React from "react";
import { useEffect, useState } from "react";
import useInkeepSettings from "@/utils/useInkeepSettings";
import type { InkeepChatButtonProps } from "@inkeep/uikit";
export default function InkeepChatButton() {
const [ChatButton, setChatButton] =
useState<(e: InkeepChatButtonProps) => JSX.Element>();
const { baseSettings, aiChatSettings, searchSettings, modalSettings } =
useInkeepSettings();
// load the library asynchronously
useEffect(() => {
const loadChatButton = async () => {
try {
const { InkeepChatButton } = await import("@inkeep/uikit");
setChatButton(() => InkeepChatButton);
} catch (error) {
console.error("Failed to load ChatButton:", error);
}
};
loadChatButton();
}, []);
const chatButtonProps: InkeepChatButtonProps = {
baseSettings,
aiChatSettings,
searchSettings,
modalSettings,
};
return ChatButton && <ChatButton {...chatButtonProps} />;
}
For a full list of customizations, check out the Chat Button documentation.