diff --git a/.github/workflows/deploy-to-node.yaml b/.github/workflows/deploy-to-node.yaml index a34e550334..f04484c6ba 100644 --- a/.github/workflows/deploy-to-node.yaml +++ b/.github/workflows/deploy-to-node.yaml @@ -81,6 +81,7 @@ jobs: BACKEND_CORS_ORIGINS: ${{ vars.BACKEND_CORS_ORIGINS }} WEB_INFERENCE_SERVER_HOST: ${{ vars.WEB_INFERENCE_SERVER_HOST }} WEB_ENABLE_CHAT: ${{ vars.WEB_ENABLE_CHAT }} + WEB_BYE: ${{ vars.WEB_BYE }} WEB_ENABLE_DRAFTS_WITH_PLUGINS: ${{ vars.WEB_ENABLE_DRAFTS_WITH_PLUGINS }} WEB_NUM_GENERATED_DRAFTS: ${{ vars.WEB_NUM_GENERATED_DRAFTS }} WEB_CURRENT_ANNOUNCEMENT: ${{ vars.WEB_CURRENT_ANNOUNCEMENT }} diff --git a/ansible/deploy-to-node.yaml b/ansible/deploy-to-node.yaml index f36e020710..33898bc19c 100644 --- a/ansible/deploy-to-node.yaml +++ b/ansible/deploy-to-node.yaml @@ -284,6 +284,7 @@ INFERENCE_SERVER_API_KEY: "{{ lookup('ansible.builtin.env', 'WEB_INFERENCE_SERVER_API_KEY') }}" ENABLE_CHAT: "{{ lookup('ansible.builtin.env', 'WEB_ENABLE_CHAT') }}" + BYE: "{{ lookup('ansible.builtin.env', 'WEB_BYE') }}" ENABLE_DRAFTS_WITH_PLUGINS: "{{ lookup('ansible.builtin.env', 'WEB_ENABLE_DRAFTS_WITH_PLUGINS')}}" diff --git a/website/src/hooks/env/BrowserEnv.ts b/website/src/hooks/env/BrowserEnv.ts index 4d863c0d9a..8ed2f357f9 100644 --- a/website/src/hooks/env/BrowserEnv.ts +++ b/website/src/hooks/env/BrowserEnv.ts @@ -1,6 +1,7 @@ import { createContext, useContext } from "react"; export interface BrowserConfig { + BYE: boolean; ENABLE_CHAT: boolean; ENABLE_DRAFTS_WITH_PLUGINS: boolean; NUM_GENERATED_DRAFTS: number; diff --git a/website/src/pages/api/config.ts b/website/src/pages/api/config.ts index 36c4a6b53d..33c9d8c70a 100644 --- a/website/src/pages/api/config.ts +++ b/website/src/pages/api/config.ts @@ -4,6 +4,7 @@ import { BrowserConfig } from "src/types/Config"; // don't put sensitive information here const config: BrowserConfig = { + BYE: boolean(process.env.BYE), ENABLE_CHAT: boolean(process.env.ENABLE_CHAT), ENABLE_DRAFTS_WITH_PLUGINS: boolean(process.env.ENABLE_DRAFTS_WITH_PLUGINS), NUM_GENERATED_DRAFTS: Number(process.env.NUM_GENERATED_DRAFTS), diff --git a/website/src/pages/bye.tsx b/website/src/pages/bye.tsx new file mode 100644 index 0000000000..0ad9018b04 --- /dev/null +++ b/website/src/pages/bye.tsx @@ -0,0 +1,58 @@ +import Image from "next/image"; +import Link from "next/link"; +import { Container } from "src/components/Container"; +export { getStaticProps } from "src/lib/defaultServerSideProps"; + +const ByePage = () => { + return ( +
+ +
+
+ temp-image +
+
+
+

OpenAssistant has finished!

+

+ OpenAssistant collected data from over 13'000 humans and released it to the public. Data, models, + and code are publicly available. +

+

Links:

+ +

+ If you're looking to support other open-data projects, check out these: +

+ +
+
+
+
+
+ ); +}; + +export default ByePage; diff --git a/website/src/pages/chat/[id].tsx b/website/src/pages/chat/[id].tsx index b8bb0b81db..c55645afe1 100644 --- a/website/src/pages/chat/[id].tsx +++ b/website/src/pages/chat/[id].tsx @@ -10,7 +10,8 @@ export { getServerSideProps } from "src/lib/defaultServerSideProps"; import useSWRImmutable from "swr/immutable"; const Chat = () => { - const { query } = useRouter(); + const router = useRouter(); + const { query } = router; const id = query.id as string; const { t } = useTranslation(["common", "chat"]); const { data: modelInfos } = useSWRImmutable("/api/chat/models", get, { diff --git a/website/src/pages/chat/index.tsx b/website/src/pages/chat/index.tsx index 3e2856b459..68fcdeef90 100644 --- a/website/src/pages/chat/index.tsx +++ b/website/src/pages/chat/index.tsx @@ -1,12 +1,22 @@ import Head from "next/head"; +import { useRouter } from "next/router"; import { useTranslation } from "next-i18next"; import React from "react"; import { ChatListBase } from "src/components/Chat/ChatListBase"; import { DashboardLayout } from "src/components/Layout"; export { getStaticProps } from "src/lib/defaultServerSideProps"; +import { useBrowserConfig } from "src/hooks/env/BrowserEnv"; const ChatList = () => { const { t } = useTranslation(); + const { BYE } = useBrowserConfig(); + const router = useRouter(); + + React.useEffect(() => { + if (BYE) { + router.push("/bye"); + } + }, [router, BYE]); return ( <> diff --git a/website/src/pages/contributors.tsx b/website/src/pages/contributors.tsx new file mode 100644 index 0000000000..8f38f71269 --- /dev/null +++ b/website/src/pages/contributors.tsx @@ -0,0 +1,13 @@ +import { useRouter } from "next/router"; +import { useEffect } from "react"; + +const ContributorsPage = () => { + const router = useRouter(); + useEffect(() => { + router.push("https://ykilcher.com/oa-contributors"); + }, [router]); + + return null; +}; + +export default ContributorsPage; diff --git a/website/src/pages/dashboard.tsx b/website/src/pages/dashboard.tsx index 62d2bbdf99..17282b61d2 100644 --- a/website/src/pages/dashboard.tsx +++ b/website/src/pages/dashboard.tsx @@ -1,7 +1,8 @@ import { Button, Card, CardBody, Flex, Heading } from "@chakra-ui/react"; import Head from "next/head"; +import { useRouter } from "next/router"; import { useTranslation } from "next-i18next"; -import { useMemo } from "react"; +import { useEffect, useMemo } from "react"; import { LeaderboardWidget, TaskOption, WelcomeCard } from "src/components/Dashboard"; import { DashboardLayout } from "src/components/Layout"; import { get } from "src/lib/api"; @@ -17,7 +18,8 @@ import useSWR from "swr"; const Dashboard = () => { const { t } = useTranslation(["dashboard", "common", "tasks"]); - const { ENABLE_CHAT } = useBrowserConfig(); + const { ENABLE_CHAT, BYE } = useBrowserConfig(); + const router = useRouter(); const lang = useCurrentLocale(); const { data } = useSWR(API_ROUTES.AVAILABLE_TASK({ lang }), get, { refreshInterval: 2 * 60 * 1000, //2 minutes @@ -55,6 +57,12 @@ const Dashboard = () => { }, }; + useEffect(() => { + if (BYE) { + router.push("/bye"); + } + }, [BYE, router]); + return ( <> diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index 3c33b94367..60e04cd284 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -8,16 +8,22 @@ import { CallToAction } from "src/components/CallToAction"; import { Faq } from "src/components/Faq"; import { Hero } from "src/components/Hero"; export { getDefaultServerSideProps as getStaticProps } from "src/lib/defaultServerSideProps"; +import { useBrowserConfig } from "src/hooks/env/BrowserEnv"; const Home = () => { + const { BYE } = useBrowserConfig(); const router = useRouter(); const { status } = useSession(); const { t } = useTranslation(); useEffect(() => { + if (BYE) { + router.push("/bye"); + } + if (status === "authenticated") { router.push("/dashboard"); } - }, [router, status]); + }, [router, status, BYE]); return ( <> diff --git a/website/src/types/Config.ts b/website/src/types/Config.ts index 087cc55faa..37de5d9070 100644 --- a/website/src/types/Config.ts +++ b/website/src/types/Config.ts @@ -1,4 +1,5 @@ export interface BrowserConfig { + BYE: boolean; ENABLE_CHAT: boolean; ENABLE_DRAFTS_WITH_PLUGINS: boolean; // Whether draft messages should be generated if plugins are in use NUM_GENERATED_DRAFTS: number; diff --git a/website/types/env.d.ts b/website/types/env.d.ts index 58667dd643..c338c506d7 100644 --- a/website/types/env.d.ts +++ b/website/types/env.d.ts @@ -9,6 +9,7 @@ declare global { ADMIN_USERS: string; MODERATOR_USERS: string; INFERENCE_SERVER_HOST: string; + BYE: boolean; ENABLE_CHAT: boolean; ENABLE_DRAFTS_WITH_PLUGINS: boolean; NUM_GENERATED_DRAFTS: number;