diff --git a/docs/src/containers/Banner/index.js b/docs/src/containers/Banner/index.js index 922be62f7..33061de0f 100644 --- a/docs/src/containers/Banner/index.js +++ b/docs/src/containers/Banner/index.js @@ -27,7 +27,7 @@ export default function AnnoncementBanner() { return (
-
+
-
- -
-
Mac
-
- {systems - .filter((x) => x.name.includes("Mac")) - .map((system) => ( - - - {system.name} - - ))} -
-
-
-
Linux
- {systems - .filter((x) => x.name.includes("Linux")) - .map((system) => ( - - - {system.name} - - ))} +
+ + Download for PC + +
+ 🚧 + + Warning: Jan is in the process of being built. Expect bugs! +
- - {/* {systems.map((system) => ( - - Logo - {system.name} - - ))} */} +
+ {systems.map((system, i) => ( + + + {system.name} + + ))} +
); } diff --git a/docs/src/containers/Footer/index.js b/docs/src/containers/Footer/index.js index f4b6bb006..d2fde6b8a 100644 --- a/docs/src/containers/Footer/index.js +++ b/docs/src/containers/Footer/index.js @@ -1,5 +1,23 @@ import React from "react"; +import { AiOutlineGithub, AiOutlineTwitter } from "react-icons/ai"; +import { BiLogoDiscordAlt } from "react-icons/bi"; + +const socials = [ + { + icon: , + href: "https://twitter.com/janhq_", + }, + { + icon: , + href: "https://discord.com/invite/FTk2MvZwJH", + }, + { + icon: , + href: "https://github.com/janhq/jan", + }, +]; + const menus = [ { name: "For Developers", @@ -72,7 +90,7 @@ export default function Footer() {
- Jan Logo + Jan Logo
Jan
@@ -81,6 +99,18 @@ export default function Footer() {
 alternative to ChatGPT.

+ +
+
+ {socials.map((social, i) => { + return ( + + {social.icon} + + ); + })} +
+
{menus.map((menu, i) => { diff --git a/docs/src/containers/SocialButton/index.js b/docs/src/containers/SocialButton/index.js index 496ddeff1..8427f52ca 100644 --- a/docs/src/containers/SocialButton/index.js +++ b/docs/src/containers/SocialButton/index.js @@ -7,7 +7,7 @@ export default function SocialButton() { @@ -17,7 +17,7 @@ export default function SocialButton() { diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index 0186fcd10..9a852af9d 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -10,8 +10,17 @@ import ThemedImage from "@theme/ThemedImage"; import SocialButton from "@site/src/containers/SocialButton"; +import { IoArrowDown } from "react-icons/io5"; + export default function Home() { const { siteConfig } = useDocusaurusContext(); + + const handleAnchorLink = () => { + document + .getElementById("download-section") + .scrollIntoView({ behavior: "smooth" }); + }; + return ( <> @@ -20,24 +29,58 @@ export default function Home() { description="Jan is a ChatGPT-alternative that runs on your own computer, with a local API server." >
-
-
-

- Bringing AI to
your Desktop +
+
+ Element blur +
+ Jan Logo + + Meet Jan + +
+

+ Bringing AI to
your Desktop{" "} + + Element hero heading +

-

- Open-source ChatGPT alternative that runs 100% offline on your +

+ Open-source ChatGPT alternative that runs{" "} +
100% offline on your computer.

- +
handleAnchorLink()} + className="inline-flex px-4 py-3 rounded-lg text-lg font-semibold cursor-pointer justify-center items-center space-x-2 dark:bg-white dark:text-black bg-black text-white dark:hover:text-black hover:text-white scroll-smooth" + > + Download Jan for PC +
+
+ +
handleAnchorLink()} + className="hidden lg:inline-block cursor-pointer" + > +
+

Find out more

+ +
-
-
+
+
- {/*
-
*/} - {/*
+
-
*/} +
- {/*
-
-

Explore Jan

-
- -
-
-
-

Take Control

-

- Jan runs 100% on your own machine, privately, predictably - and even in offline, with no surprise bills -

-
+
+
+
Full Control Illustration -
- -
-
-

100% Open Source

-

- Say goodbye to black boxes. Jan has well-documented code and - stores data in open-format files that you can inspect, - verify and tinker with. -

-
- Full Control Illustration -
- -
-
-

Extensions

-

- Jan has a powerful Extensions API inspired by VSCode. In - fact, most of Jan's core services are built as extensions. -

-
- Extentions Illustration -
-
-
*/} - - {/*
-
-

No-fuss Compatibility

-

- Jan's API aims to be a drop-in replacement for OpenAI's REST - API,
with a local server that runs at port{" "} - - 1337 - -

-
-
-

Endpoints

-
-
-
-

/chat/completions

-
-
- - Partial - -
-
-
-
-

/models

-
- - Complete - +
+ -
-
-
-

/threads

-
- - Partial - -
-
-
-
-
-

/messages

-
- - Partial - -
-
-
-
-
-

/runs

-
- - Partial - +
+

100% open source

+

+ Our core team believes that AI should be open source, and + Jan is built in public. +

+
+
-
*/} +
+ +
+
+
+
+
+

Desktop App

+

+ + 10x productivity + {" "} + with customizable AI
{" "} + assistants, global hotkeys, and in-line AI. +

+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+

Mobile App

+ + Coming Soon + +
+

+ Take your AI assistants on the go.{" "} +
Seamless integration + into your  + + mobile
workflows +
+   with elegant features. +

+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ Icon Offline + Icon Offline + Icon Offline +
+
+
+ Offline and Local First +
+

+ Conversations, preferences, and model usage stay on{" "} +
your computer—secure, + exportable, and can be deleted at any time. +

+ +
+
+
+
+ OpenAI Compatible +
+

+ Jan provides an OpenAI-equivalent API{" "} +
server at  + localhost:  + + 1337 + {" "} + that can be used as a drop-in replacement with + compatible apps. +

+ +
+
+
+

+ /chats/completions +

+
+
+
+
+

+ Local server and API +

+
+
+
+
+

+ Assistants framework + + Coming Soon + +

+
+
+
+
+
+
+
+ Element status +
+
+
+
+
+
+
+

diff --git a/docs/src/styles/components/base.scss b/docs/src/styles/components/base.scss index a9f3b800a..b99ff21c2 100644 --- a/docs/src/styles/components/base.scss +++ b/docs/src/styles/components/base.scss @@ -1,5 +1,4 @@ @layer base { - html[data-theme="light"] { --custom-radial-blur: #e1e7fd; --ifm-background-color: #fff; @@ -53,12 +52,12 @@ display: inline-block; padding: 2px 8px; margin: 0; - background-color: #228B22; + background-color: #228b22; color: #000; font-size: 13px; vertical-align: middle; line-height: 1.6; border-radius: 4px; font-weight: var(--ifm-font-weight-bold); -} + } } diff --git a/docs/src/styles/components/card.scss b/docs/src/styles/components/card.scss index 853088a33..0bd29b3c4 100644 --- a/docs/src/styles/components/card.scss +++ b/docs/src/styles/components/card.scss @@ -1,17 +1,33 @@ @layer components { + .card-gradient { + background: radial-gradient( + 58.83% 95.12% at 62.37% 97.91%, + rgba(238, 203, 255, 0.59) 0%, + rgba(255, 255, 255, 0) 100% + ), + linear-gradient( + 155deg, + rgba(50, 107, 255, 0.8) 68.16%, + rgba(194, 226, 255, 0.8) 94.33% + ); + + backdrop-filter: blur(7.174633026123047px); + } + .card-link-bg { - background: linear-gradient(180deg, #fff 0%, #fff 100%); + background: linear-gradient(180deg, #fafafa 0%, #ededed 100%); box-shadow: - 0px 10px 10px -5px rgba(0, 0, 0, 0.1), - 0px 20px 25px -5px rgba(0, 0, 0, 0.1), - 0px 1px 2px 0px #f1f1f1 inset; + 0px 4px 12px 0px rgba(0, 0, 0, 0.12), + 0px -1px 1px 0px rgba(0, 0, 0, 0.1) inset, + 0px 1px 1px 0px #fff inset; } .card-link-bg-dark { - background: linear-gradient(180deg, #101118 0%, #101118 100%); + background: var(--color-bg-elevated, #27272a); box-shadow: - 0px 10px 10px -5px rgba(0, 0, 0, 0.3), - 0px 1px 2px 0px #525154 inset; + 0px 4px 12px 0px rgba(0, 0, 0, 0.12), + 0px -1px 1px 0px rgba(0, 0, 0, 0.1) inset, + 0px 1px 1px 0px #4c4c4c inset; } .card { @apply rounded-xl border bg-gray-50 border-gray-50 dark:border-[#202231] dark:bg-[#111217]/50; diff --git a/docs/src/styles/tweaks/navbar.scss b/docs/src/styles/tweaks/navbar.scss index 3bdc5ec7a..789c2f48a 100644 --- a/docs/src/styles/tweaks/navbar.scss +++ b/docs/src/styles/tweaks/navbar.scss @@ -2,7 +2,7 @@ @apply bg-transparent py-0 shadow-none px-0; &__inner { - @apply border border-gray-200 dark:border-gray-800 bg-[#E4E4E7]/20 dark:bg-[#09090B]/50 backdrop-blur-md flex items-center h-14 px-8 relative; + @apply border border-gray-200 dark:border-gray-800 bg-white/80 dark:bg-[#09090B]/50 backdrop-blur-md flex items-center h-14 px-4 lg:px-8 relative; } &__logo { diff --git a/docs/src/styles/tweaks/sidebar.scss b/docs/src/styles/tweaks/sidebar.scss index b849d67fb..5508a3bfa 100644 --- a/docs/src/styles/tweaks/sidebar.scss +++ b/docs/src/styles/tweaks/sidebar.scss @@ -7,7 +7,11 @@ } [class*="sidebar_"] { - padding-top: 0 !important; + padding-top: 0px !important; +} + +.navbar-sidebar__back { + padding-top: 20px !important; } [class*="sidebarViewport_"] { diff --git a/docs/static/img/homepage/app-base-screen-dark.png b/docs/static/img/homepage/app-base-screen-dark.png index b9421e846..88d65f87e 100644 Binary files a/docs/static/img/homepage/app-base-screen-dark.png and b/docs/static/img/homepage/app-base-screen-dark.png differ diff --git a/docs/static/img/homepage/app-base-screen-light.png b/docs/static/img/homepage/app-base-screen-light.png index c8d35b42e..5e8105a65 100644 Binary files a/docs/static/img/homepage/app-base-screen-light.png and b/docs/static/img/homepage/app-base-screen-light.png differ diff --git a/docs/static/img/homepage/desktop-app-dark.png b/docs/static/img/homepage/desktop-app-dark.png new file mode 100644 index 000000000..961159276 Binary files /dev/null and b/docs/static/img/homepage/desktop-app-dark.png differ diff --git a/docs/static/img/homepage/desktop-app-light.png b/docs/static/img/homepage/desktop-app-light.png new file mode 100644 index 000000000..03f2a7c90 Binary files /dev/null and b/docs/static/img/homepage/desktop-app-light.png differ diff --git a/docs/static/img/homepage/element-bg-open-source.png b/docs/static/img/homepage/element-bg-open-source.png new file mode 100644 index 000000000..9314290e0 Binary files /dev/null and b/docs/static/img/homepage/element-bg-open-source.png differ diff --git a/docs/static/img/homepage/element-hero-blur.png b/docs/static/img/homepage/element-hero-blur.png new file mode 100644 index 000000000..5df882fea Binary files /dev/null and b/docs/static/img/homepage/element-hero-blur.png differ diff --git a/docs/static/img/homepage/element-hero-heading.png b/docs/static/img/homepage/element-hero-heading.png new file mode 100644 index 000000000..672c8ec6f Binary files /dev/null and b/docs/static/img/homepage/element-hero-heading.png differ diff --git a/docs/static/img/homepage/ic-folder.png b/docs/static/img/homepage/ic-folder.png new file mode 100644 index 000000000..dbf54acf9 Binary files /dev/null and b/docs/static/img/homepage/ic-folder.png differ diff --git a/docs/static/img/homepage/ic-offline.png b/docs/static/img/homepage/ic-offline.png new file mode 100644 index 000000000..85c57417d Binary files /dev/null and b/docs/static/img/homepage/ic-offline.png differ diff --git a/docs/static/img/homepage/ic-private.png b/docs/static/img/homepage/ic-private.png new file mode 100644 index 000000000..bbebdd9d2 Binary files /dev/null and b/docs/static/img/homepage/ic-private.png differ diff --git a/docs/static/img/homepage/mobile-app-dark.png b/docs/static/img/homepage/mobile-app-dark.png new file mode 100644 index 000000000..3d1b1ce20 Binary files /dev/null and b/docs/static/img/homepage/mobile-app-dark.png differ diff --git a/docs/static/img/homepage/mobile-app-light.png b/docs/static/img/homepage/mobile-app-light.png new file mode 100644 index 000000000..30001b31c Binary files /dev/null and b/docs/static/img/homepage/mobile-app-light.png differ diff --git a/docs/static/img/homepage/roadmap.png b/docs/static/img/homepage/roadmap.png new file mode 100644 index 000000000..3dbed37b4 Binary files /dev/null and b/docs/static/img/homepage/roadmap.png differ diff --git a/docs/static/img/homepage/status.png b/docs/static/img/homepage/status.png new file mode 100644 index 000000000..7d618b0b1 Binary files /dev/null and b/docs/static/img/homepage/status.png differ diff --git a/docs/tailwind.config.js b/docs/tailwind.config.js index 6cf90b217..7ef39234d 100644 --- a/docs/tailwind.config.js +++ b/docs/tailwind.config.js @@ -4,6 +4,42 @@ module.exports = { content: ["./src/**/*.{js,jsx,ts,tsx}"], darkMode: ["class", '[data-theme="dark"]'], theme: { + animation: { + wave: "wave 2.5s linear infinite", + enter: "enter 200ms ease-out", + "slide-in": "slide-in 1.2s cubic-bezier(.41,.73,.51,1.02)", + leave: "leave 150ms ease-in forwards", + "bounce-down": "bounce-down 3s infinite", + }, + keyframes: { + wave: { + "0%": { transform: "rotate( 0.0deg)" }, + "10%": { transform: "rotate(14.0deg)" }, + "20%": { transform: "rotate(-8.0deg)" }, + "30%": { transform: "rotate(14.0deg)" }, + "40%": { transform: "rotate(-4.0deg)" }, + "50%": { transform: "rotate(10.0deg)" }, + "60%": { transform: "rotate( 0.0deg)" }, + "100%": { transform: "rotate( 0.0deg)" }, + }, + enter: { + "0%": { transform: "scale(0.8)", opacity: "0" }, + "100%": { transform: "scale(1)", opacity: "1" }, + }, + leave: { + "0%": { transform: "scale(1)", opacity: "1" }, + "100%": { transform: "scale(0.8)", opacity: "0" }, + }, + "slide-in": { + "0%": { transform: "translateY(-100%)" }, + "100%": { transform: "translateY(0)" }, + }, + "bounce-down": { + "0%,20%, 50%,80%,100%": { transform: "translateY(0)" }, + "40%": { transform: "translateY(-8px)" }, + "60%": { transform: "translateY(-4px)" }, + }, + }, container: { center: true, padding: "16px",