import React, { Fragment } from 'react' import { useConfig, DocsThemeConfig } from 'nextra-theme-docs' import LogoMark from '@/components/LogoMark' import FooterMenu from '@/components/FooterMenu' import JSONLD from '@/components/JSONLD' import { useRouter } from 'next/router' import Link from 'next/link' import { LibraryBig, Blocks, BrainCircuit, Computer } from 'lucide-react' import { AiOutlineGithub } from 'react-icons/ai' import { BiLogoDiscordAlt } from 'react-icons/bi' import { RiTwitterXFill } from 'react-icons/ri' import Navbar from '@/components/Navbar' const defaultUrl = 'https://jan.ai' const defaultImage = 'https://jan.ai/assets/images/general/og-image.png' const structuredData = { '@context': 'https://schema.org', '@type': 'Organization', 'name': 'Jan', 'url': `${defaultUrl}`, 'logo': `${defaultImage}`, } const config: DocsThemeConfig = { logo: (
Jan
), docsRepositoryBase: 'https://github.com/janhq/jan/tree/dev/docs', feedback: { content: 'Question? Give us feedback →', labels: 'feedback', }, editLink: { text: 'Edit this page on GitHub →', }, useNextSeoProps() { return { titleTemplate: '%s - Jan', twitter: { cardType: 'summary_large_image', site: '@jandotai', }, openGraph: { type: 'website', }, } }, navbar: { component: , }, sidebar: { titleComponent: ({ type, title }) => { // eslint-disable-next-line react-hooks/rules-of-hooks const { asPath } = useRouter() if (type === 'separator' && title === 'Switcher') { return (
{(() => { const items = [ { title: 'Jan Desktop', path: '/docs/desktop', Icon: LibraryBig, }, { title: 'Jan Server', path: '/docs/server', Icon: Computer }, ] return items.map((item) => { const active = asPath.startsWith(item.path) return active ? (
{item.title}
) : ( {item.title} ) }) })()}
) } return title }, defaultMenuCollapseLevel: 1, toggleButton: true, }, darkMode: false, toc: { backToTop: true, }, head: function useHead() { const { title, frontMatter } = useConfig() const { asPath } = useRouter() const titleTemplate = asPath.includes('/post/') ? (frontMatter?.title || title) : (asPath.includes('/desktop') ? 'Jan Desktop' : asPath.includes('/server') ? 'Jan Server' : 'Jan') + ' - ' + (frontMatter?.title || title) return ( {titleTemplate} keyword) || [ 'Jan', 'Customizable Intelligence, LLM', 'local AI', 'privacy focus', 'free and open source', 'private and offline', 'conversational AI', 'no-subscription fee', 'large language models', 'build in public', 'remote team', 'how we work', ] } /> ) }, footer: { text: , }, nextThemes: { defaultTheme: 'light', forcedTheme: 'light', }, } export default config