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 (
+
+
+
+
+
+
+
+
+
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;