chore: scaffold teh basics
This commit is contained in:
parent
cd8f9847c9
commit
343e2e1e19
@ -47,9 +47,13 @@ export default function HomepageHero() {
|
|||||||
Run your own AI
|
Run your own AI
|
||||||
</h1>
|
</h1>
|
||||||
<p className="mt-6 text-lg leading-8 text-gray-600 dark:text-gray-300">
|
<p className="mt-6 text-lg leading-8 text-gray-600 dark:text-gray-300">
|
||||||
Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui
|
Jan lets you run AI on your own hardware. 1-click to install the
|
||||||
lorem cupidatat commodo. Elit sunt amet fugiat veniam occaecat
|
latest open-source models. Monitor and manage software-hardware
|
||||||
fugiat aliqua.
|
performance.
|
||||||
|
<br></br>
|
||||||
|
Jan is
|
||||||
|
<strong> free and open core</strong> with a Sustainable Use
|
||||||
|
License.
|
||||||
</p>
|
</p>
|
||||||
<div className="mt-10 flex items-center justify-center gap-x-6">
|
<div className="mt-10 flex items-center justify-center gap-x-6">
|
||||||
{/* TODO: handle mobile model download app instead */}
|
{/* TODO: handle mobile model download app instead */}
|
||||||
@ -66,9 +70,9 @@ export default function HomepageHero() {
|
|||||||
<img
|
<img
|
||||||
src={
|
src={
|
||||||
colorMode === "dark"
|
colorMode === "dark"
|
||||||
? require("@site/static/img/desktop-screenshot-dark.png")
|
? // TODO replace with darkmode image
|
||||||
.default
|
require("@site/static/img/desktop-llm-chat.png").default
|
||||||
: require("@site/static/img/desktop-screenshot.png").default
|
: require("@site/static/img/desktop-llm-chat.png").default
|
||||||
}
|
}
|
||||||
alt="App screenshot"
|
alt="App screenshot"
|
||||||
width={2432}
|
width={2432}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import {
|
|||||||
RocketLaunchIcon,
|
RocketLaunchIcon,
|
||||||
ServerIcon,
|
ServerIcon,
|
||||||
} from "@heroicons/react/20/solid";
|
} from "@heroicons/react/20/solid";
|
||||||
|
import { useColorMode } from "@docusaurus/theme-common";
|
||||||
|
|
||||||
const features = [
|
const features = [
|
||||||
{
|
{
|
||||||
@ -31,6 +32,7 @@ const features = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export default function HomepageSectionOne() {
|
export default function HomepageSectionOne() {
|
||||||
|
const { colorMode } = useColorMode();
|
||||||
return (
|
return (
|
||||||
<div className="overflow-hidden bg-white dark:bg-gray-900 py-24 sm:py-32">
|
<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 max-w-7xl px-6 lg:px-8">
|
||||||
@ -64,7 +66,14 @@ export default function HomepageSectionOne() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex items-start justify-end lg:order-first">
|
<div className="flex items-start justify-end lg:order-first">
|
||||||
<img
|
<img
|
||||||
src="https://tailwindui.com/img/component-images/dark-project-app-screenshot.png"
|
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"
|
alt="Product screenshot"
|
||||||
className="w-[48rem] max-w-none rounded-xl shadow-xl ring-1 ring-gray-400/10 sm:w-[57rem]"
|
className="w-[48rem] max-w-none rounded-xl shadow-xl ring-1 ring-gray-400/10 sm:w-[57rem]"
|
||||||
width={2432}
|
width={2432}
|
||||||
|
|||||||
@ -1,79 +1,172 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { RadioGroup } from "@headlessui/react";
|
||||||
|
import { CheckIcon } from "@heroicons/react/20/solid";
|
||||||
|
|
||||||
const people = [
|
const frequencies = [
|
||||||
|
{ value: "monthly", label: "Monthly", priceSuffix: "/1Mn tokens" },
|
||||||
|
{ value: "annually", label: "Annually", priceSuffix: "/year" },
|
||||||
|
];
|
||||||
|
const tiers = [
|
||||||
{
|
{
|
||||||
name: "Lindsay Walton",
|
name: "Pay per API call",
|
||||||
title: "Front-end Developer",
|
id: "tier-freelancer",
|
||||||
email: "lindsay.walton@example.com",
|
href: "#",
|
||||||
role: "Member",
|
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,
|
||||||
},
|
},
|
||||||
// More people...
|
|
||||||
];
|
];
|
||||||
|
|
||||||
export default function HomepageSectionThree() {
|
function classNames(...classes) {
|
||||||
|
return classes.filter(Boolean).join(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Example() {
|
||||||
|
const [frequency, setFrequency] = useState(frequencies[0]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="bg-white dark:bg-gray-900 py-12 sm:py-16">
|
<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-7xl px-6 lg:px-8">
|
||||||
<div className="mx-auto max-w-2xl lg:text-center">
|
<div className="mx-auto max-w-4xl text-center">
|
||||||
<h2 className="text-base font-semibold leading-7 text-indigo-600 dark:text-indigo-400">
|
<h2 className="text-base font-semibold leading-7 text-indigo-600">
|
||||||
Run AI on any OS
|
AI on your own hardware means
|
||||||
</h2>
|
</h2>
|
||||||
<p className="mt-2 text-3xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-4xl">
|
<p className="mt-2 text-4xl font-bold tracking-tight text-gray-900 sm:text-5xl">
|
||||||
Unlimited Use
|
Unlimited Use
|
||||||
</p>
|
</p>
|
||||||
<p className="mt-6 text-lg leading-8 text-gray-600 dark:text-gray-300">
|
|
||||||
No uncontrolled cloud spending. No hidden fees. No limits.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
{/* Cost comparitor */}
|
<p className="mx-auto mt-6 max-w-2xl text-center text-lg leading-8 text-gray-600">
|
||||||
<div className="px-4 sm:px-6 lg:px-8">
|
No uncontrolled cloud spending. No hidden fees. No limits.
|
||||||
<div className="sm:flex sm:items-center">
|
</p>
|
||||||
<div className="mt-8 flow-root">
|
{/* <div className="mt-16 flex justify-center">
|
||||||
<div className="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
|
<RadioGroup
|
||||||
<div className="inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8">
|
value={frequency}
|
||||||
<table className="min-w-full divide-y divide-gray-300">
|
onChange={setFrequency}
|
||||||
<thead>
|
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"
|
||||||
<tr>
|
>
|
||||||
<th
|
<RadioGroup.Label className="sr-only">
|
||||||
scope="col"
|
Payment frequency
|
||||||
className="py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-0"
|
</RadioGroup.Label>
|
||||||
>
|
{frequencies.map((option) => (
|
||||||
Name
|
<RadioGroup.Option
|
||||||
</th>
|
key={option.value}
|
||||||
<th
|
value={option}
|
||||||
scope="col"
|
className={({ checked }) =>
|
||||||
className="px-3 py-3.5 text-left text-sm font-semibold text-gray-900"
|
classNames(
|
||||||
>
|
checked ? "bg-indigo-600 text-white" : "text-gray-500",
|
||||||
Title
|
"cursor-pointer rounded-full px-2.5 py-1"
|
||||||
</th>
|
)
|
||||||
<th
|
}
|
||||||
scope="col"
|
>
|
||||||
className="px-3 py-3.5 text-left text-sm font-semibold text-gray-900"
|
<span>{option.label}</span>
|
||||||
>
|
</RadioGroup.Option>
|
||||||
Email
|
))}
|
||||||
</th>
|
</RadioGroup>
|
||||||
</tr>
|
</div> */}
|
||||||
</thead>
|
<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">
|
||||||
<tbody className="divide-y divide-gray-200">
|
{tiers.map((tier) => (
|
||||||
{people.map((person) => (
|
<div
|
||||||
<tr key={person.email}>
|
key={tier.id}
|
||||||
<td className="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900 sm:pl-0">
|
className={classNames(
|
||||||
{person.name}
|
tier.mostPopular
|
||||||
</td>
|
? "ring-2 ring-indigo-600"
|
||||||
<td className="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
|
: "ring-1 ring-gray-200",
|
||||||
{person.title}
|
"rounded-3xl p-8 xl:p-10"
|
||||||
</td>
|
)}
|
||||||
<td className="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
|
>
|
||||||
{person.email}
|
<div className="flex items-center justify-between gap-x-4">
|
||||||
</td>
|
<h3
|
||||||
</tr>
|
id={tier.id}
|
||||||
))}
|
className={classNames(
|
||||||
</tbody>
|
tier.mostPopular ? "text-indigo-600" : "text-gray-900",
|
||||||
</table>
|
"text-lg font-semibold leading-8"
|
||||||
</div>
|
)}
|
||||||
|
>
|
||||||
|
{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>
|
</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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import {
|
|||||||
RocketLaunchIcon,
|
RocketLaunchIcon,
|
||||||
ServerIcon,
|
ServerIcon,
|
||||||
} from "@heroicons/react/20/solid";
|
} from "@heroicons/react/20/solid";
|
||||||
|
import { useColorMode } from "@docusaurus/theme-common";
|
||||||
|
|
||||||
const features = [
|
const features = [
|
||||||
{
|
{
|
||||||
@ -30,6 +31,7 @@ const features = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export default function sectionTwo() {
|
export default function sectionTwo() {
|
||||||
|
const { colorMode } = useColorMode();
|
||||||
return (
|
return (
|
||||||
<div className="overflow-hidden bg-white dark:bg-gray-900 py-24 sm:py-32">
|
<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 max-w-7xl px-6 lg:px-8">
|
||||||
@ -64,7 +66,12 @@ export default function sectionTwo() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<img
|
<img
|
||||||
src="https://tailwindui.com/img/component-images/dark-project-app-screenshot.png"
|
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"
|
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"
|
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}
|
width={2432}
|
||||||
|
|||||||
@ -8,7 +8,9 @@
|
|||||||
* work well for content-centric websites.
|
* 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 {
|
:root {
|
||||||
--ifm-color-primary: #2e8555;
|
--ifm-color-primary: #2e8555;
|
||||||
--ifm-color-primary-dark: #29784c;
|
--ifm-color-primary-dark: #29784c;
|
||||||
@ -30,5 +32,6 @@
|
|||||||
--ifm-color-primary-light: #29d5b0;
|
--ifm-color-primary-light: #29d5b0;
|
||||||
--ifm-color-primary-lighter: #32d8b4;
|
--ifm-color-primary-lighter: #32d8b4;
|
||||||
--ifm-color-primary-lightest: #4fddbf;
|
--ifm-color-primary-lightest: #4fddbf;
|
||||||
|
--ifm-navbar-background-color: rgba(15, 23, 42);
|
||||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,8 +24,8 @@ export default function Home() {
|
|||||||
<HomepageHero />
|
<HomepageHero />
|
||||||
<HomepageSectionOne />
|
<HomepageSectionOne />
|
||||||
<HomepageSectionTwo />
|
<HomepageSectionTwo />
|
||||||
<HomepageSectionThree />
|
{/* <HomepageSectionThree />
|
||||||
<HomepageDownloads />
|
<HomepageDownloads /> */}
|
||||||
</main>
|
</main>
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* and scoped locally.
|
* and scoped locally.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.heroBanner {
|
/* .heroBanner {
|
||||||
padding: 4rem 0;
|
padding: 4rem 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -20,4 +20,4 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
} */
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 389 KiB After Width: | Height: | Size: 389 KiB |
|
Before Width: | Height: | Size: 379 KiB After Width: | Height: | Size: 379 KiB |
BIN
docs/static/img/desktop-llm-chat.png
vendored
Normal file
BIN
docs/static/img/desktop-llm-chat.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 619 KiB |
BIN
docs/static/img/desktop-model-settings.png
vendored
Normal file
BIN
docs/static/img/desktop-model-settings.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 257 KiB |
Loading…
x
Reference in New Issue
Block a user