Merge pull request #185 from janhq/jan-182

draft: Refactor Docs Site, add Hardware section
This commit is contained in:
0xSage 2023-09-25 19:00:40 +08:00 committed by GitHub
commit 85470f1e9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
92 changed files with 1579 additions and 14508 deletions

View File

@ -1,4 +0,0 @@
---
sidebar_position: 1
title: About Jan
---

8
docs/docs/about/about.md Normal file
View File

@ -0,0 +1,8 @@
---
title: About Jan
slug: /about
---
## Team
## History

View File

@ -0,0 +1,3 @@
---
title: Brand Assets
---

View File

@ -1,5 +0,0 @@
---
title: Story
---
TODO: a month by month recap

View File

@ -1,3 +0,0 @@
---
title: Team
---

View File

@ -1,7 +0,0 @@
{
"label": "Company",
"position": 2,
"link": {
"type": "generated-index"
}
}

View File

@ -1,3 +0,0 @@
---
title: Team Structure
---

View File

@ -1,7 +0,0 @@
{
"label": "Handbook",
"position": 5,
"link": {
"type": "generated-index"
}
}

View File

@ -0,0 +1,10 @@
---
title: Roadmap
---
## Problem
## Ideal Customer Persona
## Business Model

View File

@ -1,3 +0,0 @@
---
title: Roadmap
---

View File

@ -1,4 +0,0 @@
---
title: Mission & Vision
---

View File

@ -1,4 +0,0 @@
---
title: Customer Persona
---

View File

@ -1,3 +0,0 @@
---
title: Business Model
---

View File

@ -1,3 +0,0 @@
---
title: Brand
---

View File

@ -1,3 +0,0 @@
---
title: OKRs
---

View File

@ -1,7 +0,0 @@
{
"label": "Strategy",
"position": 3,
"link": {
"type": "generated-index"
}
}

View File

@ -1,6 +1,6 @@
---
sidebar_position: 1
title: Guides
title: Getting Started
---
TODO

View File

@ -0,0 +1,3 @@
---
title: Installing Jan on Linux
---

View File

@ -0,0 +1,3 @@
---
title: Installing Jan on Linux
---

View File

@ -0,0 +1,3 @@
---
title: Installing Jan on Linux
---

View File

@ -0,0 +1,3 @@
---
title: Hardware Acceleration
---

View File

@ -0,0 +1,11 @@
---
title: Powerful AI Models
---
- Run AI on your own hardware
- Llama2, StableDiffusion
- Rapidly growing ecosystem of open source, locally run AI
- Connect to cloud-based AI
- ChatGPT
- Claude
- Bard

View File

@ -0,0 +1,12 @@
---
title: Privacy and Data Security
---
- Privacy
- Data Security
- Optional Policy Engine for 3rd-party AIs
- Offline-ready
- Airgapped locations
- Prevent a data leak
- Shadow IT
- Personal Information being sent to ChatGPT, corporate IP

View File

@ -0,0 +1,3 @@
---
title: Extensions
---

View File

@ -0,0 +1,3 @@
---
title: Features
---

View File

@ -0,0 +1,13 @@
---
title: Unlimited Use
---
- Cost doesn't scale with usage
- Difficult to estimate cost of a project
- ChatGPT costs $2 per GPT-4 call with 32k context (what document would this be equivalent to?)
- Reading in documents is expensive
- Getting ChatGPT to ingest a codebase
- On the other hand
- No surprises at the end of the month
- Use as much as you want
- Predictable costs

View File

@ -1,20 +0,0 @@
---
sidebar_position: 1
title: Getting Started
slug: /
---
Hi there
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">Use Ctrl + C to copy.</TabItem>
<TabItem value="mac" label="macOS">Use Command + C to copy.</TabItem>
</Tabs>
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">Use Ctrl + V to paste.</TabItem>
<TabItem value="mac" label="macOS">Use Command + V to paste.</TabItem>
</Tabs>

View File

@ -1,4 +0,0 @@
---
sidebar_position: 1
title: Glossary
---

View File

@ -0,0 +1,4 @@
---
title: Company Handbook
slug: /handbook
---

View File

