IntegrationsGatsby
Add AI Search 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 InkeepSearchBar.tsx
file for the Search Bar
component.
import * as React from "react";
import { useEffect, useState } from "react";
import useInkeepSettings from "@/utils/useInkeepSettings";
export default function InkeepSearchBar() {
const [SearchBar, setSearchBar] = useState(null);
const { baseSettings, aiChatSettings, searchSettings, modalSettings } =
useInkeepSettings();
// load the library asynchronously
useEffect(() => {
const loadSearchBar = async () => {
try {
const { InkeepSearchBar } = await import("@inkeep/uikit");
setSearchBar(() => InkeepSearchBar);
} catch (error) {
console.error("Failed to load SearchBar:", error);
}
};
loadSearchBar();
}, []);
const searchBarProps = {
baseSettings,
aiChatSettings,
searchSettings,
modalSettings,
};
return SearchBar && <SearchBar {...searchBarProps} />;
}
import * as React from "react";
import { useEffect, useState } from "react";
import useInkeepSettings from "@/utils/useInkeepSettings";
import type { InkeepSearchBarProps } from "@inkeep/uikit";
export default function InkeepSearchBar() {
const [SearchBar, setSearchBar] =
useState<(e: InkeepSearchBarProps) => JSX.Element>();
const { baseSettings, aiChatSettings, searchSettings, modalSettings } =
useInkeepSettings();
// load the library asynchronously
useEffect(() => {
const loadSearchBar = async () => {
try {
const { InkeepSearchBar } = await import("@inkeep/uikit");
setSearchBar(() => InkeepSearchBar);
} catch (error) {
console.error("Failed to load SearchBar:", error);
}
};
loadSearchBar();
}, []);
const searchBarProps: InkeepSearchBarProps = {
baseSettings,
aiChatSettings,
searchSettings,
modalSettings,
};
return SearchBar && <SearchBar {...searchBarProps} />;
}
For a full list of customizations, check out the Search Bar documentation.