@ -0,0 +1,53 @@
---
title: Community Examples
---
## Add your own example
Add your own examples to this page by creating a new file in the `docs/docs/hardware/examples` directory.
```shell
docs
└── docs
└── hardware
└── examples
└── 3090x1-%40dan-jan.md
└── 3090x1-%40dan-jan.md
// highlight-next-line
└── <YOUR_BUILD_HERE>.md
```
### File and Title Convention
We use a specific naming convention for the file name.
```shell
# Filename
<hardware-type><quantity>-<username>.md
3090x1-@dan-jan.md # Example
# Title
---
title: <@github_username>: <hardware_x_quantity> <form-factor>
title: @dan-jan: 3090 Desktop # Example
---
```
### Content
We highly recommend you include:
- Photos of your build
- List of the components (e.g. [PCPartPicker](https://pcpartpicker.com))
- Dimensions
- Power consumption
- Noise level
- Any stats on token generation speeds
- List of models you have run successfully on the build
## Affiliate Links
You are allowed to include affiliate links in your example.
## Longer-Term
We will likely build a simple web app to make it easier to add your own examples, sort and retrieve.

View File

@ -0,0 +1,3 @@
---
title: Chassis
---

View File

@ -0,0 +1,8 @@
---
title: Anatomy of a Thinking Machine
slug: /hardware/concepts
---
- Cover the difference between CPU/RAM and GPU/VRAM
- AI can now run on CPU/RAM (llama.cpp)
- AI that runs on Apple Silicon

View File

@ -0,0 +1,7 @@
---
title: CPU
---
- CPU's role vs GPU
- Cooler + Thermal Paste
- RAM

View File

@ -0,0 +1,8 @@
---
title: GPUs and VRAM
---
- GPUs plugging in to Motherboard via PCIe
- Multiple GPUs
- NVLink
- PCIe (and Motherboard limitations)

View File

@ -0,0 +1,5 @@
---
title: Motherboard
---
- PCIe lanes that go to the processor (not Chipset)

View File

@ -0,0 +1,3 @@
---
title: Network
---

View File

@ -0,0 +1,3 @@
---
title: Power Supply
---

View File

@ -0,0 +1,3 @@
---
title: Storage
---

View File

@ -0,0 +1,3 @@
---
title: "@dan-jan: 3090 Desktop"
---

View File

@ -0,0 +1,3 @@
---
title: "@janhq: 2x4090 Workstation"
---

View File

@ -1,6 +1,5 @@
{
"label": "Roadmap",
"position": 4,
"label": "Example Builds",
"link": {
"type": "generated-index"
}

View File

@ -0,0 +1,3 @@
---
title: Cloud vs. Buy
---

View File

@ -0,0 +1,3 @@
---
title: CPU vs. GPU
---

View File

@ -0,0 +1,13 @@
---
title: Recommended AI Hardware by Budget
---
## $1,000
## $2,500
## $5,000
## $7,500
## $10,000

View File

@ -0,0 +1,7 @@
---
title: Recommended AI Models by Hardware
---
## Macbook 8GB RAM
## Macbook 16GB RAM

View File

@ -0,0 +1,8 @@
---
title: Recommended AI Hardware by Model
---
## Codellama 34b
## Falcon 180b

View File

@ -0,0 +1,62 @@
---
title: Recommended AI Hardware by Use Case
---
## Personal Use
### Entry-level Experimentation
### Personal Use
- Macbook (16gb)
- 3090
### Prosumer Use
- Apple Silicon
- 2 x 3090 (48gb RAM)
## Business Use
### For a 10-person Small Business
Run a LLM trained on enterprise data (i.e. RAG)
- Mac Studio M2 Ultra with 192GB unified memory
- Cannot train
- RTX 6000
- Should we recommend 2 x 4090 instead?
### For a 50-person Law Firm
- LLM, PDF Parsing, OCR
- Audit logging and compliance
### For a 1,000-student School
- Llama2 with safeguards
- RAG with textbook data
- Policy engine
## Software Engineering
### Personal Code Assistant
- Llama34b, needs adequate RAM
- Not recommended to run on local device due to RAM
### For a 10 person Software Team
Run Codellama with RAG on existing codebase
- Codellama34b
- RTX 6000s (48gb)
## Enterprise
### For a 1000-person Enterprise
### For a 10,000-person Enterprise
- 8 x H100s
- NVAIE with vGPUs

View File

@ -1,6 +0,0 @@
---
sidebar_position: 1
title: Integrations
---
TODO

View File

@ -0,0 +1,5 @@
---
sidebar_position: 1
title: Overview
slug: /platform
---

View File

@ -0,0 +1,3 @@
---
title: Jan Desktop
---

View File

@ -0,0 +1,3 @@
---
title: Jan Mobile
---

View File

@ -0,0 +1,4 @@
---
title: Products
slug: /product
---

View File

@ -0,0 +1,3 @@
---
title: Jan Server
---

View File

@ -0,0 +1,3 @@
---
title: Education
---

View File

@ -0,0 +1,3 @@
---
title: Finance
---

View File

@ -0,0 +1,3 @@
---
title: Healthcare
---

View File

@ -0,0 +1,3 @@
---
title: Law
---

View File

@ -0,0 +1,3 @@
---
title: Public Sector
---

View File

@ -0,0 +1,3 @@
---
title: Software Engineering
---

View File

@ -0,0 +1,3 @@
---
title: Personal AI
---

View File

@ -0,0 +1,3 @@
---
title: Self-hosted ChatGPT
---

View File

@ -0,0 +1,4 @@
---
title: Overview
slug: /solutions
---

View File

@ -1,69 +1,81 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
const lightCodeTheme = require("prism-react-renderer/themes/github");
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Jan Documentation',
tagline: 'Self-hosted AI inference platform',
favicon: 'img/favicon.ico',
title: "Jan",
tagline: "Run your own AI",
favicon: "img/favicon.ico",
// Set the production url of your site here
url: 'https://docs.jan.ai',
url: "https://jan.ai",
// Set the /<baseUrl>/ pathname under which your site is served
// For GitHub pages deployment, it is often '/<projectName>/'
baseUrl: '/',
baseUrl: "/",
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: 'janhq', // Usually your GitHub org/user name.
projectName: 'jan', // Usually your repo name.
organizationName: "janhq", // Usually your GitHub org/user name.
projectName: "jan", // Usually your repo name.
onBrokenLinks: 'ignore',
onBrokenMarkdownLinks: 'warn',
onBrokenLinks: "warn",
onBrokenMarkdownLinks: "warn",
// Even if you don't use internalization, you can use this field to set useful
// metadata like html lang. For example, if your site is Chinese, you may want
// to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'en',
locales: ['en'],
defaultLocale: "en",
locales: ["en"],
},
// Plugins we added
plugins: [
async function myPlugin(context, options) {
return {
name: "docusaurus-tailwindcss",
configurePostCss(postcssOptions) {
// Appends TailwindCSS and AutoPrefixer.
postcssOptions.plugins.push(require("tailwindcss"));
postcssOptions.plugins.push(require("autoprefixer"));
return postcssOptions;
},
};
},
],
// Only for react live
themes: ['@docusaurus/theme-live-codeblock'],
themes: ["@docusaurus/theme-live-codeblock"],
// The classic preset will relay each option entry to the respective sub plugin/theme.
presets: [
[
'classic',
"classic",
/** @type {import('@docusaurus/preset-classic').Options} */
({
// Will be passed to @docusaurus/plugin-content-docs (false to disable)
docs: {
routeBasePath: '/',
sidebarPath: require.resolve('./sidebars.js'),
editUrl:
'https://github.com/janhq/jan/tree/main/docs',
sidebarCollapsed: false,
routeBasePath: "/",
sidebarPath: require.resolve("./sidebars.js"),
editUrl: "https://github.com/janhq/jan/tree/main/docs",
showLastUpdateAuthor: true,
showLastUpdateTime: true,
},
// Will be passed to @docusaurus/plugin-content-sitemap (false to disable)
sitemap: {
changefreq: 'weekly',
priority: 0.5,
ignorePatterns: ['/tags/**'],
filename: 'sitemap.xml',
changefreq: "daily",
priority: 1.0,
ignorePatterns: ["/tags/**"],
filename: "sitemap.xml",
},
// Will be passed to @docusaurus/plugin-content-blog (false to disable)
blog: false,
// Will be passed to @docusaurus/theme-classic.
theme: {
customCss: require.resolve('./src/css/custom.css'),
customCss: require.resolve("./src/css/custom.css"),
},
// Will be passed to @docusaurus/plugin-content-pages (false to disable)
// pages: {},
@ -71,142 +83,151 @@ const config = {
],
// Redoc preset
[
'redocusaurus',
"redocusaurus",
{
specs: [
{
spec: 'openapi/OpenAPISpec.json', // can be local file, url, or parsed json object
route: '/reference/',
spec: "openapi/OpenAPISpec.json", // can be local file, url, or parsed json object
route: "/api/",
},
],
theme: {
primaryColor: '#1a73e8',
primaryColorDark: '#1a73e8',
primaryColor: "#1a73e8",
primaryColorDark: "#1a73e8",
// redocOptions: { hideDownloadButton: false },
},
}
]
},
],
],
// Docs: https://docusaurus.io/docs/api/themes/configuration
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
image: 'img/jan-social-card.png',
image: "img/jan-social-card.png",
// Only for react live
liveCodeBlock: {
playgroundPosition: 'bottom',
playgroundPosition: "bottom",
},
navbar: {
title: 'Jan Docs',
title: "Jan",
logo: {
alt: 'Jan Logo',
src: 'img/logo.svg',
alt: "Jan Logo",
src: "img/logo.svg",
},
items: [
// Navbar left
// Navbar Top
{
type: 'docSidebar',
sidebarId: 'quickstartSidebar',
position: 'left',
label: 'Getting Started',
type: "docSidebar",
sidebarId: "featuresSidebar",
position: "left",
label: "Platform",
},
{
type: 'docSidebar',
sidebarId: 'guidesSidebar',
position: 'left',
label: 'Guides',
type: "docSidebar",
sidebarId: "solutionsSidebar",
position: "left",
label: "Use Cases",
},
{
type: 'docSidebar',
sidebarId: 'hardwareSidebar',
position: 'left',
label: 'Hardware',
},
{
type: 'docSidebar',
sidebarId: 'integrationsSidebar',
position: 'left',
label: 'Integrations',
},
{
position: 'left',
label: 'Reference',
to: '/reference',
type: "docSidebar",
sidebarId: "companySidebar",
position: "left",
label: "Company",
},
// Navbar right
{
type: 'docSidebar',
sidebarId: 'aboutSidebar',
position: 'right',
label: 'About',
type: "docSidebar",
sidebarId: "docsSidebar",
position: "right",
label: "Docs",
},
{
href: 'https://github.com/janhq/jan',
label: 'GitHub',
position: 'right',
type: "docSidebar",
sidebarId: "hardwareSidebar",
position: "right",
label: "Hardware",
},
{
position: "right",
label: "API",
to: "/api",
},
{
href: "https://github.com/janhq/jan",
label: "GitHub",
position: "right",
},
],
},
footer: {
style: 'dark',
style: "dark",
links: [
{
title: 'Documentation',
title: "Jan",
items: [
{
label: 'Getting Started',
to: '/',
label: "Home",
to: "/",
},
{
label: 'Guides',
to: '/guides',
label: "Platform",
to: "/platform",
},
{
label: 'Developer',
to: '/developer',
},
{
label: 'Reference',
to: '/reference',
},
{
label: 'Changelog',
to: '/changelog',
label: "Use Cases",
to: "/solutions",
},
],
},
{
title: 'Community',
title: "Docs",
items: [
{
label: 'Discord',
href: 'https://discord.gg/FTk2MvZwJH',
label: "Docs",
to: "/docs",
},
{
label: 'Telegram',
href: 'https://t.me/+cSSlxwEM-0piMDQ1',
label: "Hardware",
to: "/hardware",
},
{
label: 'Twitter',
href: 'https://twitter.com/askjanai',
label: "API",
to: "/api",
},
{
label: "Changelog",
to: "/changelog",
},
],
},
{
title: 'More',
title: "Community",
items: [
{
label: 'About',
to: '/about',
label: "Discord",
href: "https://discord.gg/FTk2MvZwJH",
},
{
label: 'Blog',
href: 'https://blog.jan.ai',
label: "Twitter",
href: "https://twitter.com/jan_dotai",
},
],
},
{
title: "Company",
items: [
{
label: "About",
to: "/about",
},
{
label: 'GitHub',
href: 'https://github.com/janhq/jan',
label: "Careers",
href: "https://janai.bamboohr.com/careers",
},
{
label: "GitHub",
href: "https://github.com/janhq/jan",
},
],
},
@ -216,7 +237,12 @@ const config = {
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
additionalLanguages: ['python'],
additionalLanguages: ["python"],
},
colorMode: {
defaultMode: "dark",
disableSwitch: false,
respectPrefersColorScheme: false,
},
}),
};

14177
docs/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -17,12 +17,17 @@
"@docusaurus/core": "2.4.1",
"@docusaurus/preset-classic": "2.4.1",
"@docusaurus/theme-live-codeblock": "^2.4.1",
"@headlessui/react": "^1.7.17",
"@heroicons/react": "^2.0.18",
"@mdx-js/react": "^1.6.22",
"autoprefixer": "^10.4.16",
"clsx": "^1.2.1",
"postcss": "^8.4.30",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"redocusaurus": "^1.6.3"
"redocusaurus": "^1.6.3",
"tailwindcss": "^3.3.3"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.4.1"

View File

@ -14,28 +14,207 @@
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
quickstartSidebar: [{
type: 'autogenerated', dirName: 'getting-started',
}],
guidesSidebar: [{ type: 'autogenerated', dirName: 'guides' }],
hardwareSidebar: [{ type: 'autogenerated', dirName: 'hardware' }],
integrationsSidebar: [{ type: 'autogenerated', dirName: 'integrations' }],
glossarySidebar: [{ type: 'autogenerated', dirName: 'glossary' }],
changelogSidebar: [{ type: 'autogenerated', dirName: 'changelog' }],
aboutSidebar: [{ type: 'autogenerated', dirName: 'about' }],
// But you can create a sidebar manually
/*
tutorialSidebar: [
'intro',
'hello',
featuresSidebar: [
"platform/platform",
{
type: 'category',
label: 'Tutorial',
items: ['tutorial-basics/create-a-document'],
type: "category",
label: "Products",
collapsible: true,
collapsed: false,
link: { type: "doc", id: "products/products" },
items: ["products/desktop", "products/mobile", "products/server"],
},
{
type: "category",
label: "Features",
collapsible: true,
collapsed: false,
link: { type: "doc", id: "features/features" },
items: [
"features/ai-models",
"features/control",
"features/acceleration",
"features/extensions",
],
},
],
// Note: Tab name is "Use Cases"
solutionsSidebar: [
"solutions/solutions",
{
type: "category",
label: "Use cases",
collapsible: true,
collapsed: false,
items: ["solutions/personal-ai", "solutions/self-hosted"],
},
{
type: "category",
label: "Industries",
collapsible: true,
collapsed: false,
items: [
"solutions/industries/software",
"solutions/industries/education",
"solutions/industries/law",
"solutions/industries/public-sector",
"solutions/industries/finance",
"solutions/industries/healthcare",
],
},
],
docsSidebar: [
{ type: "doc", label: "Getting Started", id: "docs/docs" },
{
type: "category",
label: "Install",
collapsible: true,
collapsed: false,
items: [
{ type: "doc", label: "Windows", id: "docs/install/windows" },
{ type: "doc", label: "Mac", id: "docs/install/mac" },
{ type: "doc", label: "Linux", id: "docs/install/linux" },
],
},
],
hardwareSidebar: [
{
type: "category",
label: "Overview",
collapsible: true,
collapsed: true,
link: { type: "doc", id: "hardware/hardware" },
items: [
{
type: "doc",
label: "Cloud vs. Buy",
id: "hardware/overview/cloud-vs-buy",
},
{
type: "doc",
label: "CPUs vs. GPUs",
id: "hardware/overview/cpu-vs-gpu",
},
],
},
{
type: "category",
label: "Recommendations",
collapsible: true,
collapsed: false,
items: [
{
type: "doc",
label: "By Hardware",
id: "hardware/recommendations/by-hardware",
},
{
type: "doc",
label: "By Budget",
id: "hardware/recommendations/by-budget",
},
{
type: "doc",
label: "By Model",
id: "hardware/recommendations/by-model",
},
{
type: "doc",
label: "By Use Case",
id: "hardware/recommendations/by-usecase",
},
],
},
{
type: "category",
label: "Anatomy of a Thinking Machine",
collapsible: true,
collapsed: true,
link: { type: "doc", id: "hardware/concepts/concepts" },
items: [
{
type: "doc",
label: "Chassis",
id: "hardware/concepts/chassis",
},
{
type: "doc",
label: "Motherboard",
id: "hardware/concepts/motherboard",
},
{
type: "doc",
label: "CPU and RAM",
id: "hardware/concepts/cpu-and-ram",
},
{
type: "doc",
label: "GPU and VRAM",
id: "hardware/concepts/gpu-and-vram",
},
{
type: "doc",
label: "Storage",
id: "hardware/concepts/storage",
},
{
type: "doc",
label: "Network",
id: "hardware/concepts/network",
},
{
type: "doc",
label: "Power Supply",
id: "hardware/concepts/power",
},
],
},
{
type: "category",
label: "Community Examples",
collapsible: true,
collapsed: true,
link: { type: "doc", id: "hardware/community" },
items: [
{
type: "autogenerated",
dirName: "hardware/examples",
},
],
},
],
companySidebar: [
{
type: "category",
label: "About Jan",
collapsible: true,
collapsed: false,
link: { type: "doc", id: "about/about" },
items: [
"about/roadmap",
{
type: "link",
label: "Careers",
href: "https://janai.bamboohr.com/careers",
},
"about/brand-assets",
],
},
{
type: "category",
label: "Company Handbook",
collapsible: true,
collapsed: false,
link: { type: "doc", id: "handbook/handbook" },
items: ["handbook/remote-work"],
},
],
*/
};
module.exports = sidebars;

View File

@ -0,0 +1,92 @@
import React from "react";
import { Fragment } from "react";
import { Menu, Transition } from "@headlessui/react";
import { ChevronDownIcon } from "@heroicons/react/20/solid";
const items = [
{
name: "Download for Mac (M1/M2)",
href: "#",
logo: require("@site/static/img/apple-logo-white.png").default,
},
{
name: "Download for Mac (Intel)",
href: "#",
logo: require("@site/static/img/apple-logo-white.png").default,
},
{
name: "Download for Windows",
href: "#",
logo: require("@site/static/img/windows-logo-white.png").default,
},
{
name: "Download for Linux",
href: "#",
logo: require("@site/static/img/linux-logo-white.png").default,
},
];
function classNames(...classes) {
return classes.filter(Boolean).join(" ");
}
export default function Dropdown() {
return (
<div className="inline-flex align-items-stretch">
{/* TODO dynamically detect users OS through browser */}
<button
type="button"
className="cursor-pointer relative inline-flex items-center rounded-l-md border-0 px-3.5 py-2.5 text-base font-semibold text-white bg-indigo-600 dark:bg-indigo-500 hover:bg-indigo-500 dark:hover:bg-indigo-400"
>
<img
src={require("@site/static/img/apple-logo-white.png").default}
alt="Logo"
className="h-5 mr-3 -mt-1"
/>
Download for Mac (Silicon)
</button>
<Menu as="div" className="relative -ml-px block">
<Menu.Button className="cursor-pointer relative inline-flex items-center rounded-r-md border-0 border-l border-gray-300 active:border-l active:border-white h-full text-white bg-indigo-600 dark:bg-indigo-500 hover:bg-indigo-500 dark:hover:bg-indigo-400">
<span className="sr-only">Open OS options</span>
<ChevronDownIcon className="h-5 w-5" aria-hidden="true" />
</Menu.Button>
<Transition
as={Fragment}
enter="transition ease-out duration-100"
enterFrom="transform opacity-0 scale-95"
enterTo="transform opacity-100 scale-100"
leave="transition ease-in duration-75"
leaveFrom="transform opacity-100 scale-100"
leaveTo="transform opacity-0 scale-95"
>
<Menu.Items className="absolute right-0 z-10 mt-2 w-72 text-left origin-top-right rounded-md bg-indigo-600 dark:bg-indigo-500 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none">
<div className="py-1">
{items.map((item) => (
<Menu.Item key={item.name}>
{({ active }) => (
<a
href={item.href}
className={classNames(
active
? "bg-indigo-500 dark:hover:bg-indigo-400 hover:text-white"
: "text-white",
"block px-4 py-2"
)}
>
<img
src={item.logo}
alt="Logo"
className="w-3 mr-3 -mt-1"
/>
{item.name}
</a>
)}
</Menu.Item>
))}
</div>
</Menu.Items>
</Transition>
</Menu>
</div>
);
}

View File

@ -0,0 +1,32 @@
import React from "react";
import { XMarkIcon } from "@heroicons/react/20/solid";
export default function HomepageBanner() {
return (
<div className="flex items-center gap-x-6 bg-gray-900 px-6 py-2.5 sm:px-3.5 sm:before:flex-1">
<p className="text-sm leading-6 text-white">
<a href="#">
<strong className="font-semibold">GeneriCon 2023</strong>
<svg
viewBox="0 0 2 2"
className="mx-2 inline h-0.5 w-0.5 fill-current"
aria-hidden="true"
>
<circle cx={1} cy={1} r={1} />
</svg>
Join us in Denver from June 7 9 to see whats coming next&nbsp;
<span aria-hidden="true">&rarr;</span>
</a>
</p>
<div className="flex flex-1 justify-end">
<button
type="button"
className="-m-3 p-3 focus-visible:outline-offset-[-4px]"
>
<span className="sr-only">Dismiss</span>
<XMarkIcon className="h-5 w-5 text-white" aria-hidden="true" />
</button>
</div>
</div>
);
}

View File

@ -0,0 +1,77 @@
import React from "react";
import {
ArrowPathIcon,
CloudArrowUpIcon,
LockClosedIcon,
} from "@heroicons/react/20/solid";
const features = [
{
name: "Mac",
description:
"Commodo nec sagittis tortor mauris sed. Turpis tortor quis scelerisque diam id accumsan nullam tempus. Pulvinar etiam lacus volutpat eu. Phasellus praesent ligula sit faucibus.",
href: "#",
icon: CloudArrowUpIcon,
},
{
name: "Windows",
description:
"Pellentesque enim a commodo malesuada turpis eleifend risus. Facilisis donec placerat sapien consequat tempor fermentum nibh.",
href: "#",
icon: LockClosedIcon,
},
{
name: "Linux",
description:
"Pellentesque sit elit congue ante nec amet. Dolor aenean curabitur viverra suspendisse iaculis eget. Nec mollis placerat ultricies euismod ut condimentum.",
href: "#",
icon: ArrowPathIcon,
},
];
export default function HomepageDownloads() {
return (
<div className="bg-white dark:bg-gray-900 py-12 sm:py-16">
<div className="mx-auto max-w-7xl px-6 lg:px-8">
<div className="mx-auto max-w-2xl lg:text-center">
<h2 className="text-base font-semibold leading-7 text-indigo-600 dark:text-indigo-400">
Run AI on any OS
</h2>
<p className="mt-2 text-3xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-4xl">
Downloads
</p>
<p className="mt-6 text-lg leading-8 text-gray-600 dark:text-gray-300">
Jan is compatible with all major operating systems. Download the
latest stable versions here.
</p>
</div>
<div className="mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-none">
<dl className="grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none lg:grid-cols-3">
{features.map((feature) => (
<div key={feature.name} className="flex flex-col">
<dt className="flex items-center gap-x-3 text-base font-semibold leading-7 text-gray-900 dark: text-white">
<feature.icon
className="h-5 w-5 flex-none text-indigo-600 dark:text-indigo-400"
aria-hidden="true"
/>
{feature.name}
</dt>
<dd className="mt-4 flex flex-auto flex-col text-base leading-7 text-gray-600 dark:text-gray-300">
<p className="flex-auto">{feature.description}</p>
<p className="mt-6">
<a
href={feature.href}
className="text-sm font-semibold leading-6 text-indigo-600 dark:text-indigo-400"
>
Learn more <span aria-hidden="true"></span>
</a>
</p>
</dd>
</div>
))}
</dl>
</div>
</div>
</div>
);
}

View File

@ -0,0 +1,99 @@
import React from "react";
import { ChevronRightIcon } from "@heroicons/react/20/solid";
import { useColorMode } from "@docusaurus/theme-common";
import Dropdown from "@site/src/components/Elements/dropdown";
export default function HomepageHero() {
const { colorMode } = useColorMode();
return (
<div className="bg-white dark:bg-gray-900">
<div className="relative isolate pt-14">
{/* Background top gradient styling */}
{colorMode === "dark" ? (
<div
className="absolute inset-x-0 -top-40 -z-10 transform-gpu overflow-hidden blur-3xl sm:-top-80"
aria-hidden="true"
>
<div
className="relative left-[calc(50%-11rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 rotate-[30deg] bg-gradient-to-tr from-[#ff80b5] to-[#9089fc] opacity-20 sm:left-[calc(50%-30rem)] sm:w-[72.1875rem]"
style={{
clipPath:
"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)",
}}
/>
</div>
) : (
<div
className="absolute inset-x-0 -top-40 -z-10 transform-gpu overflow-hidden blur-3xl sm:-top-80"
aria-hidden="true"
>
<div
className="relative left-[calc(50%-11rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 rotate-[30deg] bg-gradient-to-tr from-[#ff80b5] to-[#9089fc] opacity-30 sm:left-[calc(50%-30rem)] sm:w-[72.1875rem]"
style={{
clipPath:
"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)",
}}
/>
</div>
)}
{/* Main hero block */}
<div className="py-24 sm:py-32 lg:pb-40">
<div className="mx-auto max-w-7xl px-6 lg:px-8">
{/* Hero text and buttons */}
<div className="mx-auto max-w-2xl text-center">
<h1 className="text-4xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-6xl">
Run your own AI
</h1>
<p className="mt-6 text-lg leading-8 text-gray-600 dark:text-gray-300">
Jan lets you run AI on your own hardware. 1-click to install the
latest open-source models. Monitor and manage software-hardware
performance.
<br></br>
Jan is
<strong> free and open core</strong> with a Sustainable Use
License.
</p>
<div className="mt-10 flex items-center justify-center gap-x-6">
{/* TODO: handle mobile model download app instead */}
<Dropdown />
<button
type="button"
className="cursor-pointer relative inline-flex items-center rounded px-3.5 py-2 dark:py-2.5 text-base font-semibold text-indigo-600 bg-white border-indigo-600 dark:border-0 hover:bg-indigo-600 dark:hover:bg-indigo-500 hover:text-white"
>
Book a Demo
</button>
</div>
</div>
{/* Desktop screenshot image full width */}
<img
src={
colorMode === "dark"
? // TODO replace with darkmode image
require("@site/static/img/desktop-llm-chat.png").default
: require("@site/static/img/desktop-llm-chat.png").default
}
alt="App screenshot"
width={2432}
className="mt-16 rounded-lg md:rounded-2xl lg:rounded-3xl bg-white/5 shadow-2xl ring-1 ring-white/10 sm:mt-24"
/>
</div>
</div>
{/* Background top gradient styling */}
<div
className="absolute inset-x-0 top-[calc(100%-13rem)] -z-10 transform-gpu overflow-hidden blur-3xl sm:top-[calc(100%-30rem)]"
aria-hidden="true"
>
<div
className="relative left-[calc(50%+3rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 bg-gradient-to-tr from-[#ff80b5] to-[#9089fc] opacity-30 sm:left-[calc(50%+36rem)] sm:w-[72.1875rem]"
style={{
clipPath:
"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)",
}}
/>
</div>
</div>
</div>
);
}

View File

@ -0,0 +1,6 @@
export { default as HomepageBanner } from "./banner";
export { default as HomepageHero } from "./hero";
export { default as HomepageSectionOne } from "./sectionOne";
export { default as HomepageSectionTwo } from "./sectionTwo";
export { default as HomepageSectionThree } from "./sectionThree";
export { default as HomepageDownloads } from "./downloads";

View File

@ -0,0 +1,86 @@
import React from "react";
import {
CircleStackIcon,
CloudArrowUpIcon,
CursorArrowRaysIcon,
HomeIcon,
LockClosedIcon,
RocketLaunchIcon,
ServerIcon,
} from "@heroicons/react/20/solid";
import { useColorMode } from "@docusaurus/theme-common";
const features = [
{
name: "1 Click Installs.",
description:
"Llama2, MPT, CodeLlama, and more. 1 click to install the latest and greatest models directly from HuggingFace. Or easily uploads your own models.",
icon: CursorArrowRaysIcon,
},
{
name: "Model management.",
description:
"Configure advanced settings for each model. Manage your model versions. Easily switch between models. Get visibility into hardware compatibility.",
icon: HomeIcon,
},
{
name: "Cloud AI Compatible.",
description:
"Connect via API to ChatGPT, Claude which are also still supported. Also declare your own remote server endpoint on any GPU cloud and share it.",
icon: CloudArrowUpIcon,
},
];
export default function HomepageSectionOne() {
const { colorMode } = useColorMode();
return (
<div className="overflow-hidden bg-white dark:bg-gray-900 py-24 sm:py-32">
<div className="mx-auto max-w-7xl px-6 lg:px-8">
<div className="mx-auto grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:mx-0 lg:max-w-none lg:grid-cols-2">
<div className="lg:ml-auto lg:pl-4 lg:pt-4">
<div className="lg:max-w-lg">
<h2 className="text-base font-semibold leading-7 text-indigo-600 dark:text-indigo-400">
Jan supports
</h2>
<p className="mt-2 text-3xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-4xl">
Powerful Foundational Models
</p>
<p className="mt-6 text-lg leading-8 text-gray-600 dark:text-gray-300">
Open source foundational models are supported.
</p>
<dl className="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 dark:text-gray-300 lg:max-w-none">
{features.map((feature) => (
<div key={feature.name} className="relative pl-9">
<dt className="inline font-semibold text-gray-900 dark:text-gray-300">
<feature.icon
className="absolute left-1 top-1 h-5 w-5 text-indigo-600 dark:text-indigo-400"
aria-hidden="true"
/>
{feature.name}
</dt>{" "}
<dd className="inline">{feature.description}</dd>
</div>
))}
</dl>
</div>
</div>
<div className="flex items-start justify-end lg:order-first">
<img
src={
colorMode === "dark"
? // TODO replace with darkmode image
require("@site/static/img/desktop-explore-models-dark.png")
.default
: require("@site/static/img/desktop-explore-models.png")
.default
}
alt="Product screenshot"
className="w-[48rem] max-w-none rounded-xl shadow-xl ring-1 ring-gray-400/10 sm:w-[57rem]"
width={2432}
/>
</div>
</div>
</div>
</div>
);
}

View File

@ -0,0 +1,174 @@
import React from "react";
import { useState } from "react";
import { RadioGroup } from "@headlessui/react";
import { CheckIcon } from "@heroicons/react/20/solid";
const frequencies = [
{ value: "monthly", label: "Monthly", priceSuffix: "/1Mn tokens" },
{ value: "annually", label: "Annually", priceSuffix: "/year" },
];
const tiers = [
{
name: "Pay per API call",
id: "tier-freelancer",
href: "#",
price: { monthly: "$75", annually: "$144" },
description: "The essentials to provide your best work for clients.",
features: [
"5 products",
"Up to 1,000 subscribers",
"Basic analytics",
"48-hour support response time",
],
mostPopular: false,
},
{
name: "Run it yourself",
id: "tier-startup",
href: "#",
price: { monthly: "$0", annually: "$288" },
description: "A plan that scales with your rapidly growing business.",
features: [
"25 products",
"Up to 10,000 subscribers",
"Advanced analytics",
"24-hour support response time",
"Marketing automations",
],
mostPopular: true,
},
{
name: "Rent Cloud GPUs",
id: "tier-enterprise",
href: "#",
price: { monthly: "$40", annually: "$576" },
description: "Dedicated support and infrastructure for your company.",
features: [
"Unlimited products",
"Unlimited subscribers",
"Advanced analytics",
"1-hour, dedicated support response time",
"Marketing automations",
"Custom reporting tools",
],
mostPopular: false,
},
];
function classNames(...classes) {
return classes.filter(Boolean).join(" ");
}
export default function Example() {
const [frequency, setFrequency] = useState(frequencies[0]);
return (
<div className="bg-white py-24 sm:py-32">
<div className="mx-auto max-w-7xl px-6 lg:px-8">
<div className="mx-auto max-w-4xl text-center">
<h2 className="text-base font-semibold leading-7 text-indigo-600">
AI on your own hardware means
</h2>
<p className="mt-2 text-4xl font-bold tracking-tight text-gray-900 sm:text-5xl">
Unlimited Use
</p>
</div>
<p className="mx-auto mt-6 max-w-2xl text-center text-lg leading-8 text-gray-600">
No uncontrolled cloud spending. No hidden fees. No limits.
</p>
{/* <div className="mt-16 flex justify-center">
<RadioGroup
value={frequency}
onChange={setFrequency}
className="grid grid-cols-2 gap-x-1 rounded-full p-1 text-center text-xs font-semibold leading-5 ring-1 ring-inset ring-gray-200"
>
<RadioGroup.Label className="sr-only">
Payment frequency
</RadioGroup.Label>
{frequencies.map((option) => (
<RadioGroup.Option
key={option.value}
value={option}
className={({ checked }) =>
classNames(
checked ? "bg-indigo-600 text-white" : "text-gray-500",
"cursor-pointer rounded-full px-2.5 py-1"
)
}
>
<span>{option.label}</span>
</RadioGroup.Option>
))}
</RadioGroup>
</div> */}
<div className="isolate mx-auto mt-10 grid max-w-md grid-cols-1 gap-8 lg:mx-0 lg:max-w-none lg:grid-cols-3">
{tiers.map((tier) => (
<div
key={tier.id}
className={classNames(
tier.mostPopular
? "ring-2 ring-indigo-600"
: "ring-1 ring-gray-200",
"rounded-3xl p-8 xl:p-10"
)}
>
<div className="flex items-center justify-between gap-x-4">
<h3
id={tier.id}
className={classNames(
tier.mostPopular ? "text-indigo-600" : "text-gray-900",
"text-lg font-semibold leading-8"
)}
>
{tier.name}
</h3>
{tier.mostPopular ? (
<p className="rounded-full bg-indigo-600/10 px-2.5 py-1 text-xs font-semibold leading-5 text-indigo-600">
Fully private
</p>
) : null}
</div>
<p className="mt-4 text-sm leading-6 text-gray-600">
{tier.description}
</p>
<p className="mt-6 flex items-baseline gap-x-1">
<span className="text-4xl font-bold tracking-tight text-gray-900">
{tier.price[frequency.value]}
</span>
<span className="text-sm font-semibold leading-6 text-gray-600">
{frequency.priceSuffix}
</span>
</p>
{/* <a
href={tier.href}
aria-describedby={tier.id}
className={classNames(
tier.mostPopular
? "bg-indigo-600 text-white shadow-sm hover:bg-indigo-500"
: "text-indigo-600 ring-1 ring-inset ring-indigo-200 hover:ring-indigo-300",
"mt-6 block rounded-md py-2 px-3 text-center text-sm font-semibold leading-6 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
)}
>
Buy plan
</a> */}
<ul
role="list"
className="mt-8 space-y-3 text-sm leading-6 text-gray-600 xl:mt-10"
>
{tier.features.map((feature) => (
<li key={feature} className="flex gap-x-3">
<CheckIcon
className="h-6 w-5 flex-none text-indigo-600"
aria-hidden="true"
/>
{feature}
</li>
))}
</ul>
</div>
))}
</div>
</div>
</div>
);
}

View File

@ -0,0 +1,83 @@
import React from "react";
import {
CircleStackIcon,
CloudArrowUpIcon,
CursorArrowRaysIcon,
HomeIcon,
LockClosedIcon,
RocketLaunchIcon,
ServerIcon,
} from "@heroicons/react/20/solid";
import { useColorMode } from "@docusaurus/theme-common";
const features = [
{
name: "Data security and privacy.",
description:
"Lorem ipsum, dolor sit amet consectetur adipisicing elit. Maiores impedit perferendis suscipit eaque, iste dolor cupiditate blanditiis ratione.",
icon: CloudArrowUpIcon,
},
{
name: "Always accessible.",
description:
"Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui lorem cupidatat commodo.",
icon: LockClosedIcon,
},
{
name: "Audit & compliance.",
description: "Coming soon.",
icon: ServerIcon,
},
];
export default function sectionTwo() {
const { colorMode } = useColorMode();
return (
<div className="overflow-hidden bg-white dark:bg-gray-900 py-24 sm:py-32">
<div className="mx-auto max-w-7xl px-6 lg:px-8">
<div className="mx-auto grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:mx-0 lg:max-w-none lg:grid-cols-2">
<div className="lg:pr-8 lg:pt-4">
<div className="lg:max-w-lg">
<h2 className="text-base font-semibold leading-7 text-indigo-600 dark:text-indigo-400">
Jan gives you
</h2>
<p className="mt-2 text-3xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-4xl">
AI that you control
</p>
<p className="mt-6 text-lg leading-8 text-gray-600 dark:text-gray-300">
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Maiores impedit perferendis suscipit eaque, iste dolor
cupiditate blanditiis ratione.
</p>
<dl className="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 dark:text-gray-300 lg:max-w-none">
{features.map((feature) => (
<div key={feature.name} className="relative pl-9">
<dt className="inline font-semibold text-gray-900 dark:text-white">
<feature.icon
className="absolute left-1 top-1 h-5 w-5 text-indigo-600 dark:text-indigo-400"
aria-hidden="true"
/>
{feature.name}
</dt>{" "}
<dd className="inline">{feature.description}</dd>
</div>
))}
</dl>
</div>
</div>
<img
src={
colorMode === "dark"
? // TODO replace with darkmode image
require("@site/static/img/desktop-model-settings.png").default
: require("@site/static/img/desktop-model-settings.png").default
}
alt="Product screenshot"
className="w-[48rem] max-w-none rounded-xl shadow-xl ring-1 ring-gray-400/10 sm:w-[57rem] md:-ml-4 lg:-ml-0"
width={2432}
/>
</div>
</div>
</div>
);
}

View File

@ -1,64 +0,0 @@
import React from 'react';
import clsx from 'clsx';
import styles from './styles.module.css';
const FeatureList = [
{
title: 'Easy to Use',
Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
description: (
<>
Docusaurus was designed from the ground up to be easily installed and
used to get your website up and running quickly.
</>
),
},
{
title: 'Focus on What Matters',
Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
description: (
<>
Docusaurus lets you focus on your docs, and we&apos;ll do the chores. Go
ahead and move your docs into the <code>docs</code> directory.
</>
),
},
{
title: 'Powered by React',
Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
description: (
<>
Extend or customize your website layout by reusing React. Docusaurus can
be extended while reusing the same header and footer.
</>
),
},
];
function Feature({Svg, title, description}) {
return (
<div className={clsx('col col--4')}>
<div className="text--center">
<Svg className={styles.featureSvg} role="img" />
</div>
<div className="text--center padding-horiz--md">
<h3>{title}</h3>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures() {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}

View File

@ -1,10 +1,16 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
/* You can override the default Infima variables here.
Full list of Infima variables: https://github.com/facebook/docusaurus/issues/3955#issuecomment-1521944593
*/
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
@ -18,7 +24,7 @@
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
[data-theme='dark'] {
[data-theme="dark"] {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: #21af90;
--ifm-color-primary-darker: #1fa588;
@ -26,5 +32,6 @@
--ifm-color-primary-light: #29d5b0;
--ifm-color-primary-lighter: #32d8b4;
--ifm-color-primary-lightest: #4fddbf;
--ifm-navbar-background-color: rgba(15, 23, 42);
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
}

32
docs/src/pages/index.js Normal file
View File

@ -0,0 +1,32 @@
import React from "react";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Layout from "@theme/Layout";
import {
HomepageHero,
HomepageBanner,
HomepageSectionOne,
HomepageSectionTwo,
HomepageSectionThree,
HomepageDownloads,
} from "@site/src/components/Homepage";
import styles from "./index.module.css";
export default function Home() {
const { siteConfig } = useDocusaurusContext();
return (
<Layout
title={`${siteConfig.tagline}`}
description="Description will go into a meta tag in <head />"
>
{/* <HomepageBanner /> */}
<main className={styles.main}>
<HomepageHero />
<HomepageSectionOne />
<HomepageSectionTwo />
{/* <HomepageSectionThree />
<HomepageDownloads /> */}
</main>
</Layout>
);
}

View File

@ -3,7 +3,7 @@
* and scoped locally.
*/
.heroBanner {
/* .heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
@ -20,4 +20,4 @@
display: flex;
align-items: center;
justify-content: center;
}
} */

View File

@ -1,7 +0,0 @@
---
title: Markdown page example
---
# Markdown page example
You don't need React to write simple standalone pages.

View File

@ -1,41 +0,0 @@
import React from 'react';
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Layout from '@theme/Layout';
import HomepageFeatures from '@site/src/components/HomepageFeatures';
import styles from './index.module.css';
function HomepageHeader() {
const { siteConfig } = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="container">
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/quickstart/overview">
Quickstart - 5min
</Link>
</div>
</div>
</header>
);
}
export default function Home() {
const { siteConfig } = useDocusaurusContext();
return (
<Layout
title={`Welcome`}
description="Developer documentation for Jan.ai, a self-hosted AI inference platform">
<HomepageHeader />
<main>
<HomepageFeatures />
</main>
</Layout>
);
}

BIN
docs/static/img/apple-logo-white.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

BIN
docs/static/img/desktop-llm-chat.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

BIN
docs/static/img/linux-logo-white.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
docs/static/img/windows-logo-white.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

13
docs/tailwind.config.js Normal file
View File

@ -0,0 +1,13 @@
// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
corePlugins: {
preflight: false, // disable Tailwind's reset
},
content: ["./src/**/*.{js,jsx,ts,tsx}"], // Only affects code in /src; can also add ./docs/**/*.mdx to use tailwind in docs
darkMode: ["class", '[data-theme="dark"]'], // hooks into docusaurus' dark mode settings
theme: {
extend: {},
},
plugins: [],
};

View File

@ -138,6 +138,11 @@
"@algolia/logger-common" "4.19.1"
"@algolia/requester-common" "4.19.1"
"@alloc/quick-lru@^5.2.0":
version "5.2.0"
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
"@ampproject/remapping@^2.2.0":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
@ -1710,6 +1715,18 @@
dependencies:
"@hapi/hoek" "^9.0.0"
"@headlessui/react@^1.7.17":
version "1.7.17"
resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.17.tgz#a0ec23af21b527c030967245fd99776aa7352bc6"
integrity sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==
dependencies:
client-only "^0.0.1"
"@heroicons/react@^2.0.18":
version "2.0.18"
resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.18.tgz#f80301907c243df03c7e9fd76c0286e95361f7c1"
integrity sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw==
"@jest/schemas@^29.6.3":
version "29.6.3"
resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
@ -2628,6 +2645,11 @@ ansi-styles@^6.1.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
any-promise@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@ -2636,7 +2658,7 @@ anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
arg@^5.0.0:
arg@^5.0.0, arg@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
@ -2690,6 +2712,18 @@ autoprefixer@^10.4.12, autoprefixer@^10.4.7:
picocolors "^1.0.0"
postcss-value-parser "^4.2.0"
autoprefixer@^10.4.16:
version "10.4.16"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8"
integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==
dependencies:
browserslist "^4.21.10"
caniuse-lite "^1.0.30001538"
fraction.js "^4.3.6"
normalize-range "^0.1.2"
picocolors "^1.0.0"
postcss-value-parser "^4.2.0"
axios@^0.25.0:
version "0.25.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a"
@ -2953,7 +2987,7 @@ camel-case@^4.1.2:
pascal-case "^3.1.2"
tslib "^2.0.3"
camelcase-css@2.0.1:
camelcase-css@2.0.1, camelcase-css@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
@ -2983,6 +3017,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001527.tgz#813826554828245ccee776c850566dce12bdeaba"
integrity sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ==
caniuse-lite@^1.0.30001538:
version "1.0.30001538"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz#9dbc6b9af1ff06b5eb12350c2012b3af56744f3f"
integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==
ccount@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
@ -3111,6 +3150,11 @@ cli-table3@^0.6.2:
optionalDependencies:
"@colors/colors" "1.5.0"
client-only@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@ -3209,6 +3253,11 @@ commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
commander@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
@ -3704,6 +3753,11 @@ detect-port@^1.3.0:
address "^1.0.1"
debug "4"
didyoumean@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@ -3711,6 +3765,11 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
dlv@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
dns-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
@ -4083,7 +4142,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0:
fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0:
version "3.3.1"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
@ -4264,7 +4323,7 @@ forwarded@0.2.0:
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
fraction.js@^4.2.0:
fraction.js@^4.2.0, fraction.js@^4.3.6:
version "4.3.6"
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d"
integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==
@ -4369,7 +4428,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2:
dependencies:
is-glob "^4.0.1"
glob-parent@^6.0.1:
glob-parent@^6.0.1, glob-parent@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
@ -4381,6 +4440,18 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
glob@7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.6:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@ -5229,7 +5300,7 @@ leven@^3.1.0:
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
lilconfig@^2.0.3:
lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
@ -5615,6 +5686,15 @@ multicast-dns@^7.2.5:
dns-packet "^5.2.2"
thunky "^1.0.2"
mz@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
dependencies:
any-promise "^1.0.0"
object-assign "^4.0.1"
thenify-all "^1.0.0"
nanoid@^3.3.6:
version "3.3.6"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
@ -5769,11 +5849,16 @@ oas-validator@^5.0.8:
should "^13.2.1"
yaml "^1.10.0"
object-assign@^4.1.0, object-assign@^4.1.1:
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
object-hash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
object-inspect@^1.9.0:
version "1.12.3"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
@ -6069,6 +6154,16 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
pirates@^4.0.1:
version "4.0.6"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
pkg-dir@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
@ -6148,6 +6243,30 @@ postcss-discard-unused@^5.1.0:
dependencies:
postcss-selector-parser "^6.0.5"
postcss-import@^15.1.0:
version "15.1.0"
resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
dependencies:
postcss-value-parser "^4.0.0"
read-cache "^1.0.0"
resolve "^1.1.7"
postcss-js@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
dependencies:
camelcase-css "^2.0.1"
postcss-load-config@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd"
integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==
dependencies:
lilconfig "^2.0.5"
yaml "^2.1.1"
postcss-loader@^7.0.0:
version "7.3.3"
resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.3.tgz#6da03e71a918ef49df1bb4be4c80401df8e249dd"
@ -6243,6 +6362,13 @@ postcss-modules-values@^4.0.0:
dependencies:
icss-utils "^5.0.0"
postcss-nested@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==
dependencies:
postcss-selector-parser "^6.0.11"
postcss-normalize-charset@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed"
@ -6336,7 +6462,7 @@ postcss-reduce-transforms@^5.1.0:
dependencies:
postcss-value-parser "^4.2.0"
postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9:
postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9:
version "6.0.13"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
@ -6366,7 +6492,7 @@ postcss-unique-selectors@^5.1.1:
dependencies:
postcss-selector-parser "^6.0.5"
postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
@ -6385,6 +6511,15 @@ postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21:
picocolors "^1.0.0"
source-map-js "^1.0.2"
postcss@^8.4.23, postcss@^8.4.30:
version "8.4.30"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7"
integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==
dependencies:
nanoid "^3.3.6"
picocolors "^1.0.0"
source-map-js "^1.0.2"
prepend-http@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
@ -6718,6 +6853,13 @@ react@^17.0.2:
loose-envify "^1.1.0"
object-assign "^4.1.1"
read-cache@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
dependencies:
pify "^2.3.0"
readable-stream@^2.0.1, readable-stream@~2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
@ -7022,6 +7164,15 @@ resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
resolve@^1.1.7, resolve@^1.22.2:
version "1.22.6"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362"
integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==
dependencies:
is-core-module "^2.13.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
responselike@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
@ -7618,6 +7769,19 @@ stylehacks@^5.1.1:
browserslist "^4.21.4"
postcss-selector-parser "^6.0.4"
sucrase@^3.32.0:
version "3.34.0"
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f"
integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==
dependencies:
"@jridgewell/gen-mapping" "^0.3.2"
commander "^4.0.0"
glob "7.1.6"
lines-and-columns "^1.1.6"
mz "^2.7.0"
pirates "^4.0.1"
ts-interface-checker "^0.1.9"
supports-color@^5.3.0, supports-color@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@ -7679,6 +7843,34 @@ swagger2openapi@^7.0.6:
yaml "^1.10.0"
yargs "^17.0.1"
tailwindcss@^3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf"
integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==
dependencies:
"@alloc/quick-lru" "^5.2.0"
arg "^5.0.2"
chokidar "^3.5.3"
didyoumean "^1.2.2"
dlv "^1.1.3"
fast-glob "^3.2.12"
glob-parent "^6.0.2"
is-glob "^4.0.3"
jiti "^1.18.2"
lilconfig "^2.1.0"
micromatch "^4.0.5"
normalize-path "^3.0.0"
object-hash "^3.0.0"
picocolors "^1.0.0"
postcss "^8.4.23"
postcss-import "^15.1.0"
postcss-js "^4.0.1"
postcss-load-config "^4.0.1"
postcss-nested "^6.0.1"
postcss-selector-parser "^6.0.11"
resolve "^1.22.2"
sucrase "^3.32.0"
tapable@^1.0.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
@ -7715,6 +7907,20 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
dependencies:
thenify ">= 3.1.0 < 4"
"thenify@>= 3.1.0 < 4":
version "3.3.1"
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
dependencies:
any-promise "^1.0.0"
through2@^2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
@ -7785,6 +7991,11 @@ trough@^1.0.0:
resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
ts-interface-checker@^0.1.9:
version "0.1.13"
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
@ -8402,6 +8613,11 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
yaml@^2.1.1:
version "2.3.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144"
integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==
yargs-parser@^20.2.2:
version "20.2.9"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"