You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2022/05/18 00:47:45 UTC

[pulsar] branch master updated: [website][feat]: remove website files(Except for static docs and imgs) due to it had been migrated to the repo pulsar-site (#15636)

This is an automated email from the ASF dual-hosted git repository.

penghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 9ea5fefa1aa [website][feat]: remove website files(Except for static docs and imgs) due to it had been migrated to the repo pulsar-site (#15636)
9ea5fefa1aa is described below

commit 9ea5fefa1aaf1640169f19a2a998495b5e7f81b6
Author: Li Li <ur...@apache.org>
AuthorDate: Wed May 18 08:47:37 2022 +0800

    [website][feat]: remove website files(Except for static docs and imgs) due to it had been migrated to the repo pulsar-site (#15636)
---
 site2/README.md                                    |  337 -------
 site2/crowdin.yaml                                 |   53 -
 site2/website/__tests__/doc-links.test.js          |   67 --
 site2/website/brodocs/actions.js                   |   58 --
 site2/website/brodocs/brodoc.js                    |  214 ----
 site2/website/brodocs/favicon.ico                  |  Bin 1150 -> 0 bytes
 site2/website/brodocs/manifest.json                |   45 -
 site2/website/brodocs/markedDecorations.js         |  101 --
 site2/website/brodocs/pulsar-admin-manifest.json   |   25 -
 site2/website/brodocs/pulsar-client-manifest.json  |    9 -
 site2/website/brodocs/pulsar-manifest.json         |   45 -
 site2/website/brodocs/pulsar-perf-manifest.json    |    9 -
 site2/website/brodocs/scroll.js                    |  196 ----
 site2/website/brodocs/stylesheet.css               |  271 ------
 site2/website/brodocs/tabvisibility.js             |   27 -
 site2/website/coding-guide.md                      |   79 --
 site2/website/contributing.md                      |  439 ---------
 site2/website/core/Footer.js                       |  180 ----
 site2/website/data/connectors.js                   |  194 ----
 site2/website/data/resources.js                    | 1026 --------------------
 site2/website/data/team.js                         |  305 ------
 site2/website/data/users.js                        |  359 -------
 site2/website/docusaurus-version.js                |  196 ----
 site2/website/languages.js                         |  185 ----
 site2/website/oldversions.json                     |    8 -
 site2/website/package.json                         |   38 -
 site2/website/pages/en/admin-rest-api.js           |   21 -
 site2/website/pages/en/coding-guide.js             |   35 -
 site2/website/pages/en/contact.js                  |  119 ---
 site2/website/pages/en/contributing.js             |   35 -
 site2/website/pages/en/download.js                 |  411 --------
 site2/website/pages/en/events.js                   |   96 --
 site2/website/pages/en/functions-rest-api.js       |   21 -
 site2/website/pages/en/index.js                    |  205 ----
 site2/website/pages/en/packages-rest-api.js        |   21 -
 site2/website/pages/en/powered-by.js               |   60 --
 site2/website/pages/en/pulsar-admin-cli.js         |   24 -
 site2/website/pages/en/pulsar-cli.js               |   24 -
 site2/website/pages/en/pulsar-client-cli.js        |   24 -
 .../pages/en/pulsar-manager-release-notes.js       |   35 -
 site2/website/pages/en/pulsar-perf-cli.js          |   24 -
 site2/website/pages/en/release-notes.js            |   35 -
 site2/website/pages/en/resources.js                |  152 ---
 site2/website/pages/en/sink-rest-api.js            |   21 -
 site2/website/pages/en/source-rest-api.js          |   21 -
 site2/website/pages/en/team.js                     |   82 --
 site2/website/pages/en/versions.js                 |  130 ---
 site2/website/scripts/fix-tab.js                   |   44 -
 site2/website/scripts/replace.js                   |  233 -----
 site2/website/scripts/split-swagger-by-version.js  |   61 --
 site2/website/scripts/test-server.js               |   21 -
 site2/website/siteConfig.js                        |  212 ----
 site2/website/static/css/code-blocks-buttons.css   |   46 -
 site2/website/static/css/custom.css                |  150 ---
 site2/website/static/doap.rdf                      |   59 --
 site2/website/static/examples/openssl.cnf          |  152 ---
 site2/website/static/js/custom.js                  |  247 -----
 site2/website/static/js/getCliByVersion.js         |   48 -
 site2/website/static/js/getSwaggerByVersion.js     |   63 --
 59 files changed, 7398 deletions(-)

diff --git a/site2/README.md b/site2/README.md
deleted file mode 100644
index ddf17661b71..00000000000
--- a/site2/README.md
+++ /dev/null
@@ -1,337 +0,0 @@
-# Pulsar website and documentation
-
-Pulsar website is comprised of two parts: website pages (including blog posts) and documentation.
-
-You can run the website locally to test your updates. The documentation is written in English, and we also encourage contributions in different languages.
-
-
-## Website
-
-Pulsar website framework adopts [Docusaurus](https://docusaurus.io/). Website pages are non-versioned. They are placed in the `/site2/website` directory. Ensure that you have installed the latest version of [Node](https://nodejs.org/en/download/) and [Yarn](https://yarnpkg.com/en/docs/install) before running the site locally.
-
-> You have to be on Node >= 8.x and Yarn >= 1.5.
-
-### Run the site locally
-
-To run the site locally, enter the following commands.
-
-```bash 
-git clone https://github.com/apache/pulsar.git
-cd pulsar/site2/website
-yarn install
-yarn start
-```
-> Notes
-> 
-> 1. If you have installed `yarn`, you can skip the `yarn install` command.
-> 2. After you enter the `yarn start` command, you will be navigated to a local address, for example, `http://localhost:3000`. Click `Docs` to see documentation for the latest release of Pulsar. 
-> 3. The `http://localhost:3000/en/versions` path shows the documentation for all versions. To view your local changes, click `Documentation` in **Latest Version**, or enter `http://localhost:3000/docs/en/next/standalone` in a browser.
-
-### Tests
-
-To run tests locally, enter the following commands
-```bash
-cd pulsar/site2/website
-yarn test
-```
-
-### Check
-
-Before submitting a pull request, run the following command to make sure no broken links exist.
-
-```
-cd pulsar/site2/website
-yarn build
-```
-
-If warning messages are shown as below, it means broken links exist.
-
-```
-[WARN] unresolved links in file 'version-2.4.1/getting-started-standalone.md' > [ 'security-overview.md' ]
-
-[WARN] unresolved links in file 'version-2.4.0/io-managing.md' > [ 'functions-overview.md' ]
-```
-
-Fix the broken links manually and then send a pull request.
-
-Besides, you can use an automatic checker tool to crawl through the Pulsar website and identify dead links, for example, [Dr. Link Checker](https://www.drlinkcheck.com/).
-
-## Documentation
-
-This is the **Pulsar Document Development Life Cycle** (DDLC). It is essential for developing a document to enhance the precision and understandability for users. In general, documentation contributors involve themselves in the following phases.
-
-![Pulsar Document Development Life Cycle](docs/assets/DDLC.png)
-
-Pulsar documents are written in English. Documentation related pages are placed in the `/site2/docs` directory. All documentation pages are versioned. For more details, refer to [versioning](#versioning).
-
-### Contribute to documentation
-
-We welcome contributions to help improve Pulsar documentation. The documents are written in [Markdown](http://daringfireball.net/projects/markdown/syntax) and follow [Google Developer Documentation Style Guide](https://developers.google.com/style/). If you are not familiar with the writing styles, we are happy to guide you along the way.
-
-For workflow on how to contribute to Pulsar, refer to [contribution](http://pulsar.apache.org/en/contributing/) guidelines.
-
-To learn more about Pulsar documents, read the following instructions.
-
-### Layout
-
-The markdown files placed in the `docs` directory adopt a flat structure.
-
-```
-├── docs
-│   ├── adaptors-kafka.md
-│   ├── adaptors-spark.md
-│   ├── adaptors-storm.md
-│   ├── admin-api-brokers.md
-│   ├── admin-api-clusters.md
-│   ├── admin-api-namespaces.md
-│   ├── admin-api-overview.md
-│   ├── admin-api-permissions.md
-│   ├── admin-api-topics.md
-│   ├── admin-api-tenants.md
-│   ├── administration-dashboard.md
-│   ├── administration-geo.md
-│   ├── administration-load-distribution.md
-│   ├── administration-proxy.md
-...
-```
-
-All the files are named in the following convention:
-
-```
-<category>-<page-name>.md
-```
-
-`<category>` is the category within the sidebar that this file belongs to, while `<page-name>` is the string to name the file within this category.
-
-### Markdown Headers
-
-All the documents are usual Markdown files. However you need to add some Docusaurus-specific fields in Markdown headers in order to link them correctly to the [Sidebar](#sidebar) and [Navigation Bar](#navigation).
-
-`id`: A unique document ID. If this field is not specified, the document ID defaults to its file name (without the extension).
-
-`title`: The title of the document. If this field is not specified, the document title defaults to its id.
-
-`hide_title`: Whether to hide the title at the top of the doc.
-
-`sidebar_label`: The text shown in the document sidebar for this document. If this field is not specified, the document `sidebar_label` defaults to its title.
-
-For example:
-
-```bash
----
-id: io-overview
-title: Pulsar IO Overview
-sidebar_label: Overview
----
-```
-
-### Link to another document
-
-To link to other documentation files, you can use relative URLs, which will be automatically converted to the corresponding HTML links when they are rendered.
-
-Example:
-
-```md
-[This links to another document](other-document.md)
-```
-
-The markdown file will be automatically converted into a link to /docs/other-document.html (or the appropriately translated/versioned link) once it is rendered.
-
-This helps when you want to navigate through docs on GitHub since the links there are functional links to other documents (still on GitHub), and the documents have the correct HTML links when they are rendered.
-
-### Link to javadoc of Pulsar class
-
-We have a [remarkable plugin](https://github.com/jonschlinkert/remarkable) to generate links to the javadoc for Pulsar classes.
-You can write them in the following syntax:
-
-```shell
-{@inject: javadoc:<Display Name>:<Relative-Path-To-Javadoc-Html-File>}
-```
-
-For example, the following line generates a hyperlink to the javadoc of `PulsarAdmin` class.
-
-```shell
-{@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html}
-```
-
-### Link to files in Pulsar GitHub repository
-
-We use the same [remarkable plugin](https://github.com/jonschlinkert/remarkable) to generate links to files in Pulsar GitHub repository.
-
-You can write it using similar syntax:
-
-```shell
-{@inject: github:<Display Text>:<Relative-Path-To-Files>}
-```
-
-For example, the following line generates a hyperlink to the dashboard Dockerfile.
-
-```
-{@inject: github:`Dockerfile`:/dashboard/Dockerfile}
-```
-
-For more details about markdown features, read [here](https://docusaurus.io/docs/en/doc-markdown).
-
-### Sidebar
-
-All the sidebars are defined in a `sidebars.json` file in the `website` directory. The documentation sidebar is named `docs` in the JSON structure.
-
-When you want to add a page to sidebar, you can add the document `id` you used in the document header to the existing sidebar/category. In the example below,
-`docs` is the name of the sidebar, "Getting started" is a category within the sidebar, and "pulsar-2.0" is the `id` of a document.
-
-```bash
-{
-  "docs": {
-    "Getting started": [
-      "pulsar-2.0",
-      "standalone",
-      "getting-started-docker",
-      "client-libraries",
-      "concepts-architecture"
-    ],
-    ...
-  }
-}
-```
-
-### Navigation
-
-To add links to the top navigation bar, you can add entries to the `headerLinks` of `siteConfig.js` under `website` directory.
-
-To learn different types of links you can add to the top navigation bar, refer to [Navigation and Sidebars](https://docusaurus.io/docs/en/navigation).
-
-### Versioning
-
-Documentation versioning with Docusaurus becomes simpler. When done with a new release, just simply run the following command.
-
-```shell
-yarn run version ${version}
-```
-
-This preserves all markdown files in the `docs` directory and make them available as documentation for version `${version}`.
-Versioned documents are placed into `website/versioned_docs/version-${version}`, where `${version}` is the version number
-you supplied in the command above.
-
-Versioned sidebars are also copied into `website/versioned_sidebars` and are named as `version-${version}-sidebars.json`.
-
-If you want to change the documentation for a previous version, you can access files for that respective version.
-
-For more details about versioning, refer to [Versioning](https://docusaurus.io/docs/en/versioning).
-
-## C++ client API doc
-
-You can use the C++ client API to connect to a Pulsar cluster and handles data. [Pulsar C++ client API doc](https://pulsar.apache.org/api/cpp/https://pulsar.apache.org/api/cpp/) provides extensive implementation details and usage conventions for the C++ client. 
-
-If you want to modify the C++ client API doc, follow the steps below.
-
-**Prerequisite**
-
-- [Doxygen](http://www.doxygen.nl/)
-  
-  Pulsar uses [Doxygen](http://www.doxygen.nl/) to generate the C++ client API doc. Before submitting doc changes, you need to preview the docs using Doxygen. 
-  
-  1. Install Doxygen.
-   
-     Go to the directory `pulsar/pulsar-client-cpp` and run the command `brew install doxygen` (MacOS). 
-  
-  2. Create a folder for the generated HTML files.
-
-     Go to the directory `pulsar` and run the command `mkdir -p ../target/doxygen`.
-  
-- [clang-format](https://www.electronjs.org/docs/development/clang-format#:~:text=clang%2Dformat%20is%20a%20tool,style%20issues%20during%20code%20reviews)
-
-  Long code lines might cause C++ API tests to fail. Consequently, before submitting doc changes, you can break long lines of code automatically using `clang-format`.
-
-  To install clang-format, go to the directory `pulsar` and run the command `brew install clang-format` (MacOS).
-
-**Step**
-
-1. Modify your desired code file.
-   
-   All C++ API code files are stored at [here](https://github.com/apache/pulsar/tree/master/pulsar-client-cpp/include/pulsar). 
-   
-   > #### Tip
-   >
-   > - Each class has its corresponding `h` file. For example, if you want to update the [ProducerConfiguration class](https://pulsar.apache.org/api/cpp/classpulsar_1_1_producer_configuration.html), you need to modify the file [ProducerConfiguration.h](https://github.com/apache/pulsar/blob/master/pulsar-client-cpp/include/pulsar/ProducerConfiguration.h).
-   > 
-   > - If you want to update descriptions for member functions, you can take [Pulsar Java API doc](https://github.com/apache/pulsar/tree/master/pulsar-client-api/src/main/java/org/apache/pulsar/client/api) as references.
-
-2. Format the code file.
-   
-   Go to the directory `pulsar/pulsar-client-cpp` and run the command `clang-format -i include/pulsar/<your-file-name>`.
-
-   Check your file to make sure that the long lines are broken into short lines.
-
-3. Preview the code changes.
-   
-   Go to the directory `pulsar/pulsar-client-cpp` and run the command `doxygen`. 
-   
-   All HTML files are stored at the folder `pulsar/target/doxygen/html`. Check your file to make sure that all changes take effect. 
-
-4. Submit your doc PR. 
-   
-   [Here](https://github.com/apache/pulsar/pull/9822) is an example.
-
-## Translation and localization
-
-Docusaurus makes it easy to use translation functionality using [Crowdin](https://crowdin.com/).
-All the markdown files are written in English. These markdown files are uploaded to Crowdin for translation by users within a community. Top-level pages are also written in English.
-The strings that are needed to be translated are wrapped in a `<translate>` tag.
-
-[Pulsar Website Build](https://builds.apache.org/job/pulsar-website-build/) pulls down and uploads translation for all the Pulsar website documentation files automatically. Once it pulls down translation from Crowdin, it will build the translation into the website.
-
-### Contribute translation
-
-Translation is stored and managed in the [Pulsar Crowdin project](https://crowdin.com/project/apache-pulsar).
-To contribute translation, you can simply create a Crowdin account, join the project and make contributions.
-Crowdin provides very good documentation for translators. You can read [Crowdin Knowledge Base](https://support.crowdin.com/crowdin-intro/) before contributing.
-
-Translation you contribute is licensed under [Apache License V2](https://www.apache.org/licenses/LICENSE-2.0).
-Pulsar Committers will review translation. If your translation is not reviewed or approved by any committer, feel free to reach out via [slack channel](https://apache-pulsar.herokuapp.com/) or [mailing lists](https://pulsar.apache.org/contact/).
-
-### Download translated docs
-
-When you find display issues on the translated pages, you can download the translated docs from Crowdin, and follow the instructions below to debug and fix issues.
-
-1. Install Java (optional)
-If you have installed Java, skip this step. If you have not installed [Java](https://java.com/en/), install the latest version.
-If you are using Mac OS, you can use the following command to install Java:  
-
-```
-brew cask install java
-```
-
-2. Install Crowdin CLI
-
-To download the translated markdown files, you need to install [Crowdin CLI](https://support.crowdin.com/cli-tool/#installation).
-
-3. Set environment variables
-
-You need to set the following environment variables:
-
-```
-export CROWDIN_DOCUSAURUS_PROJECT_ID="apache-pulsar"
-export CROWDIN_DOCUSAURUS_API_KEY=<crowdin-pulsar-api-key>
-```
-
-You can find the API Key of Pulsar Crowdin project [here](https://crowdin.com/project/apache-pulsar/settings#api). Only PMC members and
-committers are able to retrieve the API key. If the API key is invalid, regenerate.
-
-4. Download the translated docs
-
-Now you are ready to download the translated docs from Crowdin.
-
-```
-$ cd ${PULSAR_HOME}/site2/website
-# download all translated docs
-$ yarn crowdin-download
-# download the translated docs for `zh-CN`
-$ yarn crowdin-download -l zh-CN
-```
-
-The translated docs are downloaded to the `site2/website/translated_docs` directory.
-
-### Check issues, fix and verify
-
-After downloading the translated documents, you can open the target markdown file, check issues and fix them.
-To verify if you have fixed the issues correctly, [run the site locally](#run-the-site-locally).
diff --git a/site2/crowdin.yaml b/site2/crowdin.yaml
deleted file mode 100644
index 0e9df3eb53d..00000000000
--- a/site2/crowdin.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
-project_identifier_env: CROWDIN_DOCUSAURUS_PROJECT_ID
-api_key_env: CROWDIN_DOCUSAURUS_API_KEY
-base_path: "./"
-preserve_hierarchy: true
-
-files:
-  -
-    source: '/docs/**/*.md'
-    translation: '/website/translated_docs/%locale%/**/%original_file_name%'
-    languages_mapping: &anchor
-      locale:
-        'af': 'af'
-        'ar': 'ar'
-        'bs-BA': 'bs-BA'
-        'ca': 'ca'
-        'cs': 'cs'
-        'da': 'da'
-        'de': 'de'
-        'el': 'el'
-        'es-ES': 'es-ES'
-        'fa': 'fa-IR'
-        'fi': 'fi'
-        'fr': 'fr'
-        'he': 'he'
-        'hu': 'hu'
-        'id': 'id-ID'
-        'it': 'it'
-        'ja': 'ja'
-        'ko': 'ko'
-        'mr': 'mr-IN'
-        'nl': 'nl'
-        'no': 'no-NO'
-        'pl': 'pl'
-        'pt-BR': 'pt-BR'
-        'pt-PT': 'pt-PT'
-        'ro': 'ro'
-        'ru': 'ru'
-        'sk': 'sk-SK'
-        'sr': 'sr'
-        'sv-SE': 'sv-SE'
-        'tr': 'tr'
-        'uk': 'uk'
-        'vi': 'vi'
-        'zh-CN': 'zh-CN'
-        'zh-TW': 'zh-TW'
-  -
-    source: '/website/versioned_docs/**/*.md'
-    translation: '/website/translated_docs/%locale%/**/%original_file_name%'
-    languages_mapping: *anchor
-  -
-    source: '/website/i18n/en.json'
-    translation: '/website/i18n/%locale%.json'
-    languages_mapping: *anchor
diff --git a/site2/website/__tests__/doc-links.test.js b/site2/website/__tests__/doc-links.test.js
deleted file mode 100644
index 2f76ff4b764..00000000000
--- a/site2/website/__tests__/doc-links.test.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const CWD = process.cwd();
-
-const path = require('path');
-const fs = require('fs');
-
-const docsDir = path.join(CWD, '../', 'docs');
-
-
-test('markdown doc links', async () => {
-  const docsDir = path.join(CWD, '../', 'docs');
-  const pages = new Set();
-
-  // collect all doc pages
-  fs.readdirSync(docsDir).forEach(file => {
-    if (file.endsWith('.md')) {
-      pages.add(file);
-    }
-  });
-
-  const mdBrokenLinks = []
-  pages.forEach(page => {
-    const pageFile = path.join(docsDir, page)
-    const mdLinks = getPageMDLinks(pageFile);
-
-    const brokenLinks = []
-    new Set(mdLinks).forEach(link => {
-      if (!pages.has(link)) {
-        brokenLinks.push(link);
-      }
-    })
-
-    if (brokenLinks.length > 0) {
-      mdBrokenLinks.push({page: page, brokenLinks: brokenLinks})
-    }
-  })
-  
-  // did we find some broken links?
-  if (mdBrokenLinks.length > 0) {
-    const brokenLinksJson = JSON.stringify(mdBrokenLinks, null, 2);
-    const errorMessage = `Found the following broken links in docs pages:\n${brokenLinksJson}`
-    console.log(errorMessage);
-    expect(mdBrokenLinks.length).toBe(0)
-  }
-})
-
-
-function getPageMDLinks(file) {
-  if (!fs.existsSync(file)) {
-    return [];
-  }
-  const content = fs.readFileSync(file, 'utf8');
-
-  const mdLinks = [];
-  // find any inline-style links to markdown files
-  const linkRegex = /(?:\]\()(?:\.\/)?([^'")\]\s>]+\.md)/g;
-  let linkMatch = linkRegex.exec(content);
-  while (linkMatch !== null) {
-    const link = linkMatch[1]
-    // we are only checking links to other docs in this test
-    if (!link.startsWith('http')) {
-      mdLinks.push(linkMatch[1]);
-    }
-    linkMatch = linkRegex.exec(content);
-  }
-
-  return mdLinks;
-}
diff --git a/site2/website/brodocs/actions.js b/site2/website/brodocs/actions.js
deleted file mode 100644
index ce2b504b9e0..00000000000
--- a/site2/website/brodocs/actions.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// https://jsfiddle.net/upqwhou2/
-
-$(document).ready(function() {
-    var navigationLinks = $('#sidebar-wrapper > ul li a');
-    var navigationSections = $('#sidebar-wrapper > ul > ul');
-    var sectionIdTonavigationLink = {};
-    var sections = $('#page-content-wrapper').find('h1, h2').map(function(index, node) {
-        if (node.id) {
-            sectionIdTonavigationLink[node.id] = $('#sidebar-wrapper > ul li a[href="#' + node.id + '"]');
-            return node;
-        }
-    });
-    var sectionIdToNavContainerLink = {};
-    var topLevelSections = $('#page-content-wrapper').find('h1').map(function(index, node) {
-        if (node.id) {
-            sectionIdToNavContainerLink[node.id] = $('#sidebar-wrapper > ul > ul[id="' + node.id + '-nav' +'"]');
-            return node;
-        }
-    });
-
-    var firstLevelNavs = $('#sidebar-wrapper > li');
-    var secondLevelNavs = $('#sidebar-wrapper > ul > ul');
-    var secondLevelNavContents = $('#sidebar-wrapper > ul > ul > li');
-    var thirdLevelNavs = null; // TODO: When compile provides 3 level nav, implement
-
-    var sectionsReversed = $(sections.get().reverse());
-
-    function checkScroll(event) {
-        var scrollPosition = $(window).scrollTop();
-        var offset = 50;
-        scrollPosition += offset;
-        sections.each(function() {
-            var currentSection = $(this);
-            var sectionTop = $(this).offset().top;
-            var id = $(this).attr('id');
-            if (scrollPosition >= sectionTop) {
-                navigationLinks.removeClass('selected');
-                sectionIdTonavigationLink[id].addClass('selected');
-                var sectionNavContainer = sectionIdToNavContainerLink[id];
-                var sectionNavContainerDisplay;
-                if (sectionNavContainer) {
-                    sectionNavContainerDisplay = sectionNavContainer.css('display');
-                }
-                if (sectionNavContainer && sectionNavContainerDisplay === 'none') {
-                    navigationSections.toggle(false);
-                    sectionNavContainer.toggle(true);
-                }
-            }
-            if (($(this).offset().top < window.pageYOffset + 50) && $(this).offset().top + $(this).height() > window.pageYOffset) {
-                window.location.hash = id;
-            }
-        });
-    }
-    checkScroll();
-    $(window).on('scroll', function(event) {
-        checkScroll(event);
-    });
-});
\ No newline at end of file
diff --git a/site2/website/brodocs/brodoc.js b/site2/website/brodocs/brodoc.js
deleted file mode 100644
index 84533e04041..00000000000
--- a/site2/website/brodocs/brodoc.js
+++ /dev/null
@@ -1,214 +0,0 @@
-const docFolder = './documents/';
-const fs = require('fs');
-const marked = require('marked');
-const highlight = require('highlight.js');
-const renderer = new marked.Renderer();
-const brodocDec = require('./markedDecorations.js');
-
-
-marked.setOptions({
-    renderer: renderer,
-    gfm: true,
-    tables: true,
-    breaks: false,
-    pedantic: false,
-    sanitize: false,
-    smartLists: true,
-    smartypants: false,
-    highlight: function (code, lang) {
-        return highlight.highlightAuto(code).value;
-    }
-});
-brodocDec.decorateMarked(renderer);
-
-var config = require('./manifest');
-var docs = config.docs;
-
-var files = [];
-var fileArray = [];
-docs.forEach(file => {
-    files.push(file.filename);
-    fileArray.push(file);
-});
-
-var bodyContent = '';
-var navIds = brodocDec.navIds;
-var codeTabs = brodocDec.codeTabs;
-
-
-// const lexer = new marked.Lexer();
-// lexer.rules.bdoc = /^(\/{4} )(\w+).*$/;
-
-var path = docFolder;
-var fIndex = 0;
-var rIndex = 0;
-var fileObj = {toc: [], content: [], tabs: []};
-fileArray.forEach((file, index) => {
-    fs.readFile(path + file.filename, 'utf8', (err, data) => {
-        rIndex++;
-        file.content = data;
-
-        if (rIndex >= files.length) {
-            // do the things
-            parseFileContent(fileArray);
-            var navData = generateNavItems(navIds);
-            var navContent = navData.content;
-            var navDataArray = navData.navDataArray;
-            var codeTabContent = generateCodeTabItems(codeTabs);
-            var bodyContent = flattenContent(parsedContentArray);
-            generateDoc(navContent, bodyContent, codeTabContent);
-            generateNavJson(navDataArray);
-        }
-    });
-});
-
-function flattenContent(content) {
-    var flattenedContent = content.reduce(function(accum, val) {
-        return accum + val;
-    });
-    return flattenedContent;
-}
-
-var parsedContentArray = [];
-function parseFileContent(files) {
-    files.forEach((file, index) => {
-        parsedContentArray[index] = parseDoc(file.content);
-    });
-}
-function parseDoc(doc) {
-    return marked(doc, { renderer: renderer });
-}
-
-function generateNavItems(navObjs) {
-    var reversedNavs = navObjs.reverse();
-    var currentNestArray = [];
-    var currentStrongArray = [];
-    var flattenedNest = '';
-    var nestedNavArray = []; // Array containing generated html menu items - is flattened into a string.
-    var navArrayInvert = []; // Deals with data layer of navigation;
-    var navSectionArray = [];
-    var navStrongSectionArray = [];
-    var navSectionArrayClone;
-    var flatNavArrayInvert = [];
-    reversedNavs.forEach(obj => {
-        flatNavArrayInvert.push(obj.id);
-        var strong = (obj.id.indexOf('-strong-') !== -1);
-        if (obj.level !== 1) {
-            if (strong && currentNestArray.length !== 0) {
-                flattenedNest = flattenContent(currentNestArray.reverse());
-                currentStrongArray.push(generateNestedNav(obj, flattenedNest));
-                currentNestArray.length = 0;
-
-                navSectionArrayClone = Object.assign([], navSectionArray);
-                navStrongSectionArray.push({section: obj.id, subsections: navSectionArrayClone});
-                navSectionArray.length = 0;
-            } else {
-                currentNestArray.push(generateNav(obj));
-                navSectionArray.push({section: obj.id});
-            }
-        } else if (obj.level === 1) {
-            if (currentStrongArray.length !== 0) {
-                currentNestArray.forEach(obj => {
-                    currentStrongArray.push(obj);
-                });
-                flattenedNest = flattenContent(currentStrongArray.reverse());
-            } else if (currentNestArray.length !== 0) {
-                flattenedNest = flattenContent(currentNestArray.reverse());
-            }
-            nestedNavArray.push(generateNestedNav(obj, flattenedNest));
-            currentNestArray.length = 0;
-            currentStrongArray.length = 0;
-            flattenedNest = '';
-
-            navSectionArray.forEach(obj => {
-                navStrongSectionArray.push(obj);
-            });
-            navSectionArrayClone = Object.assign([], navStrongSectionArray);
-            navStrongSectionArray.length = 0;
-            navArrayInvert.push({section: obj.id, subsections: navSectionArrayClone});
-            navSectionArray.length = 0;
-        }
-    });
-    
-    var navContent = flattenContent(nestedNavArray.reverse());
-    return {content: navContent, navDataArray: {toc: navArrayInvert, flatToc: flatNavArrayInvert}};
-}
-
-function generateNav(obj) {
-    var classString = 'nav-level-' + obj.level;
-    var isStrong = obj.id.indexOf('-strong-') !== -1;
-    if (isStrong) {
-        classString += ' strong-nav';
-    }
-    if (obj.level === 2) {
-        return '<li class="' + classString + '">' + '<a href="#' + obj.id + '" class="nav-item">' + obj.text + '</a></li>';
-    }
-    return '<li class="' + classString + '">' + '<a href="#' + obj.id + '" class="nav-item">' + obj.text + '</a></li>';
-}
-
-function generateNestedNav(parent, nest) {
-    var nestContent = '';
-    if (nest.length > 0) {
-        nestContent = nest ? '<ul id="' + parent.id + '-nav" style="display: none;">' + nest + '</ul>' : '';
-    }
-    return '<ul>' + generateNav(parent) + nestContent + '</ul>';
-}
-
-function generateNavJson(data) {
-    var navJson = JSON.stringify(data);
-    navScript = `(function(){navData = ${navJson};})();`;
-    fs.writeFile('./navData.js', navScript, function(err) {
-        if (err) {
-            return console.log(err);
-        }
-        console.log("navData.js saved!");
-    });
-}
-
-function generateCodeTabItems(tabs) {
-    var codeTabList = '';
-    tabs.forEach(tab => {
-        codeTabList += generateCodeTab(tab);
-    });
-    return codeTabList;
-}
-
-function generateCodeTab(tab) {
-    return '<li class="code-tab" id="' + tab + '">' + tab + '</li>';
-}
-
-function generateDoc(navContent, bodyContent, codeTabContent) {
-    var doc = 
-`<!DOCTYPE html>
-<html>
-<head>
-<meta charset="UTF-8">
-<title>${config.title}</title>
-<link rel="shortcut icon" href="favicon.ico" type="image/vnd.microsoft.icon">
-<!-- Latest compiled and minified CSS -->
-<link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.min.css">
-<link rel="stylesheet" href="node_modules/font-awesome/css/font-awesome.min.css" type="text/css">
-<link rel="stylesheet" href="node_modules/highlight.js/styles/default.css" type="text/css">
-<link rel="stylesheet" href="stylesheet.css" type="text/css">
-</head>
-<body>
-<div id="sidebar-wrapper" class="side-nav side-bar-nav">${navContent}<br/><div class="copyright">${config.copyright}</div></div>
-<div id="wrapper">
-<div id="code-tabs-wrapper" class="code-tabs"><ul class="code-tab-list">${codeTabContent}</ul></div>
-<div id="page-content-wrapper" class="body-content container-fluid">${bodyContent}</div>
-</div>
-<script src="node_modules/jquery/dist/jquery.min.js"></script>
-<script src="node_modules/jquery.scrollto/jquery.scrollTo.min.js"></script>
-<script src="navData.js"></script>
-<script src="scroll.js"></script>
-<!--<script src="actions.js"></script>-->
-<script src="tabvisibility.js"></script>
-</body>
-</html>`;
-    fs.writeFile('./index.html', doc, function (err) {
-        if (err) {
-            return console.log(err);
-        }
-        console.log("index.html saved!");
-    });
-}
\ No newline at end of file
diff --git a/site2/website/brodocs/favicon.ico b/site2/website/brodocs/favicon.ico
deleted file mode 100644
index a3d664ebe6d..00000000000
Binary files a/site2/website/brodocs/favicon.ico and /dev/null differ
diff --git a/site2/website/brodocs/manifest.json b/site2/website/brodocs/manifest.json
deleted file mode 100644
index 290edb9cf5b..00000000000
--- a/site2/website/brodocs/manifest.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-    "docs": [
-	{
-	    "filename": "brokers.md"
-	},
-	{
-	    "filename": "broker-stats.md"
-	},
-	{
-	    "filename": "clusters.md"
-	},
-	{
-	    "filename": "functions.md"
-	},
-	{
-	    "filename": "namespaces.md"
-	},
-	{
-	    "filename": "ns-isolation-policy.md"
-	},
-	{
-	    "filename": "sources.md"
-	},
-	{
-	    "filename": "sinks.md"
-	},
-	{
-	    "filename": "topics.md"
-	},
-	{
-	    "filename": "tenants.md"
-	},
-	{
-	    "filename": "resource-quotas.md"
-	},
-	{
-	    "filename": "schemas.md"
-	},
-	{
-	    "filename": "packages.md"
-	}
-    ],
-    "title": "Docs",
-    "copyright": "<a href='http://pulsar.apache.org/'>Apache Pulsar</a>"
-}
diff --git a/site2/website/brodocs/markedDecorations.js b/site2/website/brodocs/markedDecorations.js
deleted file mode 100644
index 9171226b7a7..00000000000
--- a/site2/website/brodocs/markedDecorations.js
+++ /dev/null
@@ -1,101 +0,0 @@
-;(function() {
-    var brodocDec = {};
-
-    var navIds = [];
-    var bodyContent = '';
-    var codeTabs = [];
-
-    var idAffix = 0;
-    var uniqueNav = [];
-
-    brodocDec.decorateMarked = function(renderer) {
-        renderer.heading = (text, level, raw) => {
-            var id = raw.toLowerCase().replace(/[^\w]+/g, '-');
-            if ((uniqueNav.indexOf(id) !== -1) && (level === 2)) {
-                idAffix++;
-                id += '-' + idAffix;
-            } else {
-                uniqueNav.push(id);
-            }
-            if (level < 3) {
-                navIds.push(
-                    {
-                        id: id,
-                        text: text,
-                        level: level
-                    }
-                );
-            }
-            return '<h'
-                + level
-                + ' id="'
-                + renderer.options.headerPrefix
-                + id
-                + '">'
-                + text
-                + '</h'
-                + level
-                + '>\n';
-        };
-
-        renderer.blockquote = function(quote) {
-            var bdregex = /(bdocs-tab:)[^\s]*/;
-            var bdoc = quote.match(bdregex);
-            if (bdoc) {
-                var bdocTab = bdoc[0].split(':')[1];
-                var bdquote = quote.replace(bdoc[0], '');
-                return '<blockquote class="code-block ' + bdocTab + '">\n' + bdquote + '</blockquote>\n';
-            } else {
-                return '<blockquote>\n' + quote + '</blockquote>\n';
-            }
-        };
-
-        renderer.code = function (code, lang, escaped) {
-            var bdocGroup = lang.substring(0, lang.indexOf('_'));
-            var bdocTab = bdocGroup.split(':')[1];
-            var hlang = lang.substring(lang.indexOf('_')+1);
-
-            if (renderer.options.highlight) {
-                var out = renderer.options.highlight(code, hlang);
-                if (out !== null && out !== code) {
-                    escaped = true;
-                    code = out;
-                }
-            }
-
-            var tabLang = hlang ? hlang : 'generic';
-            if (codeTabs.indexOf(bdocTab) === -1) {
-                codeTabs.push(bdocTab);
-            }
-
-            if (!hlang) {
-                return '<pre class="code-block"><code class="generic">'
-                    + (escaped ? code : escape(code, true))
-                    + '\n</code></pre>';
-            }
-
-            return '<pre class="code-block '
-                + bdocTab
-                + '"><code class="'
-                + renderer.options.langPrefix
-                + escape(hlang, true)
-                + '">'
-                + (escaped ? code : escape(code, true))
-                + '\n</code></pre>\n';
-        };
-    };
-    
-    if (typeof module !== 'undefined' && typeof exports === 'object') {
-        module.exports = brodocDec;
-    } else if (typeof define === 'function' && define.amd) {
-        define(function() { return brodocDec; });
-    } else {
-        this.brodocDec = brodocDec;
-    }
-    brodocDec.navIds = navIds;
-    brodocDec.codeTabs = codeTabs;
-    return brodocDec;
-
-}).call(function() {
-  return this || (typeof window !== 'undefined' ? window : global);
-}());
\ No newline at end of file
diff --git a/site2/website/brodocs/pulsar-admin-manifest.json b/site2/website/brodocs/pulsar-admin-manifest.json
deleted file mode 100644
index 210908e16fa..00000000000
--- a/site2/website/brodocs/pulsar-admin-manifest.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "docs": [
-    { "filename": "broker-stats.md" },
-    { "filename": "brokers.md" },
-    { "filename": "bookies.md" },
-    { "filename": "clusters.md" },
-    { "filename": "functions-worker.md" },
-    { "filename": "functions.md" },
-    { "filename": "namespaces.md" },
-    { "filename": "ns-isolation-policy.md" },
-    { "filename": "packages.md" },
-    { "filename": "proxy-stats.md" },
-    { "filename": "resource-quotas.md" },
-    { "filename": "resourcegroups.md" },
-    { "filename": "schemas.md" },
-    { "filename": "sinks.md" },
-    { "filename": "sources.md" },
-    { "filename": "tenants.md" },
-    { "filename": "topics.md" },
-    { "filename": "topicPolicies.md" },
-    { "filename": "transactions.md" }
-  ],
-  "title": "Docs",
-  "copyright": "<a href='http://pulsar.apache.org/'>Apache Pulsar</a>"
-}
diff --git a/site2/website/brodocs/pulsar-client-manifest.json b/site2/website/brodocs/pulsar-client-manifest.json
deleted file mode 100644
index b48d6b4471b..00000000000
--- a/site2/website/brodocs/pulsar-client-manifest.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "docs": [
-    {
-      "filename": "pulsar-client.md"
-    }
-  ],
-  "title": "Docs",
-  "copyright": "<a href='http://pulsar.apache.org/'>Apache Pulsar</a>"
-}
diff --git a/site2/website/brodocs/pulsar-manifest.json b/site2/website/brodocs/pulsar-manifest.json
deleted file mode 100644
index 9a6c67d5abe..00000000000
--- a/site2/website/brodocs/pulsar-manifest.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "docs": [
-    {
-      "filename": "broker.md"
-    },
-    {
-      "filename": "broker-tool.md"
-    },
-    {
-      "filename": "compact-topic.md"
-    },
-    {
-      "filename": "tokens.md"
-    },
-    {
-      "filename": "proxy.md"
-    },
-    {
-      "filename": "websocket.md"
-    },
-    {
-      "filename": "functions-worker.md"
-    },
-    {
-      "filename": "standalone.md"
-    },
-    {
-      "filename": "initialize-cluster-metadata.md"
-    },
-    {
-      "filename": "delete-cluster-metadata.md"
-    },
-    {
-      "filename": "initialize-transaction-coordinator-metadata.md"
-    },
-    {
-      "filename": "initialize-namespace.md"
-    },
-    {
-      "filename": "version.md"
-    }
-  ],
-  "title": "Docs",
-  "copyright": "<a href='http://pulsar.apache.org/'>Apache Pulsar</a>"
-}
diff --git a/site2/website/brodocs/pulsar-perf-manifest.json b/site2/website/brodocs/pulsar-perf-manifest.json
deleted file mode 100644
index 217090af02c..00000000000
--- a/site2/website/brodocs/pulsar-perf-manifest.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "docs": [
-    {
-      "filename": "pulsar-perf.md"
-    }
-  ],
-  "title": "Docs",
-  "copyright": "<a href='http://pulsar.apache.org/'>Apache Pulsar</a>"
-}
diff --git a/site2/website/brodocs/scroll.js b/site2/website/brodocs/scroll.js
deleted file mode 100644
index 957af65bbcc..00000000000
--- a/site2/website/brodocs/scroll.js
+++ /dev/null
@@ -1,196 +0,0 @@
-$(document).ready(function() {
-
-    /**
-     * TODO: Refactor with intent toward pure functions. Mutation of state can lead to bugs and difficult debugging.
-     */
-
-    var toc = navData.toc;
-    var flatToc = navData.flatToc.reverse();
-
-    function collectNodes(tocMap) {
-        var tocNodes = {};
-        tocMap.map(function(node, index) {
-            var sectionNode = $('#' + node.section);
-            var tocSubsections = {};
-            tocItem = {section: sectionNode};
-            var subsectionNodes;
-            if (node.subsections) {
-                subsectionNodes = (collectNodes(node.subsections));
-                tocItem.subsections = subsectionNodes;
-            }
-            tocNodes[node.section] = tocItem;
-        });
-        return tocNodes;
-    }
-    var tocItems = collectNodes(toc);
-
-    function collectNodesFlat(tocMap, obj) {
-        var collect = obj || {};
-        tocMap.map(function(node, index) {
-            var sectionNode = $('#' + node.section);
-            tocItem = {section: sectionNode};
-            if (node.subsections) {
-                subsectionNodes = (collectNodesFlat(node.subsections, collect));
-            }
-            collect[node.section] = sectionNode;
-        });
-        return collect;
-    }
-    var tocFlat = collectNodesFlat(toc);
-
-    var prevSectionToken;
-    var prevSubsectionToken;
-    var activeTokensObj = {};
-
-    function scrollActions(scrollPosition) {
-        var activeSection = checkNodePositions(toc, tocFlat, scrollPosition);
-        var activeSubSection,
-            prevL1Nav,
-            currL1Nav,
-            prevL2Nav,
-            currL2Nav;
-
-        // No active section - return existing activeTokensObj (may be empty)
-        if (!activeSection) {
-            return activeTokensObj;
-        }
-
-        /**
-         * This block deals with L1Nav sections
-         */
-
-        // If no previous token, set previous to current active and show L1Nav
-        if (!prevSectionToken) {
-            prevSectionToken = activeSection.token;
-            currL1Nav = getNavNode(activeSection.token);
-            currL1Nav.show('fast');
-        } 
-        // If active is not the same as previous, hide previous L1Nav and show current L1Nav; set previous to current
-        else if (activeSection.token !== prevSectionToken) {
-            prevL1Nav = getNavNode(prevSectionToken);
-            currL1Nav = getNavNode(activeSection.token);
-            prevL1Nav.hide('fast');
-            currL1Nav.show('fast');
-            prevSectionToken = activeSection.token;
-        }
-
-        /**
-         * This block deals with L2Nav subsections
-         */
-
-        // If there is a subsections array and it has a non-zero length, set active subsection
-        if (activeSection.subsections && activeSection.subsections.length !== 0) {
-            activeSubSection = checkNodePositions(activeSection.subsections, tocFlat, scrollPosition);
-            if (activeSubSection) {
-                if (!prevSubsectionToken) {
-                    prevSubsectionToken = activeSubSection.token;
-                    currL2Nav = getNavNode(activeSubSection.token);
-                    currL2Nav.show('fast');
-                } else if (activeSubSection.token !== prevSubsectionToken) {
-                    prevL2Nav = getNavNode(prevSubsectionToken);
-                    currL2Nav = getNavNode(activeSubSection.token);
-                    prevL2Nav.hide('fast');
-                    currL2Nav.show('fast');
-                    prevSubsectionToken = activeSubSection.token;
-                }
-            } else {
-                prevL2Nav = getNavNode(prevSubsectionToken);
-                prevL2Nav.hide('fast');
-                prevSubsectionToken = null;
-            }
-        }
-        activeTokensObj.L1 = prevSectionToken;
-        activeTokensObj.L2 = prevSubsectionToken;
-        return activeTokensObj;
-    }
-
-    /**
-     * Checks for active elements by scroll position
-     */
-
-    var prevElemToken;
-    var activeElemToken;
-
-    function checkActiveElement(items, scrollPosition) {
-        var offset = 50;
-        var offsetScroll = scrollPosition + offset;
-        var visibleNode;
-        for (var i = 0; i < items.length; i++) {
-            var token = items[i];
-            var node = getHeadingNode(token);
-            if (offsetScroll >= node.offset().top) {
-                activeElemToken = token;
-            }
-        }
-        if (!prevElemToken) {
-            getNavElemNode(activeElemToken).addClass('selected');
-            prevElemToken = activeElemToken;
-            return;
-        }
-        if (activeElemToken !== prevElemToken) {
-            getNavElemNode(prevElemToken).removeClass('selected');
-            getNavElemNode(activeElemToken).addClass('selected');
-            prevElemToken = activeElemToken;
-        }
-        return activeElemToken;
-    }
-
-    function getHeadingNode(token) {
-        return $('#' + token);
-    }
-
-    function getNavNode(token) {
-        return $('#' + token + '-nav');
-    }
-
-    function getNavElemNode(token) {
-        return $('#sidebar-wrapper > ul a[href="#' + token + '"]');
-    }
-
-    function checkNodePositions(nodes, flatNodeMap, scrollPosition) {
-        var activeNode;
-        for (var i = 0; i < nodes.length; i++) {
-            var item = nodes[i];
-            var node = flatNodeMap[item.section];
-            var nodeTop = node.offset().top - 50;
-            if (scrollPosition >= nodeTop) {
-                activeNode = {token: item.section, node: node};
-
-                if (item.subsections) {
-                    activeNode.subsections = item.subsections;
-                }
-                break;
-            }
-        }
-        return activeNode;
-    }
-
-    function scrollToNav(token) {
-        setTimeout(function() {
-            var scrollPosition = $(window).scrollTop();
-            var activeSectionTokens = scrollActions(scrollPosition);
-            var activeElemToken = checkActiveElement(flatToc, scrollPosition);
-            var navNode = $('#sidebar-wrapper > ul a[href="#' + token + '"]');
-            $('#sidebar-wrapper').scrollTo(navNode, {duration: 'fast', axis: 'y'});
-        }, 200);
-    }
-
-    $(window).on('hashchange', function(event) {
-        var scrollPosition = $(window).scrollTop();
-        var activeSectionTokens = scrollActions(scrollPosition);
-        var activeElemToken = checkActiveElement(flatToc, scrollPosition);
-        var scrollToken = activeSectionTokens.L2 ? activeSectionTokens.L2 : activeSectionTokens.L1;
-        scrollToNav(scrollToken);
-        var token = location.hash.slice(1);
-    });
-
-    var scrollPosition = $(window).scrollTop();
-    scrollActions(scrollPosition);
-    checkActiveElement(flatToc, scrollPosition);
-    // TODO: prevent scroll on sidebar from propogating to window
-    $(window).on('scroll', function(event) {
-        var scrollPosition = $(window).scrollTop();
-        var activeSectionTokens = scrollActions(scrollPosition);
-        var activeElemToken = checkActiveElement(flatToc, scrollPosition);
-    });
-});
diff --git a/site2/website/brodocs/stylesheet.css b/site2/website/brodocs/stylesheet.css
deleted file mode 100644
index 61bf3c5dc60..00000000000
--- a/site2/website/brodocs/stylesheet.css
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
-Kubernetes colors
-
-kubernetes blue - rgb(50, 109, 230)
-dark blue - rgb(51, 113, 227)
-dark grey - rgb(48, 48, 48)
-light grey - rgb(161, 160, 158)
-*/
-
-/* User agent CSS overrides */
-#sidebar-wrapper ul, #sidebar-wrapper li {
-    margin-left: 10px;
-    padding-left: 0;
-}
-
-/* Inspired by Slate CSS */
-.body-content aside {
-    padding: 1.6em;
-    margin: 1.8em 0;
-    background: lightsteelblue;
-    line-height: 1.6;
-    border-radius: 15px;
-}
-
-.body-content aside.warning {
-    background-color: peachpuff;
-}
-
-.body-content aside.success {
-    background-color: olivedrab;
-}
-
-.body-content aside:before {
-    vertical-align: middle;
-    padding-right: 1em;
-    font-size: 16px;
-}
-
-.body-content aside.warning:before, .body-content aside.notice:before, .body-content aside.success:before {
-    font-family: 'FontAwesome';
-    font-style: normal;
-    font-weight: normal;
-    font-variant: normal;
-    text-transform: none;
-    line-height: 1;
-}
-
-.body-content aside.warning:before {
-    content: "\f071";
-}
-
-.body-content aside.notice:before {
-    content: "\f05a";
-}
-
-.body-content hr {
-    margin: 2em 0;
-    border-top: 2px solid dimgrey;
-    border-bottom: 2px solid antiquewhite;
-}
-
-.body-content table {
-    margin-bottom: 1em;
-    overflow: auto;
-}
-
-.body-content table th, .body-content table td {
-    text-align: left;
-    vertical-align: top;
-    line-height: 1.6;
-}
-
-.body-content table th {
-    padding: 15px 20px;
-    border-bottom: 1px solid lightsteelblue;
-    vertical-align: bottom;
-}
-
-.body-content table td {
-    padding: 10px;
-}
-
-.body-content table tr:last-child {
-    border-bottom: 1px solid lightsteelblue;
-}
-
-.body-content table tr:nth-child(odd) > td {
-    background-color: whitesmoke;
-}
-
-.body-content table tr:nth-child(even) > td {
-    background-color: lightsteelblue;
-}
-
-.body-content dt {
-    font-weight: bold;
-}
-
-.body-content dd {
-    margin-left: 15px;
-}
-
-.body-content p, .body-content li, .body-content dt, .body-content dd {
-    line-height: 1.6;
-    margin-top: 0;
-}
-
-/* Brodoc CSS */
-
-body > #wrapper {
-    display: block;
-    padding-bottom: 500px;
-    background-image: linear-gradient(90deg, #FFFFFF 63%, rgb(48, 48, 48) 63%);
-}
-
-#sidebar-wrapper {
-    display: block;
-    height: 100%;
-    width: 20%;
-    position: fixed;
-    z-index: 1;
-    top: 0;
-    left: 0;
-    background-color: whitesmoke;
-    border-right: 2px solid slategrey;
-    overflow-x: hidden;
-    padding-top: 60px;
-}
-
-#sidebar-wrapper a {
-    text-decoration: none;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    padding: 0 5px;
-}
-
-#sidebar-wrapper ul {
-    list-style: none;
-}
-
-#sidebar-wrapper a.selected {
-    font-style: bold;
-    color: whitesmoke;
-    border: 1px solid rgb(161, 160, 158);
-    background-color: rgb(51, 113, 227);
-    border-radius: 5px;
-}
-
-#sidebar-wrapper .strong-nav {
-    font-family: monospace;
-    font-weight: bold;
-}
-
-#sidebar-wrapper .nav-level-1.strong-nav {
-    margin-top: 25px;
-}
-
-#sidebar-wrapper .copyright {
-    padding-left: 10px;
-    padding-top: 50px;
-    padding-bottom: 50px;
-    text-decoration: underline;
-}
-
-#page-content-wrapper {
-    margin-left: 20%;
-    padding-top: 60px;
-}
-
-.body-content h1, .body-content h2 {
-    width: 52%;
-    clear: both;
-    border-bottom: 3px solid lightslategrey;
-}
-
-.body-content > h3, .body-content > h4, .body-content > h5, .body-content > h6, .body-content > p, .body-content > aside, .body-content > ul > li, .body-content > ul > li {
-    width: 52%;
-    padding-top: 20px;
-}
-
-.body-content table {
-    width: 52%;
-    word-break: break-word;
-}
-
-.body-content table tr td:not(:first-child) {
-    overflow-wrap: break-word;
-    word-wrap: break-word;
-}
-
-.body-content table tr td a {
-    word-break: break-word;
-}
-
-.body-content p code {
-    text-overflow: ellipsis;
-    display: inline-block;
-    font-size: smaller;
-    word-break: break-word;
-}
-
-.body-content blockquote {
-    border-left: 0;
-    border-radius: 5px;
-}
-
-.body-content pre.code-block {
-    margin-bottom: 80px;
-}
-
-.body-content blockquote p, .body-content pre {
-    color: black;
-    font-size: 13px;
-}
-
-.body-content blockquote.code-block {
-    background: lightsteelblue;
-}
-
-.body-content pre.code-block code {
-  overflow: auto;
-  overflow-wrap: normal;
-  word-wrap: normal;
-  white-space: pre;
-}
-
-.code-block {
-    display: none;
-    width: 45%;
-    float: right;
-    clear: right;
-}
-
-.code-block.active {
-    display: initial;
-}
-
-#code-tabs-wrapper {
-    width: 35%;
-    height: 60px;
-    position: fixed;
-    top: 0;
-    right: 0;
-}
-
-#code-tabs-wrapper .code-tab-list {
-    float: right;
-    margin-top: 0;
-    padding: 0 10px;
-}
-
-#code-tabs-wrapper .code-tab {
-    color: white;
-    display: inline-block;
-    padding: 0 30px;
-    background: rgb(48, 48, 48);
-    border: 1px solid rgb(161, 160, 158);
-    border-radius: 5px;
-}
-
-#code-tabs-wrapper .tab-selected {
-    background: rgb(51, 113, 227);
-    font-style: bold;
-    border-radius: 5px;
-}
-
-.side-nav a {
-    color: black;
-}
-
diff --git a/site2/website/brodocs/tabvisibility.js b/site2/website/brodocs/tabvisibility.js
deleted file mode 100644
index 48c0df7fe26..00000000000
--- a/site2/website/brodocs/tabvisibility.js
+++ /dev/null
@@ -1,27 +0,0 @@
-$(document).ready(function() {
-    var codeTabs = $('#code-tabs-wrapper').find('li');
-
-    for (var i = 0; i < codeTabs.length; i++) {
-        createCodeTabListeners(codeTabs, i);
-    }
-
-    function createCodeTabListeners(codeTabs, index) {
-        var tab = $(codeTabs[index]),
-            id = tab.attr('id'),
-            codeClass = '.' + id;
-        tab.on('click', function() {
-            codeTabs.removeClass('tab-selected');
-            tab.addClass('tab-selected');
-            $('.code-block').removeClass('active');
-            $(codeClass).addClass('active');
-         
-        });
-    }
-
-    function setDefautTab() {
-        $(codeTabs[0]).addClass('tab-selected');
-        $('.' + codeTabs[0].id).addClass('active');
-    }
-
-    setDefautTab();
-});
\ No newline at end of file
diff --git a/site2/website/coding-guide.md b/site2/website/coding-guide.md
deleted file mode 100644
index b23b5be4e76..00000000000
--- a/site2/website/coding-guide.md
+++ /dev/null
@@ -1,79 +0,0 @@
-The guidelines help to encourage consistency and best practices among people working on _Apache Pulsar_ code base. You should observe the guidelines unless there is compelling reason to ignore them. We use checkstyle to enforce coding style, refer to our [checkstyle rules](https://github.com/apache/pulsar/blob/master/buildtools/src/main/resources/pulsar/checkstyle.xml) for all enforced checkstyle rules.
-
-## Java
-
-Apache Pulsar code follows the [Sun Java Coding Convention](http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html), with the following additions.
-
-* Lines can not be longer than 120 characters.
-* Indentation should be **4 spaces**. Tabs should never be used.
-* Use curly braces even for single-line ifs and elses.
-* No @author tags in any javadoc.
-* Use try-with-resources blocks whenever is possible.
-* **TODO**s should be associated to at least one issue. 
-
-## Dependencies
-
-Apache Pulsar uses the following libraries a lot:
-
-* [Guava](https://github.com/google/guava): as a fundamental core library
-* [Netty](http://netty.io/): for network communications and memory buffer management.
-
-Use these libraries whenever possible rather than introducing more dependencies. 
-
-Dependencies are bundled with our binary distributions, so we need to attach the relevant licenses. See [Third party dependencies and licensing](https://pulsar.apache.org/docs/en/client-libraries/) for a guide on how to do it correctly.
-
-## Future
-
-Java-8 Future is preferred over Guava's Listenable Future. Use Java-8 Future whenever possible.
-
-## Memory
-
-Use netty _ByteBuf_ over java nio _ByteBuffer_ for internal usage. As we are using Netty Buffer for memory management.
-
-## Logging
-
-* Logging should be taken seriously. Please take the time to access the logs when making a change to ensure that the important things are getting logged and there is no junk there.
-* Logging statements should be complete sentences with proper capitalization that are written to be read by a person not necessarily familiar with the source code.
-* All loggings should be done with **SLF4j**, never _System.out_ or _System.err_.
-
-### Logging levels
-
-- _INFO_ is the level you should assume the software will be run in. INFO messages are things which are not bad but which the user will definitely want to know about every time they occur.
-- _TRACE_ and _DEBUG_ are both things you turn on when something is wrong and you want to figure out what is going on. _DEBUG_ should not be so fine grained that it will seriously affect performance of the program. _TRACE_ can be anything. You should wrap _DEBUG_ and _TRACE_ statements in the `if (logger.isDebugEnabled)` or `if (logger.isTraceEnabled)` check to avoid performance degradation.
-- _WARN_ and _ERROR_ indicate something that is **BAD**. Use _WARN_ if you aren't totally sure it is bad, and _ERROR_ if you are.
-
-Log the _stack traces_ at **ERROR** level, but never at **INFO** level or below. You can log at **WARN** level if you are interested in debugging.
-
-## Monitoring
-
-* Any new features should come with appropriate metrics, so monitoring the feature is working correctly.
-* Those metrics should be taken seriously and only export useful metrics that would be used on production on monitoring/alerting healthy of the system, or troubleshooting problems.
-
-## Unit tests
-
-* New changes should come with unit tests that verify the functionality being added.
-* Unit tests should test the least amount of code possible. Don't start the whole server unless there is no other way to test a single class or small group of classes in isolation.
-* Tests should not depend on any external resources. They need to setup and teardown their own stuff.
-* It is okay to use the filesystem and network in tests since that's our business, but you need to clean up them after test.
-* _Do not_ use sleep or other timing assumptions in tests. It is wrong and will fail intermittently on any test server with other things going on that causes delays.
-* You'd better add a _timeout_ value to all test cases, to prevent a build from completing indefinitely. For example, `@Test(timeout=60000)`
-
-## Configuration
-
-* When you use the config files, think of the names from the very beginning.
-* If you run the program without tuning parameters, use the default values.
-* All configuration settings should be added accordingly in the [default configuration file](https://github.com/apache/pulsar/tree/master/conf) directory and documented accordingly.
-
-## Concurrency
-
-Apache Pulsar is a low latency system, it is implemented as a purely asynchronous service, which is accomplished as follows:
-
-* All public classes should be **thread-safe**.
-* We prefer using [OrderedExecutor](https://github.com/apache/bookkeeper/blob/master/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java) for executing any asynchronous actions. The mutations to the same instance should be submitted to the same thread to execute.
-* If synchronization and locking are required, they should be in a fine granularity way.
-* All threads should have proper meaningful name.
-* If a class is not thread-safe, it should be annotated [@NotThreadSafe](https://github.com/misberner/jsr-305/blob/master/ri/src/main/java/javax/annotation/concurrent/NotThreadSafe.java). The instances that use this class is responsible for its synchronization.
-
-## Backwards compatibility
-* Wire protocol should support backwards compatibility to enable no-downtime upgrades. This means the servers **MUST** be able to support requests from both old and new clients simultaneously.
-* Metadata formats and data formats should support backwards compatibility.
diff --git a/site2/website/contributing.md b/site2/website/contributing.md
deleted file mode 100644
index 269bd266f14..00000000000
--- a/site2/website/contributing.md
+++ /dev/null
@@ -1,439 +0,0 @@
-
-The Apache Pulsar community welcomes contributions from anyone with a passion for distributed systems! Pulsar has many different opportunities for contributions --
-write new examples/tutorials, add new user-facing libraries, write new Pulsar IO connectors, or participate on the documentation effort.
-
-We use a review-then-commit workflow in Pulsar for all contributions.
-
-**For larger contributions or those that affect multiple components:**
-
-1. **Engage**: We encourage you to work with the Pulsar community on the
-   [Github Issues](https://github.com/apache/pulsar/issues) and
-   [developer’s mailing list](/contact) to identify
-   good areas for contribution.
-1. **Design:** More complicated contributions will likely benefit from some early discussion in
-   order to scope and design them well.
-
-**For all contributions:**
-
-1. **Code:** code changes are always welcomed. 
-2. **Doc**: it is worth taking the time to make users know your code changes. Pulsar's long-term success rests on its ease of use, maintainability, etc. 
-3. **Review:** Submit a pull request with your contribution to our
-   [GitHub Repo](https://github.com/apache/pulsar). Work with a committer to review and
-   iterate on the code, if needed.
-4. **Commit:** Once at least 2 Pulsar committers have approved the pull request, a Pulsar committer
-    will merge it into the master branch (and potentially backport to stable branches in case of
-    bug fixes).
-
-We look forward to working with you!
-
-## Engage
-
-### Mailing list(s)
-
-We discuss design and implementation issues on the [dev@pulsar.apache.org](mailto:dev@pulsar.apache.org)
-mailing list, which is archived [here](https://lists.apache.org/list.html?dev@pulsar.apache.org).
-Join by emailing [`dev-subscribe@pulsar.apache.org`](mailto:dev-subscribe@pulsar.apache.org).
-
-If interested, you can also join the other [mailing lists](/contact).
-
-### Github Issues
-
-We are using [Github Issues](https://github.com/apache/pulsar/issues) as the issue tracking
-and project management tool, as well as a way to communicate among a very diverse and distributed set
-of contributors. To be able to gather feedback, avoid frustration, and avoid duplicated efforts all
-Pulsar related work are being tracked there.
-
-If you do not already have an Github account, sign up [here](https://github.com/join).
-
-If a quick [search](https://github.com/apache/pulsar/issues) doesn’t turn up an existing
-Github issue for the work you want to contribute, create it. Please discuss your idea with a
-committer in Github or, alternatively, on the developer mailing list.
-
-If there’s an existing Github issue for your intended contribution, please comment about your intended
-work. Once the work is understood, a committer will assign the issue to you. If an issue is currently
-assigned, please check with the current assignee before reassigning.
-
-For moderate or large contributions, you should not start coding or writing a design document unless
-there is a corresponding Github issue assigned to you for that work. Simple changes, like fixing typos,
-do not require an associated issue.
-
-### Online discussions
-
-We are using [Apache Pulsar Slack channel](https://apache-pulsar.slack.com/) for online discussions.
-You can self-invite yourself by accessing [this link](https://apache-pulsar.herokuapp.com/).
-
-Slack channels are great for quick questions or discussions on specialized topics. Remember that we
-strongly encourage communication via the mailing lists, and we prefer to discuss more complex subjects
-by email. Developers should be careful to move or duplicate all the official or useful discussions to
-the issue tracking system and/or the dev mailing list.
-
-## Design
-
-To avoid potential frustration during the code review cycle, we encourage you to clearly scope and
-design non-trivial contributions with the Pulsar community before you start coding.
-
-We are using "Pulsar Improvement Proposals" (or "PIP") for managing major changes to Pulsar. The
-list of all PIPs is maintained in the Pulsar wiki at https://github.com/apache/pulsar/wiki.
-
-## Code
-
-To contribute code to Apache Pulsar, you’ll have to do a few administrative steps once, and then
-follow the [Coding Guide](../coding-guide).
-
-### One-time Setup
-
-#### [Optionally] Submit Contributor License Agreement
-
-Apache Software Foundation (ASF) desires that all contributors of ideas, code, or documentation to the Apache projects complete, sign, and submit an [Individual Contributor License Agreement](https://www.apache.org/licenses/icla.pdf) (ICLA). The purpose of this agreement is to clearly define the terms under which intellectual property has been contributed to the ASF and thereby allow us to defend the project should there be a legal dispute regarding the software at some future time.
-
-We require you to have an ICLA on file with the Apache Secretary for larger contributions only. For smaller ones, however, we rely on [clause five](http://www.apache.org/licenses/LICENSE-2.0#contributions) of the Apache License, Version 2.0, describing licensing of intentionally submitted contributions and do not require an ICLA in that case.
-
-#### Obtain a GitHub account
-
-We use GitHub’s pull request functionality to review proposed code changes.
-
-If you do not already have a personal GitHub account, sign up [here](https://github.com/join).
-
-#### Fork the repository on GitHub
-
-Go to the [Pulsar GitHub Repo](https://github.com/apache/pulsar/) and fork the repository
-to your own private account. This will be your private workspace for staging changes.
-
-#### Clone the repository locally
-
-You are now ready to create the development environment on your local machine. Feel free to repeat
-these steps on all machines that you want to use for development.
-
-We assume you are using SSH-based authentication with GitHub. If necessary, exchange SSH keys with
-GitHub by following [their instructions](https://help.github.com/articles/generating-an-ssh-key/).
-
-Clone your personal Pulsar’s GitHub fork.
-
-    $ git clone https://github.com/<Github_user>/pulsar.git
-    $ cd pulsar
-
-Add Apache Repo as additional Git remotes, where you can sync the changes (for committers, you need
-these two remotes for pushing changes).
-
-	$ git remote add apache https://github.com/apache/pulsar
-
-You are now ready to start developing!
-
-#### IDE Setup
-
-For how to set up IDE, see [here](https://github.com/apache/pulsar/blob/master/README.md#setting-up-your-ide). 
-
-
-### Create a branch in your fork
-
-You’ll work on your contribution in a branch in your own (forked) repository. Create a local branch, initialized with the state of the branch you expect your changes to be merged into. Keep in mind that we use several branches, including `master`, feature-specific, and release-specific branches. If you are unsure, initialize with the state of the `master` branch.
-
-	$ git fetch apache
-	$ git checkout -b <my-branch> apache/master
-
-At this point, you can start making and committing changes to this branch in a standard way.
-
-### Syncing and pushing your branch
-
-Periodically while you work, and certainly before submitting a pull request, you should update your branch with the most recent changes to the target branch.
-
-    $ git pull --rebase
-
-Remember to always use `--rebase` parameter to avoid extraneous merge commits.
-
-Then you can push your local, committed changes to your (forked) repository on GitHub. Since rebase may change that branch's history, you may need to force push. You'll run:
-
-	$ git push <GitHub_user> <my-branch> --force
-
-### Testing
-
-All code should have appropriate unit testing coverage. New code should have new tests in the same contribution. Bug fixes should include a regression test to prevent the issue from reoccurring.
-
-
-### CI Testing in your Fork
-
-The following is copied from the
-[thread](https://lists.apache.org/thread/1ofdbd9j1hhj4c0rw3o7vv8y6rbsxrp0) and [#15385](https://github.com/apache/pulsar/pull/15385).
-
-
-#### Each PR triggers many CI Jobs
-Since we cannot add more resources to Pulsar CI, we need to find other ways
-to reduce the load on Pulsar CI.
-Every developer can help reduce the load on Pulsar CI.
-Please don't open a PR to apache/pulsar when the work is in very initial
-stages.
-Every push to the pull request branch will trigger a lot of concurrent
-builds (about 25).
-By reducing the amount of PR pushes you can reduce the load on Pulsar CI.
-
-#### Run CI from Fork
-You don't have to stop developing and using CI for getting feedback. There
-is a better way to get CI feedback for early stages of development. The
-secret is that everyone has their personal CI on GitHub!
-Please take use of it when you have large changes which stay in WIP for
-long periods of time, and you push a lot of changes before the actual
-reviews start.
-
-Here are instructions to use your personal CI on GitHub.
-
-1. Push your intended pull request changes to a new branch in your fork
-   (the usual way you do it).
-2. Open a pull request to your own fork.
-
-A.) These are the instructions for CLI:
-
-Install GitHub CLI from https://cli.github.com/ and configure it.
-With GH CLI, there's an easy way to open the PR to your own fork with a
-single command:
-```
-gh pr create --repo=your_github_id/pulsar --base master --head your-pr-branch -f
-```
-B.) You can also create a PR to your own fork in the GitHub UI when opening
-a new PR. To do so, first click on "compare across forks" and then choose
-your own fork as both the forked repository and head repository.
-
-#### Stay in-sync with apache/pulsar:master
-
-It's worth keeping your master branch in sync with apache/pulsar's master
-so that the PR diff will be reasonable in your own fork.
-
-Here's one way to sync your fork's master branch with apache/pulsar's
-master branch:
-Let's say you have git remotes called "upstream" for apache/pulsar and
-"forked" for your fork, with these commands,
-you synchronize your fork's remote master branch with apache/pulsar's
-master branch:
-
-- replace "upstream" with the name of the git remote for apache/pulsar
-- replace "forked" with the name of the git remote for your fork of pulsar
-
-```
-git fetch upstream
-git push -f forked upstream/master:master
-```
-
-
-When you finally want to create a PR to apache/pulsar, it can be started
-from the command line (this will open a browser for filling in the PR
-details):
-```
-gh pr create --repo=apache/pulsar --base master --head your-pr-branch --web
-```
-
-#### SSH to CI Jobs
-
-The additional benefit of the "Personal CI" is that you get SSH access to the build VMs when the build is running.
-That is handled by this logic in the pulsar-ci.yaml GitHub Actions workflow file:
-`pulsar/.github/workflows/pulsar-ci.yaml`
-
-
-```
-- name: Setup ssh access to build runner VM
-  # ssh access is enabled for builds in own forks
-  if: ${{ github.repository != 'apache/pulsar' && needs.changed_files_job.outputs.docs_only != 'true' }}
-  uses: ./.github/actions/ssh-access
-  with:
-  limit-access-to-actor: true
-```
-and inline composite action [implementation](https://github.com/apache/pulsar/blob/master/.github/actions/ssh-access/action.yml).
-The SSH access is secured with the SSH key registered in GitHub.
-For example, your public keys are https://github.com/horizonzy.keys.
-You will first have to register an SSH public key in GitHub for that to work.
-
-### Licensing
-
-All code contributed to Pulsar will be licensed under [Apache License V2](https://www.apache.org/licenses/LICENSE-2.0). You need to ensure every new files you are adding have the right
-license header. You can add license header to your files by running following command:
-
-```shell
-$ mvn initialize license:format
-```
-
-### Develop C++/Python Client
-
-Currently C++ and Python client are developed under `pulsar-client-cpp` directory. You can use following commands to build and test your c++ or python code changes.
-
-#### Build C++/Python Client
-
-```
-$ ./pulsar-client-cpp/docker-build.sh
-```
-
-### Run C++/Python Client Tests
-
-```
-$ ./pulsar-client-cpp/docker-test.sh
-```
-
-### Checkstyle
-
-Before you push the C++/Python changes for review, you should format the files to apply the checkstyle rule Pulsar is using for C++/Python code.
-
-```
-$ ./pulsar-client-cpp/docker-format.sh
-```
-
-## Review
-
-Once the initial code is complete and the tests pass, it’s time to start the code review process. We review and discuss all code, no matter who authors it. It’s a great way to build community, since you can learn from other developers, and they become familiar with your contribution. It also builds a strong project by encouraging a high quality bar and keeping code consistent throughout the project.
-
-### Create a pull request
-
-Organize your commits to make a committer’s job easier when reviewing. Committers normally prefer multiple small pull requests, instead of a single large pull request. Within a pull request, a relatively small number of commits that break the problem into logical steps is preferred. For most pull requests, you'll squash your changes down to 1 commit. You can use the following command to re-order, squash, edit, or change description of individual commits.
-
-    $ git rebase -i apache/master
-
-You'll then push to your branch on GitHub. Note: when updating your commit after pull request feedback and use squash to get back to one commit, you will need to do a force submit to the branch on your repo.
-
-Navigate to the [Pulsar GitHub Repo](https://github.com/apache/pulsar) to create a pull request.
-
-> **Note**
-> 
-> Vague, boring, and unclear PR titles decrease team efficiency and productivity. Good titles speed up the review process and increase search efficiency. PR titles should be engaging, easy to understand, and readable. For how to **write self​-explanatory PR titles** and **quality PR title examples**, see [[Guideline] Pulsar PR Naming Convention](https://docs.google.com/document/d/1d8Pw6ZbWk-_pCKdOmdvx9rnhPiyuxwq60_TrD68d7BA/edit#).
-
-In the pull request description, please include:
-
- * Motivation : Why is this change needed? What problem is addressing?
- * Changes: Summary of what this pull request is changing, to help reviewers at better understanding
-   the changes.
-
-Please include a descriptive pull request message to help make the committer’s job easier when reviewing.
-It’s fine to refer to existing design docs or the contents of the associated issue as appropriate.
-
-If the pull request is fixing an issue, include a mention to in the description, like:
-
-```
-Fixes #1234
-```
-
-This will automatically change the state on the referenced issues.
-
-If you know a good committer to review your pull request, please make a comment like the following. If not, don’t worry -- a committer will pick it up.
-
-	Hi @<GitHub-committer-username>, can you please take a look?
-
-When choosing a committer to review, think about who is the expert on the relevant code, who the stakeholders are for this change, and who else would benefit from becoming familiar with the code. If you’d appreciate comments from additional folks but already have a main committer, you can explicitly cc them using `@<GitHub-committer-username>`.
-
-### Code Review and Revision
-
-During the code review process, don’t rebase your branch or otherwise modify published commits, since this can remove existing comment history and be confusing to the committer when reviewing. When you make a revision, always push it in a new commit.
-
-Our GitHub repo automatically provides pre-commit testing coverage using Jenkins. Please make sure those tests pass; the contribution cannot be merged otherwise.
-
-### LGTM
-
-Once the committer is happy with the change, they’ll approve the pull request with an LGTM (“*looks good to me!*”) or a `+1`. At this point, the committer will take over, possibly make some additional touch ups, and merge your changes into the codebase.
-
-In the case the author is also a committer, either can merge the pull request. Just be sure to communicate clearly whose responsibility it is in this particular case.
-
-Thank you for your contribution to Pulsar!
-
-### Deleting your branch
-Once the pull request is merged into the Pulsar repository, you can safely delete the branch locally and purge it from your forked repository.
-
-From another local branch, run:
-
-	$ git fetch origin
-	$ git branch -d <my-branch>
-	$ git push origin --delete <my-branch>
-
-## Commit (committers only)
-
-Once the code has been peer reviewed by a committer, the next step is for the committer to merge it into the Github repo.
-
-Pull requests should not be merged before the review has approved from at least 2 committers.
-
-> **Tip**
-> 
-> Git commit message is not only the best way to communicate context about code changes, but also shows whether a developer is a good collaborator. If the first commit message of a PR is not clear but the PR description is clear and concise, when merging a PR, consider copying the PR description to the commit message box or writing a proper one rather than using the default (first) commit message (see image below). In this way, others know the changes clearly, which is beneficial to cut  [...]
- 
-![Submit clear commit message](../../img/commit-message.png)
-
-### Contributor License Agreement
-
-If you are merging a larger contribution, please make sure that the contributor has an ICLA on file with the Apache Secretary. You can view the list of committers [here](http://home.apache.org/phonebook.html?unix=committers), as well as [ICLA-signers who aren’t yet committers](http://home.apache.org/unlistedclas.html).
-
-For smaller contributions, however, this is not required. In this case, we rely on [clause five](http://www.apache.org/licenses/LICENSE-2.0#contributions) of the Apache License, Version 2.0, describing licensing of intentionally submitted contributions.
-
-## Documentation
-
-### Website
-
-The Pulsar website is in the same [Pulsar Github Repo](https://github.com/apache/pulsar). The source files are hosted under `site2` directory in `master` branch,
-the static content is generated by CI job and merged into the `asf-site` branch.
-
-Follow the [README](https://github.com/apache/pulsar/tree/master/site2) for making contributions to the website.
-
-#### Updating user logo
-The Apache Pulsar Community welcomes all users to update their company logos on Pulsar website. If your team or organization has adopted Pulsar in production, you can update your company logos on [Pulsar website](https://pulsar.apache.org/en/powered-by/).
-
-To update your company logo, follow these steps:
-1. Open [link](https://github.com/apache/pulsar/blob/master/site2/website/data/users.js) in your browser, then click the **Edit** icon to fork Pulsar repo, create a new branch and edit this file.
-2. Add your company’s information at the end of file. 
-
-	Example:
-	```
-	{
-	name: 'StreamNative',
-	url: 'https://streamnative.io/',
-	logo: 'https://streamnative.io/static/images/streamnative-logo-white-bakground.png',
-	logo_white: true
-	}
-	```
-	>Note
-	></br>The `logo_white` parameter is set to `true` only when your company logo is in white color. Otherwise, you only need to add `name`, `url` and `logo`.
-
-3. Commit the changes in your account’s repo, publish the branch and create pull request.
-4. Update comments, if any. If no more comment, your pull request will be approved and merged by reviewers.
-
-## Becoming a committer
-
-Committers are community members that have write access to the project’s
-repositories, i.e., they can modify the code, documentation, and website
-by themselves and also accept other contributions.
-
-There is no strict protocol for becoming a committer. Candidates for new
-committers are typically people that are active contributors and
-community members.
-
-Being an active community member means participating on mailing list
-discussions, helping to answer questions, verifying release candidates,
-being respectful towards others, and following the meritocratic
-principles of community management. Since the
-[Apache Way](https://www.apache.org/foundation/governance/)
-has a strong focus on the project community, this part is very important.
-
-Of course, contributing code and documentation to the project is
-important as well. A good way to start is contributing improvements, new
-features, or bug fixes. You need to show that you take responsibility
-for the code that you contribute, add tests and documentation, and help
-maintaining it.
-
-Every new committer has to be proposed by a current committer and then
-privately discussed and voted in by the members of the Pulsar PMC.
-For details about this process and for candidate requirements see the
-general [Apache guidelines for assessing new candidates for committership](https://community.apache.org/newcommitter.html).
-Candidates prepare for their nomination as committer by contributing
-to the Pulsar project and its community, by acting according to the
-[Apache Way](https://www.apache.org/foundation/how-it-works.html),
-and by generally following the path from
-[contributor to committer](https://community.apache.org/contributors/)
-for Apache projects.
-
-If you would like to become a committer, you should engage with the
-community and start contributing to Apache Pulsar in any of the above
-ways. You might also want to talk to other committers and ask for their
-advice and guidance.
-
-## Becoming member of PMC
-
-The PMC is the project governance body. Committers or contributors that
-have demonstrated continued involvement with the community can be
-nominated to become members of the PMC.
-
-PMC members nominate new contributors to the project as either
-committers or as new PMC members, and PMC members cast votes on electing
-new committers or PMC members to the project. PMC members also have
-binding votes on any project matters. Refer to
-[ASF PMCs governance](http://www.apache.org/foundation/governance/pmcs.html)
-for a more detailed explanation of the duties and roles of the PMC.
diff --git a/site2/website/core/Footer.js b/site2/website/core/Footer.js
deleted file mode 100644
index 03a430e11ae..00000000000
--- a/site2/website/core/Footer.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * Copyright (c) 2017-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-const React = require('react');
-
-/*
-class Footer extends React.Component {
-  docUrl(doc, language) {
-    const baseUrl = this.props.config.baseUrl;
-    return baseUrl + 'docs/' + (language ? language + '/' : '') + doc;
-  }
-
-  pageUrl(doc, language) {
-    const baseUrl = this.props.config.baseUrl;
-    return baseUrl + (language ? language + '/' : '') + doc;
-  }
-
-  render() {
-    const currentYear = new Date().getFullYear();
-    return (
-      <footer className="nav-footer" id="footer">
-        <section className="sitemap">
-          <a href={this.props.config.baseUrl} className="nav-home">
-            {this.props.config.footerIcon && (
-              <img
-                src={this.props.config.baseUrl + this.props.config.footerIcon}
-                alt={this.props.config.title}
-                width="66"
-                height="58"
-              />
-            )}
-          </a>
-          <div>
-            <h5>Docs</h5>
-            <a href={this.docUrl('doc1.html', this.props.language)}>
-              Getting Started (or other categories)
-            </a>
-            <a href={this.docUrl('doc2.html', this.props.language)}>
-              Guides (or other categories)
-            </a>
-            <a href={this.docUrl('doc3.html', this.props.language)}>
-              API Reference (or other categories)
-            </a>
-          </div>
-          <div>
-            <h5>Community</h5>
-            <a href={this.pageUrl('users.html', this.props.language)}>
-              User Showcase
-            </a>
-            <a
-              href="http://stackoverflow.com/questions/tagged/"
-              target="_blank"
-              rel="noreferrer noopener">
-              Stack Overflow
-            </a>
-            <a href="https://discordapp.com/">Project Chat</a>
-            <a
-              href="https://twitter.com/"
-              target="_blank"
-              rel="noreferrer noopener">
-              Twitter
-            </a>
-          </div>
-          <div>
-            <h5>More</h5>
-            <a href={this.props.config.baseUrl + 'blog'}>Blog</a>
-            <a href="https://github.com/">GitHub</a>
-            <a
-              className="github-button"
-              href={this.props.config.repoUrl}
-              data-icon="octicon-star"
-              data-count-href="/facebook/docusaurus/stargazers"
-              data-show-count={true}
-              data-count-aria-label="# stargazers on GitHub"
-              aria-label="Star this project on GitHub">
-              Star
-            </a>
-          </div>
-        </section>
-
-        <a
-          href="https://code.facebook.com/projects/"
-          target="_blank"
-          rel="noreferrer noopener"
-          className="fbOpenSource">
-          <img
-            src={this.props.config.baseUrl + 'img/oss_logo.png'}
-            alt="Facebook Open Source"
-            width="170"
-            height="45"
-          />
-        </a>
-        <section className="copyright">{this.props.config.copyright}</section>
-      </footer>
-    );
-  }
-}
-*/
-
-class Footer extends React.Component {
-  docUrl(doc, language) {
-    const baseUrl = this.props.config.baseUrl;
-    return baseUrl + 'docs/' + (language ? language + '/' : '') + doc;
-  }
-
-  pageUrl(doc, language) {
-    const baseUrl = this.props.config.baseUrl;
-    return baseUrl + (language ? language + '/' : '') + doc;
-  }
-
-  render() {
-    const currentYear = new Date().getFullYear();
-
-    const contactUrl = this.pageUrl('contact', this.props.language)
-    const eventsUrl = this.pageUrl('events', this.props.language)
-    const twitterUrl = 'https://twitter.com/Apache_Pulsar'
-    const wikiUrl = 'https://github.com/apache/pulsar/wiki'
-    const issuesUrl = 'https://github.com/apache/pulsar/issues'
-    const summitUrl = 'https://pulsar-summit.org/'
-    const resourcesUrl = this.pageUrl('resources', this.props.language)
-    const teamUrl = this.pageUrl('team', this.props.language)
-    const poweredByUrl = this.pageUrl('powered-by', this.props.language)
-    const contributingUrl = this.pageUrl('contributing', this.props.language)
-    const codingUrl = this.pageUrl('coding-guide', this.props.language)
-
-    const communityMenuJs = `
-      const community = document.querySelector("a[href='#community']").parentNode;
-      const communityMenu =
-        '<li>' +
-        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
-        '<div id="community-dropdown" class="hide">' +
-          '<ul id="community-dropdown-items">' +
-            '<li><a href="${contactUrl}">Contact</a></li>' +
-            '<li><a href="${contributingUrl}">Contributing</a></li>' +
-            '<li><a href="${codingUrl}">Coding guide</a></li>' +
-            '<li><a href="${eventsUrl}">Events</a></li>' +
-            '<li><a href="${twitterUrl}" target="_blank">Twitter &#x2750</a></li>' +
-            '<li><a href="${wikiUrl}" target="_blank">Wiki &#x2750</a></li>' +
-            '<li><a href="${issuesUrl}" target="_blank">Issue tracking &#x2750</a></li>' +
-            '<li><a href="${summitUrl}" target="_blank">Pulsar Summit &#x2750</a></li>' +
-            '<li>&nbsp;</li>' +
-            '<li><a href="${resourcesUrl}">Resources</a></li>' +
-            '<li><a href="${teamUrl}">Team</a></li>' +
-            '<li><a href="${poweredByUrl}">Powered By</a></li>' +
-          '</ul>' +
-        '</div>' +
-        '</li>';
-
-      community.innerHTML = communityMenu;
-
-      const communityMenuItem = document.getElementById("community-menu");
-      const communityDropDown = document.getElementById("community-dropdown");
-      communityMenuItem.addEventListener("click", function(event) {
-        event.preventDefault();
-
-        if (communityDropDown.className == 'hide') {
-          communityDropDown.className = 'visible';
-        } else {
-          communityDropDown.className = 'hide';
-        }
-      });
-    `
-
-    return (
-      <footer className="nav-footer" id="footer">
-        <section className="copyright">{this.props.config.copyright}</section>
-        <span>
-        <script dangerouslySetInnerHTML={{__html: communityMenuJs }} />
-        </span>
-      </footer>
-    );
-  }
-}
-
-
-module.exports = Footer;
diff --git a/site2/website/data/connectors.js b/site2/website/data/connectors.js
deleted file mode 100644
index 5c664e328ea..00000000000
--- a/site2/website/data/connectors.js
+++ /dev/null
@@ -1,194 +0,0 @@
-module.exports = [
-    {
-        name: 'aerospike',
-        longName: 'Aerospike sink',
-        type: 'Sink',
-        link: 'https://www.aerospike.com/'
-    },
-    {
-        name: 'canal',
-        longName: 'Alibaba Canal CDC source',
-        type: 'Source',
-        link: 'https://github.com/alibaba/canal'
-    },
-    {
-        name: 'cassandra',
-        longName: 'Apache Cassandra source and sink',
-        type: 'Source and sink',
-        link: 'https://cassandra.apache.org'
-    },
-    {
-        name: 'kafka-connect-adaptor',
-        longName: 'Apache Kafka Connect Adaptor source and sink',
-        type: 'Source and sink',
-        link: 'http://kafka.apache.org/'
-    },
-    {
-        name: 'dynamodb',
-        longName: 'AWS DynamoDB source',
-        type: 'Source',
-        link: 'https://aws.amazon.com/dynamodb/'
-    },
-    {
-        name: 'kinesis',
-        longName: 'AWS Kinesis source and sink',
-        type: 'Source and sink',
-        link: 'https://aws.amazon.com/kinesis/'
-    },
-    {
-        name: 'debezium-mysql',
-        longName: 'Debezium MySQL CDC source',
-        type: 'Source',
-        link: 'https://debezium.io/'
-    },
-    {
-        name: 'debezium-postgres',
-        longName: 'Debezium PostgreSQL CDC source',
-        type: 'Source',
-        link: 'https://debezium.io/'
-    },
-    {
-        name: 'debezium-mongodb',
-        longName: 'Debezium MongoDB CDC source',
-        type: 'Source',
-        link: 'https://debezium.io/'
-    },
-    {
-        name: 'debezium-mssql',
-        longName: 'Debezium SQL Server CDC source',
-        type: 'Source',
-        link: 'https://debezium.io/'
-    },
-    {
-        name: 'debezium-oracle',
-        longName: 'Debezium Oracle CDC source',
-        type: 'Source',
-        link: 'https://debezium.io/'
-    },
-    {
-        name: 'elastic-search',
-        longName: 'ElasticSearch source and sink',
-        type: 'Source and sink',
-        link: 'https://www.elastic.co/'
-    },
-    {
-        name: 'file',
-        longName: 'File source',
-        type: 'Source',
-        link: 'https://github.com/apache/pulsar/tree/master/pulsar-io/file'
-    },
-    {
-        name: 'flume',
-        longName: 'Flume source and sink',
-        type: 'Source and sink',
-        link: 'https://flume.apache.org/'
-    },
-    {
-        name: 'hbase',
-        longName: 'HBase sink',
-        type: 'Sink',
-        link: 'https://hbase.apache.org/'
-    },
-    {
-        name: 'hdfs2',
-        longName: 'HDFS2 sink',
-        type: 'Sink',
-        link: 'https://hadoop.apache.org/'
-    },
-    {
-        name: 'hdfs3',
-        longName: 'HDFS3 sink',
-        type: 'Sink',
-        link: 'https://hadoop.apache.org/'
-    },
-    {
-        name: 'influxdb',
-        longName: 'InfluxDB sink',
-        type: 'Sink',
-        link: 'https://www.influxdata.com/'
-    },
-    {
-        name: 'jdbc-clickhouse',
-        longName: 'JDBC ClickHouse sink',
-        type: 'Sink',
-        link: 'https://clickhouse.tech/'
-    },
-    {
-        name: 'jdbc-mariadb',
-        longName: 'JDBC MariaDB sink',
-        type: 'Sink',
-        link: 'https://mariadb.org/'
-    },
-    {
-        name: 'jdbc-postgres',
-        longName: 'JDBC PostgresSQL sink',
-        type: 'Sink',
-        link: 'https://www.postgresql.org/'
-    },
-    {
-        name: 'jdbc-sqlite',
-        longName: 'JDBC SQLite sink',
-        type: 'Sink',
-        link: 'https://www.sqlite.org/'
-    },
-    {
-        name: 'kafka',
-        longName: 'Kafka source and sink',
-        type: 'Source and sink',
-        link: 'https://kafka.apache.org/'
-    },
-    {
-        name: 'mongo',
-        longName: 'MongoDB sink',
-        type: 'Sink',
-        link: 'https://www.mongodb.com/'
-    },
-    {
-        name: 'netty',
-        longName: 'Netty source',
-        type: 'Source',
-        link: 'https://netty.io/'
-    },
-    {
-        name: 'nsq',
-        longName: 'NSQ source',
-        type: 'Source',
-        link: 'https://nsq.io/',
-    },
-    {
-        name: 'rabbitmq',
-        longName: 'RabbitMQ source and sink',
-        type: 'Source and sink',
-        link: 'https://www.rabbitmq.com/'
-    },
-    {
-        name: 'redis',
-        longName: 'Redis sink',
-        type: 'Sink',
-        link: 'https://redis.io/'
-    },
-    {
-        name: 'solr',
-        longName: 'Solr sink',
-        type: 'Sink',
-        link: 'https://lucene.apache.org/solr/'
-    },
-    {
-        name: 'netty',
-        longName: 'TCP/UDP with Netty source',
-        type: 'Source',
-        link: 'https://netty.io/'
-    },
-    {
-        name: 'data-generator',
-        longName: 'Test Data Generator source',
-        type: 'Source',
-        link: 'https://github.com/apache/pulsar/tree/master/pulsar-io/data-generator'
-    },
-    {
-        name: 'twitter',
-        longName: 'Twitter Firehose source',
-        type: 'Source',
-        link: 'https://developer.twitter.com/en/docs'
-    }
-]
diff --git a/site2/website/data/resources.js b/site2/website/data/resources.js
deleted file mode 100644
index 2158c74f4eb..00000000000
--- a/site2/website/data/resources.js
+++ /dev/null
@@ -1,1026 +0,0 @@
-module.exports = {
-  books: [
-    {
-      book: 'Apache Pulsar in Action',
-      author: "David Kjerrumgaard",
-      link: 'https://www.manning.com/books/apache-pulsar-in-action/'      
-    },
-    {
-      book: 'Mastering Apache Pulsar',
-      author: "Jowanza Joseph",
-      link: 'https://www.oreilly.com/library/view/mastering-apache-pulsar/9781492084891/'      
-    },
-    {
-      book: 'Cloud-Native Microservices with Apache Pulsar',
-      author: "Rahul Sharma, Mohammad Atyab",
-      link: 'https://link.springer.com/book/10.1007/978-1-4842-7839-0'      
-    },
-    {
-      book: '深入解析 Apache Pulsar(Chinese Book, which means "Deep Dive into Apache Pulsar")',
-      author: "Lin Lin",
-      link: 'https://www.phei.com.cn/module/goods/wssd_content.jsp?bookid=59310'      
-    }
-  ],
-  articles: [
-  {
-      forum: 'Pedro Silvestre',
-      forum_link: 'https://www.doc.ic.ac.uk/~pms20/',
-      date: 'Oct 2021',
-      title: "On the Internals of Stream Processing Systems",
-      link: 'https://www.doc.ic.ac.uk/~pms20/post/stream-processing-thread-model/'
-    },
-    {
-      forum: 'Memgraph Blog',
-      forum_link: 'https://memgraph.com/blog',
-      date: 'Nov 2021',
-      title: "Announcing Memgraph 2.1",
-      link: 'https://memgraph.com/blog/memgraph-2-1-release'
-    },
-    {
-      forum: 'DataStax Blog',
-      forum_link: 'https://www.datastax.com/blog',
-      date: 'Nov 2021',
-      title: "Infinite Scale without Fail",
-      link: 'https://www.datastax.com/blog/infinite-scale-without-fail-starlight-rabbitmq'
-    },
-    {
-      forum: 'Splunk-MaaS',
-      forum_link: 'https://medium.com/splunk-maas',
-      date: 'Oct/Nov 2021',
-      title: "Apache BookKeeper Observability — Part 1 of 5  ",
-      link: 'https://medium.com/splunk-maas/apache-bookkeeper-observability-part-1-introducing-the-metrics-7f0acb32d0dc'
-    },
-    {
-      forum: 'BetterProgramming',
-      forum_link: 'https://betterprogramming.pub/',
-      date: 'Nov 2021',
-      title: "Distributed Locks With Apache Pulsar",
-      link: 'https://betterprogramming.pub/distributed-locks-with-apache-pulsar-2d95a4d5ff5e'
-    },
-    {
-      forum: 'Data in Motion',
-      forum_link: 'https://www.datainmotion.dev/',
-      date: 'Nov 2021',
-      title: "Producing and Consuming Pulsar messages with Apache NiFi",
-      link: 'https://www.datainmotion.dev/2021/11/producing-and-consuming-pulsar-messages.html'
-    },
-    {
-      forum: 'Umut Bayram\'s Medium',
-      forum_link: 'https://medium.com/@ubayram',
-      date: 'Nov 2021',
-      title: "Apache Pulsar- Apache Kafka vs Apache Pulsar (Turkish)",
-      link: 'https://medium.com/@ubayram/apache-pulsar-apache-kafka-vs-apache-pulsar-418a998084d'
-    },
-    {
-      forum: 'StreamNative Blog ',
-      forum_link: 'https://streamnative.io/blogs/',
-      date: 'Nov 2021',
-      title: "Building Edge Applications With Apache Pulsar",
-      link: 'https://streamnative.io/blog/engineering/2021-11-17-building-edge-applications-with-apache-pulsar/'
-    },
-    {
-      forum: 'The New Stack',
-      forum_link: 'https://thenewstack.io/',
-      date: 'Nov 2021',
-      title: "Apache Pulsar: A Unified Queueing and Streaming Platform",
-      link: 'https://thenewstack.io/apache-pulsar-a-unified-queueing-and-streaming-platform/'
-    },
-    {
-      forum: 'jaxenter',
-      forum_link: 'https://jaxenter.com/',
-      date: 'Nov 2021',
-      title: "Why Pulsar Beats Kafka for a Scalable, Distributed Data Architecture",
-      link: 'https://jaxenter.com/pulsar-kafka-175830.html'
-    },
-    {
-      forum: 'RT Instights',
-      forum_link: 'https://www.rtinsights.com/',
-      date: 'Oct 2021',
-      title: "The Critical Role Streaming Plays in a Data Stack",
-      link: 'https://www.rtinsights.com/the-critical-role-streaming-plays-in-a-data-stack/'
-    },
-    {
-      forum: 'Mikel\'s TechBlog',
-      forum_link: 'https://mikeldeltio.com/',
-      date: 'Sept 2021',
-      title: "Distributed Databases: Apache Pulsar (in ESP)",
-      link: 'https://mikeldeltio.com/2021/09/20/distributed-databases-apache-pulsar/'
-    },
-    {
-      forum: 'Pandio Blog',
-      forum_link: 'https://pandio.com/blog/',
-      date: 'Sept 2021',
-      title: "Apache Pulsar vs. Google PubSub",
-      link: 'https://pandio.com/blog/a-detailed-deep-dive-into-pulsar-and-google-pubsub-which-is-better-and-why'
-    },
-    {
-      forum: 'StreamNative Blog',
-      forum_link: 'https://streamnative.io/',
-      date: 'Aug 2021',
-      title: "Scalable Stream Processing with Pulsar’s Key_Shared Subscription",
-      link: 'https://streamnative.io/en/blog/engineering/2021-08-25-scalable-stream-processing-with-pulsars-key-shared-subscription/'
-    },
-    {
-      forum: 'Pandio Blog',
-      forum_link: 'https://pandio.com/blog/',
-      date: 'July 2021',
-      title: "Pulsar vs. Kafka",
-      link: 'https://pandio.com/blog/pulsar-vs-kafka/'
-    },
-    {
-      forum: 'Building the Open Data Stack',
-      forum_link: 'https://medium.com/building-the-open-data-stack',
-      date: 'June 2021',
-      title: "5 More Reasons to Choose Apache Pulsar Over Apache Kafka",
-      link: 'https://medium.com/building-the-open-data-stack/5-more-reasons-to-choose-apache-pulsar-over-apache-kafka-c09b259e3691'
-    },
-    {
-      forum: 'dattell',
-      forum_link: 'https://dattell.com/data-architecture-blog/',
-      date: 'Feb 2021',
-      title: "Apache Pulsar Subscription Types",
-      link: 'https://dattell.com/data-architecture-blog/subscription-types-in-apache-pulsar/'
-    }
-    
-    ],
-
-  /******************************
-   * Presentations
-   * 
-   ******************************/ 
-  presentations: [
-   {
-      forum: 'P99Conf',
-      forum_link: 'https://www.p99conf.io/',
-      presenter: 'Karthik Ramasamy',
-      date: 'Oct 2021',
-      title: "Scaling Apache Pulsar to 10 PB/day",
-      link: 'https://www.youtube.com/watch?v=x76sX4BU2mA'
-    },
-   {
-      forum: 'Apache Pulsar Summit',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Many',
-      date: 'Oct 2021',
-      title: "Apache Pulsar Summit Europe 2021 Playlist",
-      link: 'https://www.youtube.com/playlist?list=PLqRma1oIkcWh7zes7mNeTUCr2iU-2C1jB'
-    },
-
-    {
-      forum: 'ApacheCon @Home 2021',
-      forum_link: 'https://www.apachecon.com/acah2021/',
-      presenter: 'Many',
-      date: 'Sept 2021',
-      title: "Apache Pulsar Playlist",
-      link: 'https://www.youtube.com/watch?v=igwxegspSGw&list=PLIt9PL1-3shvC0dGjaPyd0Rqfg1_PZLvS'
-    },
-   {
-      forum: 'Apache Pulsar Neighborhood YouTube',
-      forum_link: 'https://www.youtube.com/apachepulsarneighborhood',
-      presenter: 'Enrico Olivelli',
-      date: 'Sept 2021',
-      title: "Apache Pulsar Deep Dive- an End-to-end view of the Data Flow",
-      link: 'https://www.youtube.com/watch?v=oLXCCCGsrWM'
-    },
-    {
-      forum: 'Apache Pulsar Neighborhood YouTube',
-      forum_link: 'https://www.youtube.com/apachepulsarneighborhood',
-      presenter: 'Simba Khadder',
-      date: 'Sept 2021',
-      title: "Apache Pulsar and Machine Learning",
-      link: 'https://youtu.be/K2WXDwo1y0k'
-    },
-    {
-      forum: 'Apache Pulsar Neighborhood YouTube',
-      forum_link: 'https://www.youtube.com/apachepulsarneighborhood',
-      presenter: 'Enrico Olivelli',
-      date: 'Sept 2021',
-      title: "Leveraging Pulsar's Next Gen Streaming Capabilities from a JavaEE Application",
-      link: 'https://www.youtube.com/watch?v=0NA0BIvkQrs'
-    },
-   {
-      forum: 'Devin Bost\'s YouTube',
-      forum_link: 'https://www.youtube.com/channel/UCz_Y86AT4G15xU3IojhX2Kw',
-      presenter: 'Devin Bost',
-      date: 'Aug 2021',
-      title: "Streaming Patterns and Best Practices with Apache Pulsar for Enabling Machine Learning and Analytics",
-      link: 'https://www.youtube.com/watch?v=Fdqre_hTnUI'
-    },
-
-    {
-      forum: 'Pulsar Summit NA 2021',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: '',
-      date: 'June 2021',
-      title: "Pulsar Summit NA 2021 Playlist",
-      link: 'https://www.youtube.com/watch?v=-Bm1h508oIQ&list=PLqRma1oIkcWjyezVodJHcp8GSypvGuc1C'
-    }
-  ],
-    /***************************
-     * Older Articles
-     * 
-     * 
-     * *************************/
-  older_articles: [
-    
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      date: 'July 2020',
-      title: "Pulsar vs Kafka - Part 1 - A More Accurate Perspective on Performance, Architecture, and Features",
-      link: 'https://streamnative.io/blog/tech/pulsar-vs-kafka-part-1',
-      title2: "Pulsar vs Kafka - Part 2 - Adoption, Use Cases, Differentiators, and Community",
-      link2: 'https://streamnative.io/blog/tech/pulsar-vs-kafka-part-2'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      date: 'June 2020',
-      title: "Taking messaging and data ingestion systems to the next level",
-      link: 'https://streamnative.io/blog/tech/2020-07-08-podcast'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      date: 'June 2020',
-      title: "Announcing AMQP-on-Pulsar: bring native AMQP protocol support to Apache Pulsar",
-      link: 'https://streamnative.io/blog/tech/2020-06-15-announcing-aop-on-pulsar'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      date: 'June 2020',
-      title: "How to trace Pulsar messages with OpenTracing and Jaeger",
-      link: 'https://streamnative.io/blog/tech/2020-06-11-opentracing-instrumentation-for-pulsar'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      date: 'May 2020',
-      title: "Introducing StreamNative Hub — Extend Pulsar Capabilities with Rich Integrations",
-      link: 'https://streamnative.io/blog/tech/2020-05-26-intro-to-hub'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      title: "How to Build a Distributed Database with Apache BookKeeper — Part 1",
-      link: 'https://streamnative.io/blog/tech/2020-02-04-how-to-build-database',
-      title2: "How to Build a Distributed Database with Apache BookKeeper — Part 2",
-      link2: 'https://streamnative.io/blog/tech/2020-04-14-distributed-database-bk2',
-      title3: "How to Build a Distributed Database with Apache BookKeeper — Part 3",
-      link3: 'https://streamnative.io/blog/tech/2020-05-12-distributed-database-bk3'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      title: "How Apache Pulsar Helps Streamline Message System and Reduces O&M Costs at Tuya Smart",
-      link: 'https://streamnative.io/blog/tech/2020-05-08-tuya-tech-blog'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      title: "Why Zhaopin Chooses Pulsar SQL for Search Log Analysis",
-      link: 'https://streamnative.io/blog/tech/2020-05-07-zhaopin-tech-blog'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      title: "Why we moved from Apache Kafka to Apache Pulsar",
-      link: 'https://streamnative.io/blog/tech/2020-04-21-from-apache-kafka-to-apache-pulsar'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      title: "Announcing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pulsar",
-      link: 'https://streamnative.io/blog/tech/2020-03-24-bring-native-kafka-protocol-support-to-apache-pulsar'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      title: "Apache Pulsar® Helps Tencent Process Tens of Billions of Financial Transactions Efficiently with Virtually No Data Loss",
-      link: 'https://streamnative.io/blog/tech/2020-02-18-pulsar-help-tencent'
-    },
-    {
-      forum: 'Yahoo Engineering blog',
-      forum_link: 'https://yahooeng.tumblr.com/',
-      title: 'Open sourcing Pulsar, pub-sub messaging at scale',
-      link: 'https://yahooeng.tumblr.com/post/150078336821/open-sourcing-pulsar-pub-sub-messaging-at-scale'
-    },
-    {
-      forum: 'Streamlio blog',
-      forum_link: 'https://streaml.io/blog',
-      title: 'Introduction to Apache Pulsar',
-      link: 'https://streaml.io/blog/intro-to-pulsar/'
-    },
-    {
-      forum: 'Streamlio blog',
-      forum_link: 'https://streaml.io/blog',
-      title: 'Why Apache Pulsar? Part 1',
-      link: 'https://streaml.io/blog/why-apache-pulsar/',
-      title2: 'Why Apache Pulsar? Part 2',
-      link2: 'https://streaml.io/blog/why-apache-pulsar-part-2'
-    },
-    {
-      forum: "Jack Vanlightly's blog",
-      forum_link: 'https://jack-vanlightly.com',
-      title: 'Understanding How Apache Pulsar Works',
-      link: 'https://jack-vanlightly.com/blog/2018/10/2/understanding-how-apache-pulsar-works'
-    },
-    {
-        forum: "Anuradha Prasanna's blog",
-        forum_link: 'https://medium.com/@anuradha.neo',
-        title: 'Kafka is not the best anymore - Meet Pulsar!',
-        link: 'https://medium.com/@anuradha.neo/kafka-is-not-the-best-anymore-meet-pulsar-9eb435c9fc0b'
-    },
-    {
-        forum: 'Kafkaesque blog',
-        forum_link: 'https://kafkaesque.io/news/',
-        title: '7 Reasons We Choose Apache Pulsar over Apache Kafka',
-        link: 'https://kafkaesque.io/7-reasons-we-choose-apache-pulsar-over-apache-kafka/'
-    },
-    {
-        forum: "Jack Vanlightly's blog",
-        forum_link: 'https://jack-vanlightly.com',
-        title: 'How to (not) lose messages on an Apache Pulsar Cluster',
-        link: 'https://jack-vanlightly.com/blog/2018/10/21/how-to-not-lose-messages-on-an-apache-pulsar-cluster'
-    },
-    {
-      forum: 'StreamNative blog',
-      forum_link: 'https://streamnative.io/',
-      title: "How Orange Financial combats financial fraud in over 50M transactions a day using Apache Pulsar",
-      link: 'https://streamnative.io/blog/tech/2019-11-11-how-orange-finaacial-combats-financial-fraud-over-50m-transactions-a-day-useing-apache-pulsar'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://streamnative.io/',
-        title: "Powering Tencent Billing Platform with Apache Pulsar",
-        link: 'https://streamnative.io/blog/tech/2019-10-22-powering-tencent-billing-platform-with-apache-pulsar/'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://streamnative.io/',
-        title: "Use Apache SkyWalking to Trace Apache Pulsar Messages",
-        link: 'https://streamnative.io/blog/tech/2019-10-10-use-apache-skywalking-to-trace-apache-pulsar/'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://streamnative.io/',
-        title: "StreamNative open sourced and contributed Apache Pulsar Manager to ASF",
-        link: 'https://streamnative.io/blog/tech/2019-09-24-streamnative-opensourced-pulsar-manager/'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://streamnative.io/',
-        title: "Apache Pulsar Adoption Story in ActorCloud (IoT Platform)",
-        link: 'https://streamnative.io/blog/tech/2019-09-09-apache-pulsar-adoption-in-actorcloud/'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://streamnative.io/',
-        title: "Apache Pulsar at Yahoo!JAPAN",
-        link: 'https://streamnative.io/blog/tech/2019-09-06-pular-at-yahoo-japan/'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://streamnative.io/',
-        title: "Build a Priority-based Push Notification System Using Apache Pulsar at GeTui",
-        link: 'https://streamnative.io/blog/tech/2019-07-23-build-a-priority-based-push-notification-system-using-apache-pulsar-at-getui/'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://streamnative.io/',
-        title: "Use Apache Pulsar as Streaming Table with 8 Lines of Code",
-        link: 'https://streamnative.io/blog/tech/2019-08-28-use-apache-pulsar-as-streaming-table-with-8-lines-of-code/'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://medium.com/streamnative/',
-        title: 'Apache Pulsar as One Unified Storage System for Real Time and Historical Analysis',
-        link: 'https://medium.com/streamnative/apache-pulsar-as-one-storage-455222c59017'
-    },
-    {
-        forum: 'StreamNative blog',
-        forum_link: 'https://medium.com/streamnative/',
-        title: "What’s New in Apache Pulsar 2.4.0",
-        link: 'https://medium.com/streamnative/whats-new-in-apache-pulsar-2-4-0-d646f6727642'
-    },
-    {
-        forum: "Penghui Li's blog",
-        forum_link: 'https://medium.com/@codelipenghui',
-        title: "Simplifying Zhaopin's Event Center Using Apache Pulsar",
-        link: 'https://medium.com/@codelipenghui/simplifying-zhaopins-event-center-with-apache-pulsar-9784b73bead1'
-    },
-    {
-        forum: "Jowanza Joseph's blog",
-        forum_link: "https://www.jowanza.com/blog",
-        title: 'Efficient Stream Processing With Pulsar Functions',
-        link: 'https://www.jowanza.com/blog/2019/3/9/efficient-stream-processing-with-pulsar-functions'
-    },
-    {
-        forum: "Jesse Anderson's blog",
-        forum_link: 'http://www.jesse-anderson.com/',
-        title: 'Creating Work Queues with Apache Kafka and Apache Pulsar',
-        link: 'http://www.jesse-anderson.com/2018/08/creating-work-queues-with-apache-kafka-and-apache-pulsar/'
-    },
-    {
-        forum: 'Streamlio blog',
-        forum_link: 'https://streaml.io/blog',
-        title: 'Building Data Driven Applications at STICORP using Apache Pulsar',
-        link: 'https://streaml.io/blog/building-data-driven-applications-with-apache-pulsar-at-sticorp'
-    },
-    {
-        forum: 'The Hut Group tech blog',
-        forum_link: 'https://medium.com/thg-tech-blog',
-        title: 'A feather in the caps',
-        link: 'https://medium.com/thg-tech-blog/a-feather-in-their-caps-4c4083cf9f46'
-    },
-    {
-        forum: "Karthikeyan Palanivelu's blog",
-        forum_link: 'https://medium.com/@pckeyan',
-        title: 'Apache Pulsar — One Cluster for the entire enterprise using Multi-tenancy',
-        link: 'https://medium.com/@pckeyan/apache-pulsar-one-cluster-for-the-entire-enterprise-using-multi-tenancy-c37e2ee350ef'
-    },
-    {
-        forum: "Capital One tech blog",
-        forum_link: "https://medium.com/capital-one-tech",
-        title: 'Apache Pulsar — A Gentle Introduction to Apache’s Newest Pub-Sub Messaging Platform',
-        link: 'https://medium.com/capital-one-tech/apache-pulsar-apaches-newest-pub-sub-messaging-platform-1c1ba1a6c673'
-    },
-    {
-        forum: "Karthikeyan Palanivelu's blog",
-        forum_link: 'https://medium.com/@pckeyan',
-        title: 'Apache Pulsar: Geo-replication',
-        link: 'https://medium.com/@pckeyan/apache-pulsar-geo-replication-ad4f0ca3224b'
-    },
-    {
-        forum: "Karthikeyan Palanivelu's blog",
-        forum_link: 'https://medium.com/@pckeyan',
-        title: 'Apache Pulsar: Geo-replication — Synchronous Replication : Hybrid Deployment Model',
-        link: 'https://medium.com/@pckeyan/apache-pulsar-geo-replication-synchronous-replication-hybrid-deployment-model-3282013e9ae5'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Pulsar topic compaction',
-        link: 'https://streaml.io/blog/pulsar-topic-compaction'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Tiered Storage in Apache Pulsar',
-        link: 'https://streaml.io/blog/tiered-storage-in-apache-pulsar'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Introducing Pulsar IO',
-        link: 'https://streaml.io/blog/introducing-pulsar-io'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Pulsar topic compaction',
-        link: 'https://streaml.io/blog/pulsar-topic-compaction'
-    },
-
-    {
-        forum: "Jesse Anderson's blog",
-        forum_link: 'https://www.jesse-anderson.com',
-        title: 'Reducing Operational Overhead with Pulsar Functions',
-        link: 'https://www.jesse-anderson.com/2019/05/reducing-operational-overhead-with-pulsar-functions/'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Querying Data Streams with Apache Pulsar SQL',
-        link: 'https://streaml.io/blog/querying-data-streams-with-apache-pulsar-sql'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Configuring Apache Pulsar Tiered Storage with Amazon S3',
-        link: 'https://streaml.io/blog/configuring-apache-pulsar-tiered-storage-with-amazon-s3'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Comparing LogDevice and Apache Pulsar',
-        link: 'https://streaml.io/blog/comparing-logdevice-and-apache-pulsar'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Pulsar’s Multi-Layer System Architecture',
-        link: 'https://streaml.io/blog/apache-pulsar-architecture-designing-for-streaming-performance-and-scalability'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Debugging Pulsar Functions in Java',
-        link: 'https://streaml.io/blog/debugging-pulsar-functions-in-java'
-    },
-    {
-        forum: "Streamlio blog",
-        forum_link: 'https://streaml.io/blog',
-        title: 'Sentiment Analysis of Tweets using Apache Pulsar',
-        link: 'https://streaml.io/blog/sentiment-analysis-of-tweets-using-apache-pulsar'
-    },
-    {
-        forum: 'Apache Flink blog',
-        forum_link: 'https://flink.apache.org/blog/',
-        title: 'When Flink & Pulsar Come Together',
-        link: 'https://flink.apache.org/2019/05/03/pulsar-flink.html'
-    },
-    {
-        forum: 'Debezium blog',
-        forum_link: 'https://debezium.io/blog',
-        title: 'Tutorial for Using Debezium Connectors With Apache Pulsar',
-        link: 'https://debezium.io/blog/2019/05/23/tutorial-using-debezium-connectors-with-apache-pulsar/'
-    },
-    {
-        forum: 'Pulsar in Action',
-        forum_link: 'https://www.manning.com/books/pulsar-in-action',
-        title: "Pulsar in Action",
-        link: 'https://www.manning.com/books/pulsar-in-action'
-     }
-  ],
-      /***************************
-     * Older Presentations
-     * 
-     * 
-     * *************************/
-  older_presentations: [
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Ludwig Pummer, Joe Francis',
-      date: 'June 2020',
-      title: "Five Years of Operating a Large Scale Globally Replicated Pulsar Installation",
-      link: 'https://www.slideshare.net/streamnative/five-years-of-operating-a-large-scale-globally-replicated-pulsar-installation'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Alexandre Duval',
-      date: 'June 2020',
-      title: "Building a FaaS with Pulsar",
-      link: 'https://www.slideshare.net/streamnative/building-a-faas-with-pulsar'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Greg Methvin',
-      date: 'June 2020',
-      title: "Scaling customer engagement with Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/scaling-customer-engagement-with-apache-pulsar'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'William MaLane',
-      date: 'June 2020',
-      title: "Finding your pulse for a global enterprise communications nervous system",
-      link: 'https://www.slideshare.net/streamnative/finding-your-pulse-for-a-global-enterprise-communications-nervous-systemwilliam-mclane'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'David Kjerrumgaard',
-      date: 'June 2020',
-      title: "Using Apache Pulsar to Provide Real-Time IoT Analytics on the Edge",
-      link: 'https://www.slideshare.net/streamnative/using-apache-pulsar-to-provide-realtime-iot-analytics-on-the-edgedavid'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Neng Lv',
-      date: 'June 2020',
-      title: "Stream or segment: what is the best way to access your events in Pulsar",
-      link: 'https://www.slideshare.net/streamnative/stream-or-segment-what-is-the-best-way-to-access-your-events-in-pulsarneng'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Simba Khadder',
-      date: 'June 2020',
-      title: "Feature Stories: Building Machine Learning Infrastructure on Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/feature-stores-building-machine-learning-infrastructure-on-apache-pulsarsimba-khadder'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Sanjeev Kulkarni',
-      date: 'June 2020',
-      title: "Pulsar Functions Deep Dive",
-      link: 'https://www.slideshare.net/streamnative/pulsar-functions-deep-divesanjeev-kulkarni'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Jesse Anderson',
-      date: 'June 2020',
-      title: "Pulsar for Kafka People",
-      link: 'https://www.slideshare.net/streamnative/pulsar-for-kafka-peoplejesse-anderson'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Jerry Peng',
-      date: 'June 2020',
-      title: "Interactive querying of streams using Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/interactive-querying-of-streams-using-apache-pulsarjerry-peng'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Anup Ghatage, Ankit Jain',
-      date: 'June 2020',
-      title: "The first step to Multi AZ architecture for Apache BookKeeper",
-      link: 'https://www.slideshare.net/streamnative/the-first-step-to-multi-az-architecture-for-apache-bookkeeperanup-ghatage'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Carolyn King, Matteo Merli, Sijie Guo',
-      date: 'June 2020',
-      title: "Messaging & Streaming Everywhere",
-      link: 'https://www.slideshare.net/streamnative/open-keynotecarolynmatteosijie'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Joe Francis, Rajan Dhabalia',
-      date: 'June 2020',
-      title: "Pulsar Storage on BookKeeper - Seamless Evolution",
-      link: 'https://www.slideshare.net/streamnative/pulsar-storage-on-bookkeeper-seamless-evolution'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Ningguo Chen',
-      date: 'June 2020',
-      title: "How Apache Pulsar Helps Tencent Process Tens of Billions of Transactions Efficiently",
-      link: 'https://www.slideshare.net/streamnative/how-apache-pulsar-helps-tencent-process-tens-of-billions-of-transactions-efficientlyningguo-chen'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Vincent Xie, Jia Zhai',
-      date: 'June 2020',
-      title: "Unify Storage Backend for Batch and Streaming Computation with Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/unify-storage-backend-for-batch-and-streaming-computation-with-apache-pulsarvincent'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Seth Wiesman',
-      date: 'June 2020',
-      title: "Unified Data Processing with Apache Flink and Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/unified-data-processing-with-apache-flink-and-apache-pulsarseth-wiesman'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Paige Roberts',
-      date: 'June 2020',
-      title: "Architecting Production IoT Analytics",
-      link: 'https://www.slideshare.net/streamnative/architecting-production-iot-analyticspaige-roberts'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Nozomi Kurihara',
-      date: 'June 2020',
-      title: "Large scale log pipeline using Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/large-scale-log-pipeline-using-apache-pulsarnozomi'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Robert van Mölken',
-      date: 'June 2020',
-      title: "Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing",
-      link: 'https://www.slideshare.net/streamnative/ten-reasons-to-choose-apache-pulsar-over-apache-kafka-for-event-sourcingrobert-van-mlken'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Simon Crosby',
-      date: 'June 2020',
-      title: "Easily Build a Smart Pulsar Stream Processor",
-      link: 'https://www.slideshare.net/streamnative/easily-build-a-smart-pulsar-stream-processorsimon-crosby'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Pranav Dharma',
-      date: 'June 2020',
-      title: "How Splunk Mission Control leverages various Pulsar subscription types",
-      link: 'https://www.slideshare.net/streamnative/how-splunk-mission-control-leverages-various-pulsar-subscription-typespranav-dharma'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Caito Scherr',
-      date: 'June 2020',
-      title: "Streaming, Fast and Slow",
-      link: 'https://www.slideshare.net/streamnative/streaming-fast-and-slowcaito-scherr'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Karthik Ramasamy',
-      date: 'June 2020',
-      title: "Why Splunk Chose Pulsar",
-      link: 'https://www.slideshare.net/streamnative/why-splunk-chose-pulsarkarthik-ramasamy'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Chris Kellogg',
-      date: 'June 2020',
-      title: "Securing your Pulsar Cluster with Vault",
-      link: 'https://www.slideshare.net/streamnative/securing-your-pulsar-cluster-with-vaultchris-kellogg-236137352'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Enrico Olivelli',
-      date: 'June 2020',
-      title: "Introducing HerdDB - a distributed JVM embeddable database built upon Apache BookKeeper",
-      link: 'https://www.slideshare.net/streamnative/introducing-herddb-a-distributed-jvm-embeddable-database-built-upon-apache-bookkeeperenrico-olivelli'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Pierre Zemb',
-      date: 'June 2020',
-      title: "Building a Messaging Solutions for OVHcloud with Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/building-a-messaging-solutions-for-ovhcloud-with-apache-pulsarpierre-zemb'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Devin Bost',
-      date: 'June 2020',
-      title: "Pulsar Architectural Patterns for CI/CD Automation and Self-Service",
-      link: 'https://www.slideshare.net/streamnative/pulsar-architectural-patterns-for-cicd-automation-and-selfservicedevin-bost-236083234'
-    },
-    {
-      forum: 'Pulsar Summit 2020',
-      forum_link: 'https://pulsar-summit.org/',
-      presenter: 'Addison Higham',
-      date: 'June 2020',
-      title: "Getting Pulsar Spinning",
-      link: 'https://www.slideshare.net/streamnative/getting-pulsar-spinningaddison-higham'
-    },
-    {
-      forum: 'StreamNative Academy',
-      forum_link: 'https://streamnative.io/academy',
-      presenter: 'Shivji Jha',
-      date: 'May 2020',
-      title: "Lessons from managing a Pulsar cluster (Nutanix)",
-      link: 'https://www.slideshare.net/streamnative/lessons-from-managing-a-pulsar-cluster-nutanix'
-    },
-    {
-      forum: '',
-      forum_link: '',
-      presenter: 'Sijie Guo',
-      date: 'May 2020',
-      title: "Building event streaming pipelines using Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/building-event-streaming-pipelines-using-apache-pulsar'
-    },
-    {
-      forum: 'TGIPulsar',
-      forum_link: 'https://streamnative.io/resource#tgip',
-      presenter: 'Sijie Guo',
-      date: 'April 2020',
-      title: "Lifecycle of a Pulsar message",
-      link: 'https://www.slideshare.net/streamnative/tgipulsar-ep-006-lifecycle-of-a-pulsar-message'
-    },
-    {
-      forum: '',
-      forum_link: '',
-      presenter: 'Sijie Guo, Pierre Zemb',
-      date: 'March 2020',
-      title: "Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/introducing-kafkaonpulsar-bring-native-kafka-protocol-support-to-apache-pulsar'
-    },
-    {
-      forum: '2019 China Technical Communication Forum',
-      forum_link: 'http://www.tc-china.org/event/tcweekly/7454/',
-      presenter: 'Yu Liu',
-      date: 'December 2019',
-      title: "Code the docs",
-      link: 'https://www.slideshare.net/streamnative/code-the-docsyu-liu'
-    },
-    {
-      forum: 'Google DevFest 2019 in Beijing',
-      forum_link: 'https://devfest.withgoogle.com/?utm_source=devsite&utm_medium=events&utm_campaign=past&utm_content=DevSite_HPP',
-      presenter: 'Xiaolong Ran',
-      date: 'December 2019',
-      title: "Serverless Event Streaming with Pulsar Functions",
-      link: 'https://www.slideshare.net/streamnative/google-devfest-about-pulsar-by-xiaolong'
-    },
-    {
-      forum: 'Apache Pulsar Meetup x PingCAP Infra Meetup | Beijing',
-      forum_link: 'https://www.huodongxing.com/event/7520647658000',
-      presenter: 'Xiaolong Ran',
-      date: 'December 2019',
-      title: "Apache Pulsar and GitHub",
-      link: 'https://www.slideshare.net/streamnative/apache-pulsar-and-githubxiaolong'
-    },
-    {
-      forum: 'Apache Pulsar Meetup x PingCAP Infra Meetup | Beijing',
-      forum_link: 'https://www.huodongxing.com/event/7520647658000',
-      presenter: 'Penghui Li, Yong Zhang',
-      date: 'December 2019',
-      title: "Transaction preview of Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/transaction-preview-of-apache-pulsar'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Shanghai',
-      forum_link: 'https://www.huodongxing.com/event/5515876233300',
-      presenter: 'Xiaolong Ran, Guangning E',
-      date: 'November 2019',
-      title: "Pulsarctl & Pulsar Manager",
-      link: 'https://www.slideshare.net/streamnative/pulsarctl-pulsar-manager'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Shanghai',
-      forum_link: 'https://www.huodongxing.com/event/5515876233300',
-      presenter: 'Jennifer Huang',
-      date: 'November 2019',
-      title: "Apache Pulsar Community",
-      link: 'https://www.slideshare.net/streamnative/apache-pulsar-communityjennifer'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Shanghai',
-      forum_link: 'https://www.huodongxing.com/event/5515876233300',
-      presenter: 'Penghui Li, Bo Cong, Jia Zhai',
-      date: 'November 2019',
-      title: "Preview of Apache Pulsar 2.5.0",
-      link: 'https://www.slideshare.net/streamnative/preview-of-apache-pulsar-250'
-    },
-    {
-      forum: 'COSCon\'19',
-      forum_link: 'https://kaiyuanshe.cn/activity/summit/coscon-2019/',
-      presenter: 'Jennifer Huang',
-      date: 'November, 2019',
-      title: "Apache Pulsar: A borderless community",
-      link: 'https://www.slideshare.net/streamnative/apache-pulsaraborderlesscommunityjennifer'
-    },
-    {
-      forum: 'COSCon\'19',
-      forum_link: 'https://kaiyuanshe.cn/activity/summit/coscon-2019/',
-      presenter: 'Yu Liu',
-      date: 'November, 2019',
-      title: "Cos con19 about Pulsar",
-      link: 'https://www.slideshare.net/streamnative/cos-con19-pulsaryuliu'
-    },
-    {
-      forum: 'Flink Forward Europe',
-      forum_link: 'https://europe-2019.flink-forward.org/',
-      presenter: 'Sijie Guo',
-      date: 'October 2019',
-      title: "Query Pulsar Streams using Apache Flink",
-      link: 'https://www.slideshare.net/streamnative/query-pulsar-streams-using-apache-flink'
-    },
-    {
-      forum: 'Strata Data Conference | New York',
-      forum_link: 'https://conferences.oreilly.com/strata/strata-ny',
-      presenter: 'Vincent Xie, Jia Zhai',
-      date: 'September 2019',
-      title: "How Orange Financial combat financial frauds over 50M transactions a day using Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/how-orange-financial-combat-financial-frauds-over-50m-transactions-a-day-using-apache-pulsar-176284080'
-    },
-    {
-      forum: 'ApacheCon NA 2019',
-      forum_link: 'https://www.apachecon.com/acna19/',
-      presenter: 'Xiaolong Ran',
-      date: 'September 2019',
-      title: "Serverless Event Streaming with Pulsar Functions",
-      link: 'https://www.slideshare.net/streamnative/serverless-event-streaming-with-pulsar-functions-171597848'
-    },
-    {
-      forum: 'ApacheCon NA 2019',
-      forum_link: 'https://www.apachecon.com/acna19/',
-      presenter: 'Penghui Li, Jia Zhai',
-      date: 'September 2019',
-      title: "Building Zhaopin's enterprise event center on Apache Pulsar",
-      link: 'https://www.slideshare.net/streamnative/building-zhaopins-enterprise-event-center-on-apache-pulsar'
-    },
-    {
-      forum: '',
-      forum_link: '',
-      presenter: 'Sijie Guo',
-      date: 'August 2019',
-      title: "When Apache Pulsar meets Apache Flink",
-      link: 'https://www.slideshare.net/streamnative/when-apache-pulsar-meets-apache-flink'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Beijing',
-      forum_link: 'https://www.huodongxing.com/event/1502359221000',
-      presenter: 'Sijie Guo, Yong Zhang',
-      date: 'August 2019',
-      title: "Transaction Support in Pulsar 2.5.0",
-      link: 'https://www.slideshare.net/streamnative/transaction-support-in-pulsar-250'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Beijing',
-      forum_link: 'https://www.huodongxing.com/event/1502359221000',
-      presenter: 'Yijie Shen',
-      date: 'August 2019',
-      title: "Integrating Apache Pulsar with Big Data Ecosystem",
-      link: 'https://www.slideshare.net/streamnative/8-integrate-apachepulsarwithbigdataecosystem'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Beijing',
-      forum_link: 'https://www.huodongxing.com/event/1502359221000',
-      presenter: 'Penghui Li, Bo Cong',
-      date: 'August 2019',
-      title: "How Zhaopin contributes to Pulsar community",
-      link: 'https://www.slideshare.net/streamnative/3-zhaopin-inpulsarcommunity-165096725'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Beijing',
-      forum_link: 'https://www.huodongxing.com/event/1502359221000',
-      presenter: 'Jia Zhai',
-      date: 'August 2019',
-      title: "Kafka on Pulsar(KOP)",
-      link: 'https://www.slideshare.net/streamnative/2-kafkaonpulsarjia'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Beijing',
-      forum_link: 'https://www.huodongxing.com/event/1502359221000',
-      presenter: 'Nozomi Kurihara',
-      date: 'August 2019',
-      title: "Apache Pulsar at Yahoo!JAPAN",
-      link: 'https://www.slideshare.net/streamnative/1-apache-pulsaratyahoojapan-165095533'
-    },
-    {
-      forum: '',
-      forum_link: '',
-      presenter: 'Sijie Guo',
-      date: 'June 2019',
-      title: "What's new in apache pulsar 2.4.0",
-      link: 'https://www.slideshare.net/streamnative/whats-new-in-apache-pulsar-240'
-    },
-    {
-      forum: 'Apache Pulsar Meetup | Shenzhen',
-      forum_link: 'https://www.huodongxing.com/event/9495713659500',
-      presenter: 'Yijie Shen',
-      date: 'June 2019',
-      title: 'A Unified Platform for Real-time Storage and Processing - Apache Pulsar as Stream Storage, Apache Spark for Processing as an example',
-      link: 'https://www.slideshare.net/streamnative/a-unified-platform-for-realtime-storage-and-processing'
-    },
-    {
-      forum: 'Ray Forward Beijing Meetup',
-      forum_link: 'https://tech.antfin.com/community/activities/698',
-      presenter: 'Sijie Guo',
-      date: 'June 2019',
-      title: 'Serverless Event Streaming with Pulsar Functions',
-      link: 'https://www.slideshare.net/streamnative/serverless-event-streaming-with-pulsar-functions'
-    },
-    {
-      forum: 'Flink Forward San Francisco 2019',
-      forum_link: 'https://sf-2019.flink-forward.org/',
-      presenter: 'Sijie Guo',
-      date: 'April 2019',
-      title: 'Elastic Data Processing with Apache Flink and Apache Pulsar',
-      link: 'https://www.slideshare.net/streamnative/elastic-data-processing-with-apache-flink-and-apache-pulsar'
-    },
-    {
-      forum: 'Strata Data San Francisco 2019',
-      forum_link: '',
-      presenter: 'Penghui Li, Sijie Guo',
-      date: 'March 2019',
-      title: 'How Zhaopin built its Event Center using Apache Pulsar',
-      link: 'https://www.slideshare.net/streamnative/how-zhaopin-built-its-event-center-using-apache-pulsar-152691364'
-    },
-    {
-      forum: 'Strata San Jose',
-      forum_link: 'https://conferences.oreilly.com/strata/strata-ca',
-      presenter: 'Matteo Merli',
-      date: 'March 2018',
-      title: 'Effectively-once semantics in Apache Pulsar',
-      link: 'https://www.slideshare.net/merlimat/effectivelyonce-semantics-in-apache-pulsar'
-    },
-    {
-      forum: '',
-      forum_link: '',
-      presenter: 'Matteo Merli',
-      date: 'November 2016',
-      title: 'Pulsar: a distributed pub-sub platform',
-      link: 'https://www.slideshare.net/merlimat/pulsar-distributed-pubsub-platform'
-    },
-    {
-      forum: 'Bay Area Hadoop Meetup',
-      forum_link: 'https://www.meetup.com/hadoop',
-      presenter: 'Matteo Merli',
-      date: 'October 2016',
-      title: 'Pulsar: a highly scalable, low-latency pub-sub messaging system',
-      link: 'https://www.slideshare.net/ydn/october-2016-hug-pulsar-a-highly-scalable-low-latency-pubsub-messaging-system'
-    }
-  ]
-}
diff --git a/site2/website/data/team.js b/site2/website/data/team.js
deleted file mode 100644
index 0f21fb2cdae..00000000000
--- a/site2/website/data/team.js
+++ /dev/null
@@ -1,305 +0,0 @@
-module.exports = {
-  committers: [
-    {
-      name: 'Ali Ahmed',
-      apacheId: 'aahmed',
-      roles: 'Committer'
-    },
-    {
-      name: 'Addison Higham',
-      apacheId: 'addisonj',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Bo Cong',
-      apacheId: 'bogong',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Boyang Jerry Peng',
-      apacheId: 'jerrypeng',
-      org: 'Streamlio',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Brad McMillen',
-      apacheId: 'bradtm',
-      org: 'Yahoo',
-      roles: 'Committer, PMC',
-    },
-    {
-      name: 'Chris Kellogg',
-      apacheId: 'cckellogg',
-      org: 'Splunk',
-      roles: 'Committer'
-    },
-    {
-      name: 'Daniel Blankensteiner',
-      apacheId: 'blankensteiner',
-      roles: 'Committer'
-    },
-    {
-      name: 'David Fisher',
-      apacheId: 'wave',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'David Kjerrumgaard',
-      apacheId: 'david-streamlio',
-      roles: 'Committer'
-    },
-    {
-      name: 'Enrico Olivelli',
-      apacheId: 'eolivelli',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Fangbin Sun',
-      apacheId: 'sunfangbin',
-      roles: 'Committer'
-    },
-    {
-      name: 'Francis Christopher Liu',
-      apacheId: 'toffer',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Guangning E',
-      apacheId: 'guangning',
-      roles: 'Committer'
-    },
-    {
-      name: 'Guo Jiwei',
-      apacheId: 'technoboy',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Haiting Jiang',
-      apacheId: 'jianghaiting',
-      org: 'DiDi',
-      roles: 'Committer'
-    },
-    {
-      name: 'Hang Chen',
-      apacheId: 'chenhang',
-      org: 'BIGO Technology',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Hiroyuki Sakai',
-      apacheId: 'hrsakai',
-      org: 'Yahoo Japan Corporation',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Huanli Meng',
-      apacheId: 'huanlimeng',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Ivan Brendan Kelly',
-      apacheId: 'ivank',
-      org: 'Streamlio',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Jai Asher',
-      apacheId: 'jai1',
-      org: 'Yahoo',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Jennifer Huang',
-      apacheId: 'hjf',
-      org: 'StreamNative',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Jia Zhai',
-      apacheId: 'zhaijia',
-      org: 'StreamNative',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Jim Jagielski',
-      apacheId: 'jim',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Joe Francis',
-      apacheId: 'joef',
-      org: 'Yahoo',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Lari Hotari',
-      apacheId: 'lhotari',
-      org: 'DataStax',
-      roles: 'Committer'
-    },
-    {
-      name: 'Lin Lin',
-      apacheId: 'linlin',
-      org: 'Tencent',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Ludwig Pummer',
-      apacheId: 'ludwigp',
-      org: 'Yahoo',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Masahiro Sakamoto',
-      apacheId: 'massakam',
-      org: 'Yahoo Japan Corporation',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Marvin Cai',
-      apacheId: 'xxc',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Masakazu Kitajo',
-      apacheId: 'maskit',
-      org: '',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Matteo Merli',
-      apacheId: 'mmerli',
-      org: 'Streamlio',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Michael Marshall',
-      apacheId: 'mmarshall',
-      org: 'DataStax',
-      roles: 'Committer'
-    },
-    {
-      name: 'Nicolò Boschi',
-      apacheId: 'nicoloboschi',
-      org: 'DataStax',
-      roles: 'Committer'
-    },
-    {
-      name: 'Nozomi Kurihara',
-      apacheId: 'nkurihar',
-      org: 'Yahoo Japan Corporation',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'P. Taylor Goetz',
-      apacheId: 'ptgoetz',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Penghui Li',
-      apacheId: 'penghui',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Rajan Dhabalia',
-      apacheId: 'rdhabalia',
-      org: 'Yahoo',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Ran Gao',
-      apacheId: 'rgao',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Rui Fu',
-      apacheId: 'rfu',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Sahaya Andrews',
-      apacheId: 'andrews',
-      org: 'Yahoo',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Sanjeev Kulkarni',
-      apacheId: 'sanjeevrk',
-      org: 'Streamlio',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Sebastián Schepens',
-      apacheId: 'sschepens',
-      org: 'MercadoLibre',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Siddharth Boobna',
-      apacheId: 'sboobna',
-      org: 'Salesforce',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Sijie Guo',
-      apacheId: 'sijie',
-      org: 'StreamNative',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Xiaolong Ran',
-      apacheId: 'rxl',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Yijie Shen',
-      apacheId: 'yjshen',
-      org: 'KUAISHOU',
-      roles: 'Committer'
-    },
-    {
-      name: 'Yu Liu',
-      apacheId: 'liuyu',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Yuki Shiga',
-      apacheId: 'yushiga',
-      org: 'Yahoo Japan Corporation',
-      roles: 'Committer, PMC'
-    },
-    {
-      name: 'Yunze Xu',
-      apacheId: 'xyz',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Yuto Furuta',
-      apacheId: 'k2la',
-      org: 'Yahoo Japan Corporation',
-      roles: 'Committer'
-    },
-    {
-      name: 'Yong Zhang',
-      apacheId: 'yong',
-      org: 'StreamNative',
-      roles: 'Committer'
-    },
-    {
-      name: 'Zhangjian He',
-      apacheId: 'shoothzj',
-      org: 'HuaWei',
-      roles: 'Committer'
-    }
-  ]
-}
diff --git a/site2/website/data/users.js b/site2/website/data/users.js
deleted file mode 100644
index f5ac841dcaa..00000000000
--- a/site2/website/data/users.js
+++ /dev/null
@@ -1,359 +0,0 @@
-module.exports = [
-    {
-        name: 'Kingsoft Cloud',
-        url: 'https://www.ksyun.com/',
-        logo: 'https://fe.ksyun.com/header/images/pc/logo.png?a048d39f',
-        logo_white: true
-    },
-    {
-        name: 'Narvar',
-        url: 'https://corp.narvar.com/',
-        logo: 'https://assets-global.website-files.com/5d278e4646ba9e55d6c67475/5d49ce69c03a64b2d8466816_Logo%20-%20Colored.svg',
-    },
-    {
-        name: 'Giggso',
-        url: 'https://giggso.com/',
-        logo: 'https://www.giggso.com/wp-content/uploads/2021/06/logo-giggs.png',
-    },
-    {
-        name: 'STICorp',
-        url: 'https://www.sticorp.com.br/',
-        logo: 'https://sticorp.com.br/wp-content/uploads/2021/02/logo-sticorp.png',
-    },
-    {
-        name: 'Verizon Media',
-        url: 'https://www.verizonmedia.com/',
-        logo: 'https://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Verizon_Media_2019_logo.svg/1200px-Verizon_Media_2019_logo.svg.png',
-        featured: 1
-    },
-    {
-        name: 'Yahoo! JAPAN',
-        url: 'https://www.yahoo.co.jp/',
-        logo: 'https://s.yimg.jp/images/top/sp2/cmn/logo-170307.png',
-        featured: 2
-    },
-    {
-        name: 'Zhaopin',
-        url: 'https://www.zhaopin.com/',
-        logo: 'https://fecdn5.zhaopin.cn/www/assets/zhaopin.4659478df1ec9a2e6ed76997a64884f6.png'
-    },
-    {
-        name: 'Onde',
-        url: 'https://onde.app/',
-        logo: 'https://pbs.twimg.com/profile_images/1142024893229346818/JlCmThRZ_200x200.png',
-    },
-    {
-        name: 'Overstock',
-        url: 'https://www.overstock.com/',
-        logo: 'https://ak1.ostkcdn.com/img/mxc/OSTK_MAIN_LOGO_20181127KCH.jpg'
-    },
-    {
-        name: 'Ndustrial.io',
-        url: 'https://www.ndustrial.io/',
-        logo: 'https://images.squarespace-cdn.com/content/v1/56df41f2f699bb94c7a2c6fc/1552657060081-WX86GJXHX7UK81RGE6YU/ke17ZwdGBToddI8pDm48kKCofG1A85AnHnyK5g0bGkJZw-zPPgdn4jUwVcJE1ZvWQUxwkmyExglNqGp0IvTJZUJFbgE-7XRK3dMEBRBhUpzRPjxD400fzchYtVcY_asIzZyz67rHxPkx39rBmDbrxrXjNbFEDrPRRKbjQDhrWWQ/ndustrial.png'
-    },
-    {
-        name: 'Nutanix',
-        url: 'https://www.nutanix.com/',
-        logo: 'https://www.zuora.com/wp-content/uploads/2017/05/nutanix.png',
-        featured: 4
-    },
-    {
-        name: 'The Hut Group',
-        url: 'https://www.thg.com',
-        logo: 'https://1000logos.net/wp-content/uploads/2020/09/THG-Logo-1024x640.png'
-    },
-    {
-        name: 'Turtlequeue',
-        url: 'https://turtlequeue.com',
-        logo: 'https://turtlequeue.com/logo_black.png'
-    },
-    {
-        name: 'ProxyClick',
-        url: 'https://www.proxyclick.com/',
-        logo: 'https://www.proxyclick.com/hubfs/assets/images/logo-positive.svg'
-    },
-    {
-        name: 'Toast',
-        url: 'https://toasttab.com',
-        logo: 'https://cdn2.hubspot.net/hubfs/412971/toast-restaurant-pos.png'
-    },
-    {
-        name: 'Quantel AI',
-        url: 'http://quantel.ai/',
-        logo: 'https://static.wixstatic.com/media/7c19eb_41a090c255c94d19bc37cca9777c1d90~mv2.jpg/v1/fill/w_314,h_270,al_c,q_80,usm_0.66_1.00_0.01/Quantel-final%20white%20bg.webp'
-    },
-    {
-        name: 'Splunk',
-        url: 'https://splunk.com/',
-        logo: 'https://www.splunk.com/content/dam/splunk-blogs/images/2017/02/splunk-logo.png',
-        featured: 5
-    },
-    {
-        name: 'StreamNative',
-        url: 'https://streamnative.io/',
-        logo: 'https://streamnative.io/assets/static/sn-logo-vertical-dark.c516648.a34f97839dee38e7499aa0c21d0b2255.png',
-    },
-    {
-        name: 'EMQ',
-        url: 'https://www.emqx.io/',
-        logo: 'https://www.emqx.io/images/logo.png',
-    },
-    {
-        name: 'Tencent',
-        url: 'https://www.tencent.com',
-        logo: 'http://pluspng.com/img-png/tencent-png-tencent-logo-logotype-emblem-2-7537.png',
-        featured: 3
-    },
-    {
-        name: 'Comcast',
-        url: 'https://corporate.comcast.com/',
-        logo: 'https://corporate.comcast.com/resources/corporate/assets/images/svg/logo-desktop.svg'
-    },
-    {
-        name: 'China Mobile',
-        url: 'https://www.chinamobileltd.com/',
-        logo: 'https://www.chinamobileltd.com/en/images/global/logo.svg'
-    },
-    {
-        name: 'VipKid',
-        url: 'https://t.vipkid.com.cn/',
-        logo: 'https://s.vipkidstatic.com/fe-static/teacher/mkt-pc/img/e74f189.svg'
-    },
-    {
-        name: 'Vivy',
-        url: 'https://www.vivy.com/de/startseite/',
-        logo: 'https://www.vivy.com/fileadmin/vivy-startpage/vivy_logo.svg'
-    },
-    {
-        name: 'IoTium',
-        url: 'https://www.iotium.io/',
-        logo: 'https://www.iotium.io/site/wp-content/uploads/2018/04/IoTium-logo.jpg'
-    },
-    {
-        name: 'One Click Retail',
-        url: 'https://oneclickretail.com/',
-        logo: 'https://www.ascentialedge.com/themes/contrib/custom/images/edge-by-ascential.svg',
-        logo_white: true
-    },
-    {
-        name: 'Tuya',
-        url: 'https://en.tuya.com/',
-        logo: 'https://static1.tuyaus.com/static/portal_intl/img/e25eefa.png'
-    },
-    {
-        name: 'China Telecom',
-        url: 'https://www.chinatelecom-h.com/',
-        logo: 'https://www.chinatelecom-h.com/en/images/global/logo.png'
-    },
-    {
-        name: 'Kafkaesque',
-        url: 'https://kafkaesque.io/',
-        logo: 'https://kafkaesque.io/wp-content/uploads/2019/04/color_logo_with_background.svg'
-    },
-    {
-        name: 'OKCoin',
-        url: 'https://www.okcoin.com/',
-        logo: 'https://i0.wp.com/blog.okcoin.com/wp-content/uploads/2019/08/OKCoin-Logo-Spring2019-250x60px-01.png?fit=251%2C62&ssl=1',
-    },
-    {
-        name: 'BestPay',
-        url: 'https://www.bestpay.com.cn/',
-        logo: 'https://www.bestpay.com.cn/global/oig/images/logo.png'
-    },
-    {
-        name: '360',
-        url: 'https://www.360.cn/',
-        logo: 'http://p2.ssl.qhimg.com/t01d91636862957f76e.png'
-    },
-    {
-        name: 'Lakala',
-        url: 'http://www.lakala.com/',
-        logo: 'http://www.lakala.com/templets/default/image/temp/logo.png'
-    },
-    {
-        name: 'Huya',
-        url: 'https://www.huya.com/',
-        logo: 'https://a.msstatic.com/huya/main/img/logo2.png',
-        logo_white: true
-    },
-    {
-        name: 'CTWing',
-        url: 'https://www.ctwing.cn/',
-        logo: 'https://www.ctwing.cn/r/cms/www/default/images/public/logo.png'
-    },
-    {
-        name: 'Globalegrow E-Commerce',
-        url: 'https://www.globalegrow.com/',
-        logo: 'https://static.globalegrow.com/dist/images/domeimg/ch/logo.jpg'
-    },
-    {
-        name: 'YunZhiHuLian',
-        url: 'https://www.weihudashi.com',
-        logo: 'https://www.weihudashi.com/image/header-logo.png'
-    },
-    {
-        name: 'XiaoDuoAI',
-        url: 'https://www.xiaoduoai.com/',
-        logo: 'https://cdn.xiaoduoai.com/official-site/dist/assets/img/indexPage/xiaoduo_logo_en_white.843927.png',
-        logo_white: true
-    },
-    {
-        name: 'Shihong',
-        url: 'https://shihong.net.cn',
-        logo: 'https://www.shihong.net.cn/website/static/src/img/shihong1.png'
-    },
-    {
-        name: 'CleverCloud',
-        url: 'https://www.clever-cloud.com/en/',
-        logo: 'https://www.clever-cloud.com/images/brand-assets/logos/v2/logo_on_white.svg'
-    },
-    {
-        name: 'OVHcloud',
-        url: 'https://www.ovhcloud.com/',
-        logo: 'https://www.ovh.com/world/images/logo/ovhLogoColor.svg'
-    },
-    {
-        name: 'BrandsEye',
-        url: 'https://www.brandseye.com/',
-        logo: 'https://www.brandseye.com/theme-images/brandseye-logo-v2.png'
-    },
-    {
-        name: 'Max Kelsen',
-        url: 'https://maxkelsen.com/',
-        logo: 'https://maxkelsen.com/imgs/logo/Max-Kelsen-logo-black.png'
-    },
-    {
-        name: 'HSL Developer Community of Helsinki Regional Transport Authority',
-        url: 'https://dev.hsl.fi/',
-        logo: 'https://pbs.twimg.com/profile_images/2507371771/9toyr6r5ngcozfwg42zv_400x400.png'
-    },
-    // {
-    //     name: 'Ottoo',
-    //     url: 'https://ottoo.com',
-    //     logo: 'https://ottoo.com/assets/images/ottoo-logo.svg'
-    // },
-    {
-        name: 'MercadoLibre',
-        url: 'https://www.mercadolibre.com/',
-        logo: 'https://d1.awsstatic.com/case-studies/LATAM/mercadolibre.1d9d3766bb06e60948f1c5ce8851ce0eac63b349.png'
-    },
-    {
-        name: 'BIGO',
-        url: 'https://www.bigo.sg/',
-        logo: 'https://static-web.bigolive.tv/as/bigo-static/official_website/pc/img/about/logo-blue-big.png',
-    },
-    {
-        name: 'Keytop',
-        url: 'https://www.ikeytop.com/',
-        logo: 'https://static.wixstatic.com/media/ecbdea_434ae22f85ed4e93ba3fdc39c7141c3f~mv2.png/v1/fill/w_424,h_116,al_c,usm_0.66_1.00_0.01/Keytop_logo.png',
-    },
-    {
-        name: 'Zhihu',
-        url: 'https://www.zhihu.com/',
-        logo: 'https://pic4.zhimg.com/80/v2-a47051e92cf74930bedd7469978e6c08_hd.png',
-    },
-    {
-        name: 'Newland',
-        url: 'http://www.nlsoft.com.cn/',
-        logo: 'http://www.nlsoft.com.cn/images/common/logo.png',
-    },
-    {
-        name: 'PalFish',
-        url: 'https://www.ipalfish.com/',
-        logo: 'https://s04.cdn.ipalfish.com/kid/img/logo.ad4731cb.png',
-    },
-    {
-        name: 'Dada Group',
-        url: 'https://about.imdada.cn',
-        logo: 'https://fe.imdada.cn/alaskan/static/logo_color-aaed10c6738b703ad2b54c17f4c3f114.png',
-    },
-    {
-        name: 'Huawei Cloud',
-        url: 'https://www.huaweicloud.com',
-        logo: 'https://res.hc-cdn.com/cnpm-common-resource/2.0.2/base/header/components/images/logo.png',
-    },
-    {
-        name: 'Su Ning',
-        url: 'https://www.suning.com',
-        logo: 'https://image1.suning.cn/uimg/cms/img/159642507148437980.png',
-    },
-    {
-        name: 'Pingan Securites',
-        url: 'https://stock.pingan.com',
-        logo: 'https://stock.pingan.com/static/uploads/softdowm/2018-10-9/upload_c9ac4929e293f5109623b541740618ba.png',
-    },
-    {
-        name: 'Ge Tui',
-        url: 'https://www.getui.com',
-        logo: 'https://gt-static.getui.com/getui_pc/client/img/e33ecd9.svg',
-        logo_white: true
-    },
-    {
-        name: 'DataStax',
-        url: 'https://datastax.com',
-        logo: 'https://www.datastax.com/sites/default/files/inline-images/datastax-logotype-negative.png',
-        logo_white: false
-    },
-    {
-        name: 'KAISA',
-        url: 'https://www.kaisafin.com',
-        logo: 'https://www.kaisafin.com/images/logo.svg',
-    },
-    {
-        name: 'Bairong.Inc',
-        url: 'http://www.brgroup.com',
-        logo: 'http://www.brgroup.com/_nuxt/img/d2a976e.png',
-          logo_white: true
-    },
-    {
-        name: 'Itcast.cn',
-        url: 'http://www.itcast.cn',
-        logo: 'http://www.itcast.cn/2018czgw/images/logo2.png',
-    },
-    {
-        name: 'Appen',
-        url: 'https://www.appen.com.cn/',
-        logo: 'https://resources.appen.com/wp-content/uploads/2020/03/no-tagline.svg',
-    },
-    {
-        name: 'Pandio',
-        url: 'https://pandio.com',
-        logo: 'https://pandio-public-assets.s3-us-west-2.amazonaws.com/pandio_225-05.png',
-    },
-    {
-        name: 'Deposit-Solutions',
-        url: 'https://www.deposit-solutions.com/',
-        logo: 'https://media-exp1.licdn.com/dms/image/C4E0BAQGWAAW9iYFSwA/company-logo_200_200/0/1625219600895?e=1638403200&v=beta&t=iGNhEWlAFQDJOHAScjumctjY5M2eSU4fL4X-9kgpR2M'
-    },
-    {
-        name: 'Macrometa',
-        url: 'https://macrometa.com',
-        logo: 'https://uploads-ssl.webflow.com/5fa9e94bc848ae335afdd627/602ae50ae801b44f15185683_logo-moc-blue.png',
-    },
-    {
-        name: 'Softtech',
-        url: 'https://softtech.com.tr/en/homepage/',
-        logo: 'https://softtech.com.tr/wp-content/uploads/2017/12/SOFTTECH-LOGO.png',
-    },
-    {
-        name: 'Baidu',
-        url: 'https://www.baidu.com',
-        logo: 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png',
-    },
-    {
-        name: 'Dominos-Pizza',
-        url: 'https://www.dominos.com.cn/home',
-        logo: 'https://www.dominos.com.cn/assets/img/logo.087b3fea.png',
-    },
-    {
-        name: 'MGTV',
-        url: 'https://www.mgtv.com',
-        logo: 'http://honey.mgtv.com/klyg.official/images/nav/logo.png',
-    },
-    {
-        name: 'AsiaInfo',
-        url: 'https://www.asiainfo.com/en_us/index.html',
-        logo: 'https://www.asiainfo.com/include/images/logo.svg',
-    }
-].sort((a, b) => (a.name > b.name) ? 1 : -1);
diff --git a/site2/website/docusaurus-version.js b/site2/website/docusaurus-version.js
deleted file mode 100755
index 0e04a6c3aaf..00000000000
--- a/site2/website/docusaurus-version.js
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * Copyright (c) 2017-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-require('@babel/register')({
-    babelrc: false,
-    only: [__dirname, `${process.cwd()}/core`],
-    plugins: [
-      require('./server/translate-plugin.js'),
-      require('@babel/plugin-proposal-class-properties').default,
-      require('@babel/plugin-proposal-object-rest-spread').default,
-    ],
-    presets: [
-      require('@babel/preset-react').default,
-      require('@babel/preset-env').default,
-    ],
-  });
-  
-  const program = require('commander');
-  const chalk = require('chalk');
-  const glob = require('glob');
-  const fs = require('fs-extra');
-  const mkdirp = require('mkdirp');
-  const path = require('path');
-  
-  const readMetadata = require('./server/readMetadata.js');
-  const utils = require('./server/utils.js');
-  const versionFallback = require('./server/versionFallback.js');
-  const metadataUtils = require('./server/metadataUtils.js');
-  const env = require('./server/env.js');
-  
-  const CWD = process.cwd();
-  let versions;
-  if (fs.existsSync(`${CWD}/versions.json`)) {
-    versions = require(`${CWD}/versions.json`);
-  } else {
-    versions = [];
-  }
-  
-  let version;
-  
-  program
-    .arguments('<version>')
-    .action(ver => {
-      version = ver;
-    })
-    .parse(process.argv);
-  
-  if (env.versioning.missingVersionsPage) {
-    env.versioning.printMissingVersionsPageError();
-    process.exit(1);
-  }
-  
-  if (version.includes('/')) {
-    console.error(
-      `${chalk.red(
-        'Invalid version number specified! Do not include slash (/). Try something like: 1.0.0',
-      )}`,
-    );
-    process.exit(1);
-  }
-  
-  if (typeof version === 'undefined') {
-    console.error(
-      `${chalk.yellow(
-        'No version number specified!',
-      )}\nPass the version you wish to create as an argument.\nEx: 1.0.0`,
-    );
-    process.exit(1);
-  }
-  
-  if (versions.includes(version)) {
-    console.error(
-      `${chalk.yellow(
-        'This version already exists!',
-      )}\nSpecify a new version to create that does not already exist.`,
-    );
-    process.exit(1);
-  }
-  
-  function makeHeader(metadata) {
-    let header = '---\n';
-    Object.keys(metadata).forEach(key => {
-      header += `${key}: ${metadata[key]}\n`;
-    });
-    header += '---\n';
-    return header;
-  }
-  
-  function writeFileAndCreateFolder(file, content, encoding) {
-    mkdirp.sync(path.dirname(file));
-  
-    fs.writeFileSync(file, content, encoding);
-  }
-  
-  const versionFolder = `${CWD}/versioned_docs/version-${version}`;
-  
-  mkdirp.sync(versionFolder);
-  
-  // copy necessary files to new version, changing some of its metadata to reflect the versioning
-  const files = glob.sync(`${CWD}/../${readMetadata.getDocsPath()}/**`);
-  files.forEach(file => {
-    const ext = path.extname(file);
-    if (ext !== '.md' && ext !== '.markdown') {
-      return;
-    }
-  
-    const res = metadataUtils.extractMetadata(fs.readFileSync(file, 'utf8'));
-    const metadata = res.metadata;
-    // Don't version any docs without any metadata whatsoever.
-    if (Object.keys(metadata).length === 0) {
-      return;
-    }
-    const rawContent = res.rawContent;
-    if (!metadata.id) {
-      metadata.id = path.basename(file, path.extname(file));
-    }
-    if (metadata.id.includes('/')) {
-      throw new Error('Document id cannot include "/".');
-    }
-    if (!metadata.title) {
-      metadata.title = metadata.id;
-    }
-  
-    const docsDir = path.join(CWD, '../', readMetadata.getDocsPath());
-    const subDir = utils.getSubDir(file, docsDir);
-    const docId = subDir ? `${subDir}/${metadata.id}` : metadata.id;
-    // if (!versionFallback.diffLatestDoc(file, docId)) {
-    //   return;
-    // }
-    metadata.original_id = metadata.id;
-    metadata.id = `version-${version}-${metadata.id}`;
-    const targetFile = subDir
-      ? `${versionFolder}/${subDir}/${path.basename(file)}`
-      : `${versionFolder}/${path.basename(file)}`;
-  
-    writeFileAndCreateFolder(
-      targetFile,
-      makeHeader(metadata) + rawContent,
-      'utf8',
-    );
-  });
-  
-  // copy sidebar if necessary
-  // if (versionFallback.diffLatestSidebar()) {
-  mkdirp(`${CWD}/versioned_sidebars`);
-  const sidebar = JSON.parse(fs.readFileSync(`${CWD}/sidebars.json`, 'utf8'));
-  const versioned = {};
-
-  Object.keys(sidebar).forEach(sb => {
-    const versionSidebar = `version-${version}-${sb}`;
-    versioned[versionSidebar] = {};
-
-    const categories = sidebar[sb];
-    Object.keys(categories).forEach(category => {
-      versioned[versionSidebar][category] = [];
-
-      const categoryItems = categories[category];
-      categoryItems.forEach(categoryItem => {
-        let versionedCategoryItem = categoryItem;
-        if (typeof categoryItem === 'object') {
-          if (categoryItem.ids && categoryItem.ids.length > 0) {
-            versionedCategoryItem.ids = categoryItem.ids.map(
-              id => `version-${version}-${id}`,
-            );
-          }
-        } else if (typeof categoryItem === 'string') {
-          versionedCategoryItem = `version-${version}-${categoryItem}`;
-        }
-        versioned[versionSidebar][category].push(versionedCategoryItem);
-      });
-    });
-  });
-
-  fs.writeFileSync(
-    `${CWD}/versioned_sidebars/version-${version}-sidebars.json`,
-    `${JSON.stringify(versioned, null, 2)}\n`,
-    'utf8',
-  );
-  // }
-  
-
-  // update versions.json file
-  versions.unshift(version);
-  fs.writeFileSync(
-    `${CWD}/versions.json`,
-    `${JSON.stringify(versions, null, 2)}\n`,
-  );
-  
-  console.log(`${chalk.green(`Version ${version} created!\n`)}`);
-  
\ No newline at end of file
diff --git a/site2/website/languages.js b/site2/website/languages.js
deleted file mode 100644
index 938014d0777..00000000000
--- a/site2/website/languages.js
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- * Copyright (c) 2017-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-const languages = [
-  {
-    enabled: true,
-    name: 'English',
-    tag: 'en',
-  },
-  {
-    enabled: true,
-    name: '日本語',
-    tag: 'ja',
-  },
-  {
-    enabled: false,
-    name: 'العربية',
-    tag: 'ar',
-  },
-  {
-    enabled: false,
-    name: 'Bosanski',
-    tag: 'bs-BA',
-  },
-  {
-    enabled: false,
-    name: 'Català',
-    tag: 'ca',
-  },
-  {
-    enabled: false,
-    name: 'Čeština',
-    tag: 'cs',
-  },
-  {
-    enabled: false,
-    name: 'Dansk',
-    tag: 'da',
-  },
-  {
-    enabled: false,
-    name: 'Deutsch',
-    tag: 'de',
-  },
-  {
-    enabled: false,
-    name: 'Ελληνικά',
-    tag: 'el',
-  },
-  {
-    enabled: false,
-    name: 'Español',
-    tag: 'es-ES',
-  },
-  {
-    enabled: false,
-    name: 'فارسی',
-    tag: 'fa-IR',
-  },
-  {
-    enabled: false,
-    name: 'Suomi',
-    tag: 'fi',
-  },
-  {
-    enabled: true,
-    name: 'Français',
-    tag: 'fr',
-  },
-  {
-    enabled: false,
-    name: 'עִברִית',
-    tag: 'he',
-  },
-  {
-    enabled: false,
-    name: 'Magyar',
-    tag: 'hu',
-  },
-  {
-    enabled: false,
-    name: 'Bahasa Indonesia',
-    tag: 'id-ID',
-  },
-  {
-    enabled: false,
-    name: 'Italiano',
-    tag: 'it',
-  },
-  {
-    enabled: false,
-    name: 'Afrikaans',
-    tag: 'af',
-  },
-  {
-    enabled: true,
-    name: '한국어',
-    tag: 'ko',
-  },
-  {
-    enabled: false,
-    name: 'मराठी',
-    tag: 'mr-IN',
-  },
-  {
-    enabled: false,
-    name: 'Nederlands',
-    tag: 'nl',
-  },
-  {
-    enabled: false,
-    name: 'Norsk',
-    tag: 'no-NO',
-  },
-  {
-    enabled: false,
-    name: 'Polski',
-    tag: 'pl-PL',
-  },
-  {
-    enabled: false,
-    name: 'Português',
-    tag: 'pt-PT',
-  },
-  {
-    enabled: false,
-    name: 'Português (Brasil)',
-    tag: 'pt-BR',
-  },
-  {
-    enabled: false,
-    name: 'Română',
-    tag: 'ro',
-  },
-  {
-    enabled: false,
-    name: 'Русский',
-    tag: 'ru',
-  },
-  {
-    enabled: false,
-    name: 'Slovenský',
-    tag: 'sk-SK',
-  },
-  {
-    enabled: false,
-    name: 'Српски језик (Ћирилица)',
-    tag: 'sr',
-  },
-  {
-    enabled: false,
-    name: 'Svenska',
-    tag: 'sv-SE',
-  },
-  {
-    enabled: false,
-    name: 'Türkçe',
-    tag: 'tr',
-  },
-  {
-    enabled: false,
-    name: 'Українська',
-    tag: 'uk',
-  },
-  {
-    enabled: false,
-    name: 'Tiếng Việt',
-    tag: 'vi',
-  },
-  {
-    enabled: true,
-    name: '中文',
-    tag: 'zh-CN',
-  },
-  {
-    enabled: true, 
-    name: '繁體中文', 
-    tag: 'zh-TW'
-  },
-];
-module.exports = languages;
diff --git a/site2/website/oldversions.json b/site2/website/oldversions.json
deleted file mode 100644
index a83f27fb697..00000000000
--- a/site2/website/oldversions.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
-    "2.0.1-incubating",
-    "2.0.0-rc1-incubating",
-    "1.22.0-incubating",
-    "1.21.0-incubating",
-    "1.20.0-incubating",
-    "1.19.0-incubating"
-]
diff --git a/site2/website/package.json b/site2/website/package.json
deleted file mode 100644
index c13825263dc..00000000000
--- a/site2/website/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "scripts": {
-    "examples": "docusaurus-examples",
-    "start": "NODE_OPTIONS=--max_old_space_size=20480 docusaurus-start",
-    "build": "docusaurus-build",
-    "publish-gh-pages": "docusaurus-publish",
-    "write-translations": "docusaurus-write-translations",
-    "version": "cp -r docusaurus-version.js ./node_modules/docusaurus/lib/version.js && docusaurus-version",
-    "rename-version": "docusaurus-rename-version",
-    "test": "jest --detectOpenHandles",
-    "crowdin-upload": "crowdin --config ../crowdin.yaml upload sources --auto-update -b master",
-    "crowdin-download": "crowdin --config ../crowdin.yaml download -b master"
-  },
-  "devDependencies": {
-    "axios": "^0.18.0",
-    "docusaurus": "^1.11.1",
-    "ejs": "^2.5.2",
-    "highlight.js": "^9.7.0",
-    "jest": "^23.3.0",
-    "jest-puppeteer": "^3.2.1",
-    "marked": "^0.3.6",
-    "puppeteer": "^1.5.0",
-    "redoc": "^2.0.0-alpha.30",
-    "remarkable-embed": "^0.4.1",
-    "replace-in-file": "^3.4.0"
-  },
-  "jest": {
-    "preset": "jest-puppeteer"
-  },
-  "dependencies": {
-    "bootstrap": "^3.3.7",
-    "font-awesome": "^4.7.0",
-    "jquery": "^3.1.1",
-    "jquery.scrollto": "^2.1.2",
-    "node-static": "^0.7.9"
-  },
-  "license": "Apache-2.0"
-}
diff --git a/site2/website/pages/en/admin-rest-api.js b/site2/website/pages/en/admin-rest-api.js
deleted file mode 100644
index dc5626d5ff3..00000000000
--- a/site2/website/pages/en/admin-rest-api.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const siteConfig = require(`${process.cwd()}/siteConfig.js`);
-
-class AdminRestApi extends React.Component {
-  render() {
-
-    const swaggerUrl = `${siteConfig.baseUrl}swagger/swagger.json`
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer" >
-          <script base-url={`${swaggerUrl}`} src="../js/getSwaggerByVersion.js"></script>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = AdminRestApi;
diff --git a/site2/website/pages/en/coding-guide.js b/site2/website/pages/en/coding-guide.js
deleted file mode 100644
index f2e6eef6c66..00000000000
--- a/site2/website/pages/en/coding-guide.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary');
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const Container = CompLibrary.Container;
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-
-const codingGuide = require('fs').readFileSync(`${CWD}/coding-guide.md`, 'utf8')
-
-class Coding extends React.Component {
-  render() {
-
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1>Coding guide</h1>
-              <hr />
-            </header>
-            <MarkdownBlock>
-              {codingGuide}
-            </MarkdownBlock>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = Coding;
diff --git a/site2/website/pages/en/contact.js b/site2/website/pages/en/contact.js
deleted file mode 100644
index 24acede177c..00000000000
--- a/site2/website/pages/en/contact.js
+++ /dev/null
@@ -1,119 +0,0 @@
-
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary.js');
-const Container = CompLibrary.Container;
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const GridBlock = CompLibrary.GridBlock;
-const translate = require('../../server/translate.js').translate;
-
-const CWD = process.cwd();
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-
-class Contact extends React.Component {
-  render() {
-    let language = this.props.language || '';
-    const mailingLists = [
-      {
-        email: 'users@pulsar.apache.org',
-        desc: 'User-related discussions',
-        subscribe: 'mailto:users-subscribe@pulsar.apache.org',
-        unsubscribe: 'mailto:users-unsubscribe@pulsar.apache.org',
-        archives: 'http://mail-archives.apache.org/mod_mbox/pulsar-users/'
-      },
-      {
-        email: 'dev@pulsar.apache.org',
-        desc: 'Development-related discussions',
-        subscribe: 'mailto:dev-subscribe@pulsar.apache.org',
-        unsubscribe: 'mailto:dev-unsubscribe@pulsar.apache.org',
-        archives: 'http://mail-archives.apache.org/mod_mbox/pulsar-dev/'
-      },
-      {
-        email: 'commits@pulsar.apache.org',
-        desc: 'All commits to the Pulsar repository',
-        subscribe: 'mailto:commits-subscribe@pulsar.apache.org',
-        unsubscribe: 'mailto:commits-unsubscribe@pulsar.apache.org',
-        archives: 'http://mail-archives.apache.org/mod_mbox/pulsar-commits/'
-      }
-    ]
-
-    return (
-      <div className="docMainWrapper wrapper">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1><translate>Contact</translate></h1>
-              <hr />
-            </header>
-            <p><translate>
-            There are many ways to get help from the Apache Pulsar community.
-            The mailing lists are the primary place where all Pulsar committers are present.
-            Bugs and feature requests can either be discussed on the dev mailing list or
-            by opening an issue on</translate>
-            <a href="https://github.com/apache/pulsar/" target="_blank"> GitHub</a>.
-            </p>
-
-            <h2><translate>Mailing Lists</translate></h2>
-            <table className="versions">
-              <thead>
-                <tr>
-                  <th><translate>Name</translate></th>
-                  <th><translate>Scope</translate></th>
-                  <th></th>
-                  <th></th>
-                  <th></th>
-                </tr>
-              </thead>
-              <tbody>
-                {mailingLists.map(
-                  list => (
-                      <tr key={list.email}>
-                        <td>{list.email}</td>
-                        <td>{list.desc}</td>
-                        <td><a href={list.subscribe}><translate>Subscribe</translate></a></td>
-                        <td><a href={list.unsubscribe}><translate>Unsubscribe</translate></a></td>
-                        <td><a href={list.archives}><translate>Archives</translate></a></td>
-                      </tr>
-                    )
-                )}
-              </tbody>
-            </table>
-            <h2><translate>Reporting Security Vulnerabilities</translate></h2>
-              <p><translate>
-              The current process for reporting vulnerabilities is outlined here: </translate>
-              <a href="https://www.apache.org/security/" target="_blank"> Apache Security</a>
-              <translate>. When reporting a vulnerability to</translate>
-              <a href="mailto:security@apache.org" target="_blank"> security@apache.org</a>
-              <translate>, you can copy your email to </translate>
-              <a href="mailto:private@pulsar.apache.org" target="_blank"> private@pulsar.apache.org </a>
-              <translate> to send your report to the Apache Pulsar Project Management Committee. This is a private mailing list.</translate>
-              </p>
-
-            <h2><translate>Stack Overflow</translate></h2>
-              <p><translate>
-              For technical questions, we ask that you post them to</translate>
-              <a href="https://stackoverflow.com/tags/apache-pulsar" target="_blank"> Stack Overflow </a> <translate>using the tag “apache-pulsar”.  
-              </translate></p>
-            
-            <h2><translate>Slack</translate></h2>
-            <p><translate>There is a Pulsar slack channel that is used for informal discussions for devs and users.</translate></p>
-
-            <p><translate>The Slack instance is at </translate> <a href="https://apache-pulsar.slack.com/" target="_blank">
-                    https://apache-pulsar.slack.com/</a></p>
-
-            <p><translate>You can self-register at </translate> <a href="https://apache-pulsar.herokuapp.com/" target="_blank">
-                    https://apache-pulsar.herokuapp.com/</a></p>
-
-            <h2><translate>WeChat</translate></h2>
-            <p><translate>There are several WeChat groups that are used for informal discussions for devs and users.</translate></p>
-
-            <p><translate>To join these WeChat tech groups, you can add Bot with the WeChat ID: StreamNative_BJ</translate></p>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = Contact;
diff --git a/site2/website/pages/en/contributing.js b/site2/website/pages/en/contributing.js
deleted file mode 100644
index aba2bfee88b..00000000000
--- a/site2/website/pages/en/contributing.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary');
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const Container = CompLibrary.Container;
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-
-const contributing = require('fs').readFileSync(`${CWD}/contributing.md`, 'utf8')
-
-class Contributing extends React.Component {
-  render() {
-
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1>Contributing to Apache Pulsar</h1>
-              <hr />
-            </header>
-            <MarkdownBlock>
-              {contributing}
-            </MarkdownBlock>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = Contributing;
diff --git a/site2/website/pages/en/download.js b/site2/website/pages/en/download.js
deleted file mode 100644
index 65a802f83d4..00000000000
--- a/site2/website/pages/en/download.js
+++ /dev/null
@@ -1,411 +0,0 @@
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary');
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const Container = CompLibrary.Container;
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const translate = require('../../server/translate.js').translate;
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-const releases = require(`${CWD}/releases.json`);
-const pulsarManagerReleases = require(`${CWD}/pulsar-manager-release.json`)
-const pulsarAdaptersReleases = require(`${CWD}/pulsar-adapters-release.json`)
-const connectors = require(`${CWD}/data/connectors.js`);
-
-function getLatestArchiveMirrorUrl(version, type) {
-    return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-${version}/apache-pulsar-${version}-${type}.tar.gz`
-}
-
-function getLatestOffloadersMirrorUrl(version) {
-    return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-${version}/apache-pulsar-offloaders-${version}-bin.tar.gz`
-}
-
-function getLatestAdaptersMirrorUrl(version) {
-    return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-adapters-${version}/apache-pulsar-adapters-${version}-src.tar.gz`
-}
-
-function distUrl(version, type) {
-    return `https://downloads.apache.org/pulsar/pulsar-${version}/apache-pulsar-${version}-${type}.tar.gz`
-}
-
-function distOffloadersUrl(version) {
-    return `https://downloads.apache.org//pulsar/pulsar-${version}/apache-pulsar-offloaders-${version}-bin.tar.gz`
-}
-
-function distAdaptersUrl(version) {
-    return `https://downloads.apache.org/pulsar/pulsar-adapters-${version}/apache-pulsar-adapters-${version}-src.tar.gz`
-}
-
-function archiveUrl(version, type) {
-    if (version.includes('incubating')) {
-        return `https://archive.apache.org/dist/incubator/pulsar/pulsar-${version}/apache-pulsar-${version}-${type}.tar.gz`
-    } else {
-        return `https://archive.apache.org/dist/pulsar/pulsar-${version}/apache-pulsar-${version}-${type}.tar.gz`
-    }
-}
-
-function pularManagerArchiveUrl(version, type) {
-    return `https://archive.apache.org/dist/pulsar/pulsar-manager/pulsar-manager-${version}/apache-pulsar-manager-${version}-${type}.tar.gz`
-}
-
-function connectorDistUrl(name, version) {
-    return `https://downloads.apache.org/pulsar/pulsar-${version}/connectors/pulsar-io-${name}-${version}.nar`
-}
-
-function connectorDownloadUrl(name, version) {
-    return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-${version}/connectors/pulsar-io-${name}-${version}.nar`
-}
-
-function getLatestPulsarManagerArchiveMirrorUrl(version, type) {
-  return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-manager/pulsar-manager-${version}/apache-pulsar-manager-${version}-${type}.tar.gz`
-}
-
-function pulsarManagerDistUrl(version, type) {
-  return `https://downloads.apache.org/pulsar/pulsar-manager/pulsar-manager-${version}/apache-pulsar-manager-${version}-${type}.tar.gz`
-}
-
-class Download extends React.Component {
-  render() {
-    const latestVersion = releases[0];
-    const latestPulsarManagerVersion = pulsarManagerReleases[0];
-    const latestPulsarAdaptersVersion = pulsarAdaptersReleases[0];
-    const latestArchiveMirrorUrl = getLatestArchiveMirrorUrl(latestVersion, 'bin');
-    const latestSrcArchiveMirrorUrl = getLatestArchiveMirrorUrl(latestVersion, 'src');
-    const latestPulsarManagerArchiveMirrorUrl = getLatestPulsarManagerArchiveMirrorUrl(latestPulsarManagerVersion, 'bin');
-    const latestPulsarManagerSrcArchiveMirrorUrl = getLatestPulsarManagerArchiveMirrorUrl(latestPulsarManagerVersion, 'src');
-    const latestArchiveUrl = distUrl(latestVersion, 'bin');
-    const latestSrcArchiveUrl = distUrl(latestVersion, 'src')
-    const pulsarManagerLatestArchiveUrl = pulsarManagerDistUrl(latestPulsarManagerVersion, 'bin');
-    const pulsarManagerLatestSrcArchiveUrl = pulsarManagerDistUrl(latestPulsarManagerVersion, 'src');
-
-    const releaseInfo = releases.map(version => {
-      return {
-        version: version,
-        binArchiveUrl: archiveUrl(version, 'bin'),
-        srcArchiveUrl: archiveUrl(version, 'src')
-      }
-    });
-
-    const pulsarManagerReleaseInfo = pulsarManagerReleases.map(version => {
-      return {
-        version: version,
-        binArchiveUrl: pularManagerArchiveUrl(version, 'bin'),
-        srcArchiveUrl: pularManagerArchiveUrl(version, 'src')
-      }
-    });
-
-
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1><translate>Apache Pulsar downloads</translate></h1>
-              <hr />
-            </header>
-
-            <h2><translate>Release notes</translate></h2>
-            <div>
-              <p>
-                <a href={`${siteConfig.baseUrl}${this.props.language}/release-notes`}>Release notes</a> for all Pulsar's versions
-              </p>
-            </div>
-
-            <h2 id="latest"><translate>Current version (Stable)</translate> {latestVersion}</h2>
-            <table className="versions" style={{width:'100%'}}>
-              <thead>
-                <tr>
-                  <th><translate>Release</translate></th>
-                  <th><translate>Link</translate></th>
-                  <th><translate>Crypto files</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                <tr key={'binary'}>
-                  <th><translate>Binary</translate></th>
-                  <td>
-                    <a href={latestArchiveMirrorUrl}>apache-pulsar-{latestVersion}-bin.tar.gz</a>
-                  </td>
-                  <td>
-                    <a href={`${latestArchiveUrl}.asc`}>asc</a>,&nbsp;
-                    <a href={`${latestArchiveUrl}.sha512`}>sha512</a>
-                  </td>
-                </tr>
-                <tr key={'source'}>
-                  <th><translate>Source</translate></th>
-                  <td>
-                    <a href={latestSrcArchiveMirrorUrl}>apache-pulsar-{latestVersion}-src.tar.gz</a>
-                  </td>
-                  <td>
-                    <a href={`${latestSrcArchiveUrl}.asc`}>asc</a>,&nbsp;
-                    <a href={`${latestSrcArchiveUrl}.sha512`}>sha512</a>
-                  </td>
-                </tr>
-                </tbody>
-              </table>
-
-              <h3><translate>Tiered storage offloaders</translate></h3>
-              <table className="versions" style={{width:'100%'}}>
-                <thead>
-                  <tr>
-                    <th><translate>Release</translate></th>
-                    <th><translate>Link</translate></th>
-                    <th><translate>Crypto files</translate></th>
-                  </tr>
-                </thead>
-                <tbody>
-                <tr>
-                    <th><translate>Offloaders</translate></th>
-                    <td>
-                      <a href={getLatestOffloadersMirrorUrl(latestVersion)}>apache-pulsar-offloaders-{latestVersion}-bin.tar.gz</a>
-                    </td>
-                    <td>
-                      <a href={`${distOffloadersUrl(latestVersion)}.asc`}>asc</a>,&nbsp;
-                      <a href={`${distOffloadersUrl(latestVersion)}.sha512`}>sha512</a>
-                    </td>
-                </tr>
-              </tbody>
-            </table>
-
-            <h3 id="connectors"><translate>Pulsar IO connectors</translate></h3>
-
-            <table className="versions" style={{width:'100%'}}>
-              <thead>
-                <tr>
-                  <th><translate>IO connector</translate></th>
-                  <th><translate>Archive</translate></th>
-                  <th><translate>Crypto files</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-              {connectors.map(
-                connector =>
-                    <tr key={connector.name}>
-                      <td>
-                        <a href={`${connector.link}`} target="_blank">{connector.longName}</a>
-                      </td>
-                      <td>
-                        <a href={`${connectorDownloadUrl(connector.name, latestVersion)}`} target="_blank">pulsar-io-{connector.name}-{latestVersion}.nar</a>
-                      </td>
-                      <td>
-                        <a href={`${connectorDistUrl(connector.name, latestVersion)}.asc`}>asc</a>,&nbsp;
-                        <a href={`${connectorDistUrl(connector.name, latestVersion)}.sha512`}>sha512</a>
-                      </td>
-                    </tr>
-              )}
-              </tbody>
-            </table>
-
-
-            <h2><translate>Release Integrity</translate></h2>
-            <MarkdownBlock>
-              You must [verify](https://www.apache.org/info/verification.html) the integrity of the downloaded files.
-              We provide OpenPGP signatures for every release file. This signature should be matched against the
-              [KEYS](https://downloads.apache.org/pulsar/KEYS) file which contains the OpenPGP keys of
-              Pulsar's Release Managers. We also provide `SHA-512` checksums for every release file.
-              After you download the file, you should calculate a checksum for your download, and make sure it is
-              the same as ours.
-            </MarkdownBlock>
-
-            <h2><translate>Getting started</translate></h2>
-            <div>
-              <p>
-              <translate>
-                Once you've downloaded a Pulsar release, instructions on getting up and running with a standalone cluster
-                that you can run on your laptop can be found in the{' '}
-              </translate>&nbsp;
-                <a href={`${siteConfig.baseUrl}docs/${this.props.language}/getting-started-standalone`}><translate>Run Pulsar locally</translate></a> <translate>tutorial</translate>.
-              </p>
-            </div>
-            <p>
-              <translate>
-              If you need to connect to an existing Pulsar cluster or instance using an officially supported client,
-              see the client docs for these languages:
-              </translate>
-            </p>
-            <table className="clients">
-              <thead>
-                <tr>
-                  <th><translate>Client guide</translate></th>
-                  <th><translate>API docs</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                <tr key={'java'}>
-                  <td><a href={`${siteConfig.baseUrl}docs/${this.props.language}/client-libraries-java`}><translate>The Pulsar java client</translate></a></td>
-                  <td><translate>The Pulsar java client</translate></td>
-                </tr>
-                <tr key={'go'}>
-                  <td><a href={`${siteConfig.baseUrl}docs/${this.props.language}/client-libraries-go`}><translate>The Pulsar go client</translate></a></td>
-                  <td><translate>The Pulsar go client</translate></td>
-                </tr>
-                <tr key={'python'}>
-                  <td><a href={`${siteConfig.baseUrl}docs/${this.props.language}/client-libraries-python`}><translate>The Pulsar python client</translate></a></td>
-                  <td><translate>The Pulsar python client</translate></td>
-                </tr>
-                <tr key={'cpp'}>
-                  <td><a href={`${siteConfig.baseUrl}docs/${this.props.language}/client-libraries-cpp`}><translate>The Pulsar C++ client</translate></a></td>
-                  <td><translate>The Pulsar C++ client</translate></td>
-                </tr>
-              </tbody>
-            </table>
-
-            <h2 id="archive"><translate>Older releases</translate></h2>
-            <table className="versions">
-              <thead>
-                <tr>
-                  <th><translate>Release</translate></th>
-                  <th><translate>Binary</translate></th>
-                  <th><translate>Source</translate></th>
-                  <th><translate>Release notes</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                {releaseInfo.map(
-                  info => {
-                        var sha = "sha512"
-                        if (info.version.includes('1.19.0-incubating') || info.version.includes('1.20.0-incubating')) {
-                            sha = "sha"
-                        }
-                        return info.version !== latestVersion && (
-                            <tr key={info.version}>
-                        <th>{info.version}</th>
-                        <td>
-                        <a href={info.binArchiveUrl}>apache-pulsar-{info.version}-bin.tar.gz</a> &nbsp;
-                          (<a href={`${info.binArchiveUrl}.asc`}>asc</a>,&nbsp;
-                          <a href={`${info.binArchiveUrl}.${sha}`}>{`${sha}`}</a>)
-                          </td>
-                          <td>
-                          <a href={info.srcArchiveUrl}>apache-pulsar-{info.version}-src.tar.gz</a>
-                              &nbsp;
-                          (<a href={`${info.srcArchiveUrl}.asc`}>asc</a>,&nbsp;
-                          <a href={`${info.srcArchiveUrl}.${sha}`}>{`${sha}`}</a>)
-                          </td>
-                          <td>
-                          <a href={`${siteConfig.baseUrl}${this.props.language}/release-notes#${info.version.replace(/\./g,'')}`}><translate>Release Notes</translate></a>
-                          </td>
-                          </tr>
-                      )
-                    }
-                )}
-              </tbody>
-            </table>
-
-            <header className="postHeader">
-              <h1><translate>Pulsar Adapters</translate></h1>
-              <hr />
-            </header>
-            <h2 id="latest"><translate>Current version (Stable)</translate> {latestPulsarAdaptersVersion}</h2>
-              <table className="versions" style={{width:'100%'}}>
-                <thead>
-                  <tr>
-                    <th><translate>Release</translate></th>
-                    <th><translate>Link</translate></th>
-                    <th><translate>Crypto files</translate></th>
-                  </tr>
-                </thead>
-                <tbody>
-                <tr>
-                    <th><translate>Source</translate></th>
-                    <td>
-                      <a href={getLatestAdaptersMirrorUrl(latestPulsarAdaptersVersion)}>apache-pulsar-adapters-{latestPulsarAdaptersVersion}-src.tar.gz</a>
-                    </td>
-                    <td>
-                      <a href={`${distAdaptersUrl(latestPulsarAdaptersVersion)}.asc`}>asc</a>,&nbsp;
-                      <a href={`${distAdaptersUrl(latestPulsarAdaptersVersion)}.sha512`}>sha512</a>
-                    </td>
-                </tr>
-              </tbody>
-            </table>
-            <translate>Pulsar Adapters are available on Maven Central, there is no binary package.</translate>
-
-            <header className="postHeader">
-              <h1><translate>Apache Pulsar Manager downloads</translate></h1>
-              <hr />
-            </header>
-            <h2><translate>Release notes</translate></h2>
-            <div>
-              <p>
-                <a href={`${siteConfig.baseUrl}${this.props.language}/pulsar-manager-release-notes`}>Release notes</a> for all pulsar-manager's versions
-              </p>
-            </div>
-            <h2 id="latest"><translate>Current version (Stable)</translate> {latestPulsarManagerVersion}</h2>
-            <table className="versions" style={{width:'100%'}}>
-              <thead>
-                <tr>
-                  <th><translate>Release</translate></th>
-                  <th><translate>Link</translate></th>
-                  <th><translate>Crypto files</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                <tr key={'binary'}>
-                  <th><translate>Binary</translate></th>
-                  <td>
-                    <a href={latestPulsarManagerArchiveMirrorUrl}>apache-pulsar-manager-{latestPulsarManagerVersion}-bin.tar.gz</a>
-                  </td>
-                  <td>
-                    <a href={`${pulsarManagerLatestArchiveUrl}.asc`}>asc</a>,&nbsp;
-                    <a href={`${pulsarManagerLatestArchiveUrl}.sha512`}>sha512</a>
-                  </td>
-                </tr>
-                <tr key={'source'}>
-                  <th><translate>Source</translate></th>
-                  <td>
-                    <a href={latestPulsarManagerSrcArchiveMirrorUrl}>apache-pulsar-manager-{latestPulsarManagerVersion}-src.tar.gz</a>
-                  </td>
-                  <td>
-                    <a href={`${pulsarManagerLatestSrcArchiveUrl}.asc`}>asc</a>,&nbsp;
-                    <a href={`${pulsarManagerLatestSrcArchiveUrl}.sha512`}>sha512</a>
-                  </td>
-                </tr>
-                </tbody>
-              </table>
-              <h2 id="pulsar-manager-archive"><translate>Pulsar Manager older releases</translate></h2>
-              <table className="versions">
-                <thead>
-                  <tr>
-                    <th><translate>Release</translate></th>
-                    <th><translate>Binary</translate></th>
-                    <th><translate>Source</translate></th>
-                    <th><translate>Release notes</translate></th>
-                  </tr>
-                </thead>
-                <tbody>
-                  {pulsarManagerReleaseInfo.map(
-                    info => {
-                          var sha = "sha512"
-                          return info.version !== latestPulsarManagerVersion && (
-                              <tr key={info.version}>
-                          <th>{info.version}</th>
-                          <td>
-                          <a href={info.binArchiveUrl}>apache-pulsar-manager-{info.version}-bin.tar.gz</a> &nbsp;
-                            (<a href={`${info.binArchiveUrl}.asc`}>asc</a>,&nbsp;
-                            <a href={`${info.binArchiveUrl}.${sha}`}>{`${sha}`}</a>)
-                            </td>
-                            <td>
-                            <a href={info.srcArchiveUrl}>apache-pulsar-manager-{info.version}-src.tar.gz</a>
-                                &nbsp;
-                            (<a href={`${info.srcArchiveUrl}.asc`}>asc</a>,&nbsp;
-                            <a href={`${info.srcArchiveUrl}.${sha}`}>{`${sha}`}</a>)
-                            </td>
-                            <td>
-                            <a href={`${siteConfig.baseUrl}${this.props.language}/release-notes#${info.version.replace(/\./g,'')}`}><translate>Release Notes</translate></a>
-                            </td>
-                            </tr>
-                        )
-                      }
-                  )}
-                </tbody>
-              </table>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = Download;
diff --git a/site2/website/pages/en/events.js b/site2/website/pages/en/events.js
deleted file mode 100644
index 9310a377d61..00000000000
--- a/site2/website/pages/en/events.js
+++ /dev/null
@@ -1,96 +0,0 @@
-
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary.js');
-const Container = CompLibrary.Container;
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const translate = require('../../server/translate.js').translate;
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-
-const iframeSrc = "https://calendar.google.com/calendar/embed?src=apache.pulsar.slack%40gmail.com";
-
-class Events extends React.Component {
-  render() {
-
-    return (
-      <div className="docMainWrapper wrapper">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1><translate>Events</translate></h1>
-              <hr />
-            </header>
-            <h2><translate>Calender</translate></h2>
-
-            <iframe src={iframeSrc} 
-              style={{borderWidth: 0}} 
-              height={300} width={640} 
-              frameBorder={0} scrolling={"no"}>
-            </iframe>
-            <h2><translate>Events</translate></h2>            
-            <MarkdownBlock>
-              - [Pulsar Summit Europe 2021](https://pulsar-summit.org/en/event/europe-2021) 6 October 2021
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Pulsar Summit Asia 2021](https://pulsar-summit.org/en/event/asia-2021) 20-21 November 2021
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Pulsar Summit North America 2021](https://pulsar-summit.org/en/event/north-america-2021) 16-17 June 2021
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [ApacheCon @Home](https://www.youtube.com/watch?v=iIABx20uvmw&list=PLU2OcwpQkYCy_awEe5xwlxGTk5UieA37m)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [ApacheCon @Home Pulsar/BookKeeper track](https://www.apachecon.com/acah2020/tracks/pulsar.html)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Pulsar Training: Developing Pulsar Applications with Jesse Anderson](https://www.eventbrite.com/e/developing-pulsar-applications-online-training-tickets-122334542911)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Monthly webinar](https://www.youtube.com/watch?v=Owl_ncQbVwk&list=PLqRma1oIkcWhfmUuJrMM5YIG8hjju62Ev)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Weekly TGIP](https://www.youtube.com/watch?v=Bss2OYq7SVk)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Pulsar Developer Community biweekly meetup](https://github.com/streamnative/pulsar-community-loc-cn/)
-            </MarkdownBlock>
-            <h2><translate>Groups</translate></h2>
-            <MarkdownBlock>
-              - [NorCal Apache Pulsar Neighborhood Meetup Group](https://www.meetup.com/nor-cal-apache-pulsar-meetup-group/)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Netherlands Apache Pulsar Meetup Group](https://www.meetup.com/netherlands-apache-pulsar-meetup/)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [SoCal Apache Pulsar Neighborhood Meetup Group](https://www.meetup.com/socal-apache-pulsar-meetup-group/)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [New York City Apache Pulsar Meetup](https://www.meetup.com/new-york-city-apache-pulsar-meetup/)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Beijing Apache Pulsar® Meetup by StreamNative](https://www.meetup.com/beijing-apache-pulsar-meetup-by-streamnative/)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [SF Bay Area Apache Pulsar Meetup](https://www.meetup.com/SF-Bay-Area-Apache-Pulsar-Meetup/)
-            </MarkdownBlock>
-            <MarkdownBlock>
-              - [Japan Pulsar User Group](https://japan-pulsar-user-group.connpass.com/)
-            </MarkdownBlock>
-             <h2><translate>Replays</translate></h2>
-            <MarkdownBlock>
-              - [Pulsar Summit Virtual Conference](https://www.youtube.com/playlist?list=PLqRma1oIkcWjVlPfaWlf3VO9W-XWsF_4-) 9 September 2020
-            </MarkdownBlock>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = Events;
diff --git a/site2/website/pages/en/functions-rest-api.js b/site2/website/pages/en/functions-rest-api.js
deleted file mode 100644
index e5e191da47d..00000000000
--- a/site2/website/pages/en/functions-rest-api.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const siteConfig = require(`${process.cwd()}/siteConfig.js`);
-
-class FunctionsRestApi extends React.Component {
-  render() {
-    const swaggerUrl = `${siteConfig.baseUrl}swagger/swaggerfunctions.json`
-
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer" >
-          <script base-url={`${swaggerUrl}`} src="../js/getSwaggerByVersion.js"></script>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = FunctionsRestApi;
diff --git a/site2/website/pages/en/index.js b/site2/website/pages/en/index.js
deleted file mode 100755
index a24fbeb72a8..00000000000
--- a/site2/website/pages/en/index.js
+++ /dev/null
@@ -1,205 +0,0 @@
-
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary.js');
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const Container = CompLibrary.Container;
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const translate = require('../../server/translate.js').translate;
-const users = require(`${CWD}/data/users.js`)
-const featuredUsers = users.filter(x => x.hasOwnProperty('featured'))
-featuredUsers.sort((a, b) => (a.featured > b.featured) ? 1 : -1);
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-
-function imgUrl(img) {
-  return siteConfig.baseUrl + 'img/' + img;
-}
-
-function docUrl(doc, language) {
-  return siteConfig.baseUrl + 'docs/' + (language ? language + '/' : '') + doc;
-}
-
-function pageUrl(page, language) {
-  return siteConfig.baseUrl + (language ? language + '/' : '') + page;
-}
-
-function githubUrl() {
-  return siteConfig.githubUrl;
-}
-
-
-class Button extends React.Component {
-  render() {
-    return (
-      <div className="pluginWrapper buttonWrapper">
-        <a className="button" href={this.props.href} target={this.props.target}>
-          {this.props.children}
-        </a>
-      </div>
-    );
-  }
-}
-
-Button.defaultProps = {
-  target: '_self',
-};
-
-const SplashContainer = props => (
-  <div className="homeContainer">
-    <div className="homeSplashFade" style={{marginTop: '5rem'}}>
-      <div className="wrapper homeWrapper">{props.children}</div>
-    </div>
-  </div>
-);
-
-const Logo = props => (
-  <div className="" style={{width: '500px', alignItems: 'center', margin: 'auto'}}>
-    <img src={props.img_src} />
-  </div>
-);
-
-const ProjectTitle = props => (
-  <h2 className="projectTitle" style={{maxWidth:'1024px', margin: 'auto'}}>
-    <small style={{color: 'black', fontSize: '2.0rem'}}>{siteConfig.projectDescription}</small>
-  </h2>
-);
-
-const PromoSection = props => (
-  <div className="section promoSection">
-    <div className="promoRow">
-      <div className="pluginRowBlock">{props.children}</div>
-    </div>
-  </div>
-);
-
-class HomeSplash extends React.Component {
-  render() {
-    let language = this.props.language || '';
-    return (
-      <SplashContainer>
-        <Logo img_src={imgUrl('pulsar.svg')} />
-        <div className="inner">
-          <ProjectTitle />
-          <PromoSection>
-            <Button href={docUrl('standalone', language)}>Read the docs</Button>
-            <Button href={githubUrl()}>GitHub</Button>
-          </PromoSection>
-        </div>
-      </SplashContainer>
-    );
-  }
-}
-
-const Block = props => (
-  <Container
-    padding={['bottom']}
-    id={props.id}
-    background={props.background}>
-    <GridBlock align="center" contents={props.children} layout={props.layout} />
-  </Container>
-);
-
-
-const features_lang = language => {
-  return {
-    row1: [
-      {
-        content: 'Easy to deploy, lightweight compute process, developer-friendly APIs, no need to run your own stream processing engine.',
-        title: `[Pulsar Functions](${docUrl('functions-overview', language)})`,
-      },
-      {
-        content: 'Run in production at Yahoo! scale for over 5 years, with millions of messages per second across millions of topics.',
-        title: `[Proven in production](${docUrl('concepts-architecture-overview', language)})`,
-      },
-      {
-        content: 'Expand capacity seamlessly to hundreds of nodes.',
-        title: `[Horizontally scalable](${docUrl('concepts-architecture-overview', language)})`,
-      }
-    ],
-    row2: [
-      {
-        content: 'Low publish latency (< 5ms) at scale with strong durability guarantees.',
-        title: `[Low latency with durability](${docUrl('concepts-architecture-overview', language)})`,
-      },
-      {
-        content: 'Configurable replication between data centers across multiple geographic regions.',
-        title: `[Geo-replication](${docUrl('administration-geo', language)})`,
-      },
-      {
-        content: 'Built from the ground up as a multi-tenant system. Supports isolation, authentication, authorization and quotas.',
-        title: `[Multi-tenancy](${docUrl('concepts-multi-tenancy', language)})`,
-      }
-    ],
-    row3: [
-      {
-        content: 'Persistent message storage based on Apache BookKeeper. IO-level isolation between write and read operations.',
-        title: `[Persistent storage](${docUrl('concepts-architecture-overview#persistent-storage', language)})`,
-      },
-      {
-        content: 'Flexible messaging models with high-level APIs for Java, Go, Python, C++, Node.js, WebSocket and C#.',
-        title: `[Client libraries](${docUrl('client-libraries', language)})`,
-      },
-      {
-        content: 'REST Admin API for provisioning, administration, tools and monitoring. Can be deployed on bare metal, Kubernetes, Amazon Web Services(AWS), and DataCenter Operating System(DC/OS).',
-        title: `[Operability](${docUrl('admin-api-overview', language)})`,
-      }
-    ]
-  };
-};
-
-const KeyFeautresGrid = props => (
-  <Container
-    padding={['bottom']}
-    id={props.id}
-    background={props.background}>
-    <GridBlock align="center" contents={props.features.row1} layout="threeColumn" />
-    <GridBlock align="center" contents={props.features.row2} layout="threeColumn" />
-    <GridBlock align="center" contents={props.features.row3} layout="threeColumn" />
-  </Container>
-);
-
-const UsersBlock = props => (
-  <Container
-    padding={['bottom']}
-    id={props.id}
-    background={props.background}>
-
-    <p align="center"><small style={{color: 'black', fontSize: '1.7rem'}}><a href="/powered-by">Companies Powered by Pulsar</a></small></p>
-
-  </Container>
-);
-
-
-const ApacheBlock = prop => (
-  <Container>
-    <div className="Block" style={{textAlign: 'center'}}>
-      <p>
-        Apache Pulsar is available under the <a href="https://www.apache.org/licenses">Apache License, version 2.0</a>.
-      </p>
-    </div>
-  </Container>
-);
-
-class Index extends React.Component {
-  render() {
-    let language = this.props.language || '';
-    let features = features_lang(language);
-
-    return (
-      <div>
-        <HomeSplash language={language} />
-        <div className="mainContainer">
-          <KeyFeautresGrid features={features} id={'key-features'} />
-          <UsersBlock id={'users'} />
-          <ApacheBlock />
-        </div>
-      </div>
-    );
-  }
-}
-
-module.exports = Index;
diff --git a/site2/website/pages/en/packages-rest-api.js b/site2/website/pages/en/packages-rest-api.js
deleted file mode 100644
index d516c1899c4..00000000000
--- a/site2/website/pages/en/packages-rest-api.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const siteConfig = require(`${process.cwd()}/siteConfig.js`);
-
-class PackagesRestApi extends React.Component {
-    render() {
-        const swaggerUrl = `${siteConfig.baseUrl}swagger/swaggerpackages.json`
-
-        return (
-            <div className="pageContainer">
-            <Container className="mainContainer documentContainer postContainer" >
-            <script base-url={`${swaggerUrl}`} src="../js/getSwaggerByVersion.js"></script>
-            </Container>
-            </div>
-    );
-    }
-}
-
-module.exports = PackagesRestApi;
diff --git a/site2/website/pages/en/powered-by.js b/site2/website/pages/en/powered-by.js
deleted file mode 100644
index 1f157ff2f92..00000000000
--- a/site2/website/pages/en/powered-by.js
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary.js');
-const Container = CompLibrary.Container;
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const translate = require('../../server/translate.js').translate;
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-const users = require(`${CWD}/data/users.js`)
-
-class Users extends React.Component {
-  render() {
-    let language = this.props.language || '';
-
-
-    return (
-        <div className="docMainWrapper wrapper">
-          <Container className="mainContainer documentContainer postContainer">
-            <div className="post">
-              <header className="postHeader">
-                <h1><translate>Companies using or contributing to Apache Pulsar</translate></h1>
-                <hr />
-              </header>
-
-              <div class="logo-wrapper">
-                {
-                  users.map(
-                      c => (
-                          (() => {
-                            if (c.hasOwnProperty('logo_white')) {
-                              return <div className="logo-box-background-for-white">
-                                <a href={c.url} title={c.name} target="_blank">
-                                  <img src={c.logo} alt={c.name} className={c.logo.endsWith('.svg') ? 'logo-svg' : ''}/>
-                                </a>
-                              </div>
-                            } else {
-                              return <div className="logo-box">
-                                <a href={c.url} title={c.name} target="_blank">
-                                  <img src={c.logo} alt={c.name} className={c.logo.endsWith('.svg') ? 'logo-svg' : ''}/>
-                                </a>
-                              </div>
-                            }
-                          })()
-                      )
-                  )}
-              </div>
-            </div>
-          </Container>
-        </div>
-    );
-  }
-}
-
-module.exports = Users;
diff --git a/site2/website/pages/en/pulsar-admin-cli.js b/site2/website/pages/en/pulsar-admin-cli.js
deleted file mode 100644
index dd7b39530a6..00000000000
--- a/site2/website/pages/en/pulsar-admin-cli.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const CWD = process.cwd();
-const releases = require(`${CWD}/releases.json`);
-
-class PulsarAdminCli extends React.Component {
-    render() {
-        const latestVersion = releases[0];
-        const url = "../js/getCliByVersion.js?latestVersion=" + latestVersion;
-        return (
-            <div className="pageContainer">
-            <Container className="mainContainer documentContainer postContainer" >
-            <span id="latestVersion" style={{display:'none'}}>{latestVersion}</span>
-            <span id="clientModule" style={{display: 'none'}}>pulsar-admin</span>
-            <script src={url}></script>
-            </Container>
-            </div>
-    );
-    }
-}
-
-module.exports = PulsarAdminCli;
diff --git a/site2/website/pages/en/pulsar-cli.js b/site2/website/pages/en/pulsar-cli.js
deleted file mode 100644
index 388726e7770..00000000000
--- a/site2/website/pages/en/pulsar-cli.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const CWD = process.cwd();
-const releases = require(`${CWD}/releases.json`);
-
-class PulsarCli extends React.Component {
-    render() {
-        const latestVersion = releases[0];
-        const url = "../js/getCliByVersion.js?latestVersion=" + latestVersion;
-        return (
-            <div className="pageContainer">
-                <Container className="mainContainer documentContainer postContainer" >
-                    <span id="latestVersion" style={{display:'none'}}>{latestVersion}</span>
-                    <span id="clientModule" style={{display: 'none'}}>pulsar</span>
-                    <script src={url}></script>
-                </Container>
-            </div>
-    );
-    }
-}
-
-module.exports = PulsarCli;
diff --git a/site2/website/pages/en/pulsar-client-cli.js b/site2/website/pages/en/pulsar-client-cli.js
deleted file mode 100644
index 382f1622dde..00000000000
--- a/site2/website/pages/en/pulsar-client-cli.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const CWD = process.cwd();
-const releases = require(`${CWD}/releases.json`);
-
-class PulsarClientCli extends React.Component {
-    render() {
-        const latestVersion = releases[0];
-        const url = "../js/getCliByVersion.js?latestVersion=" + latestVersion;
-        return (
-            <div className="pageContainer">
-            <Container className="mainContainer documentContainer postContainer" >
-            <span id="latestVersion" style={{display:'none'}}>{latestVersion}</span>
-            <span id="clientModule" style={{display: 'none'}}>pulsar-client</span>
-        <script src={url}></script>
-            </Container>
-            </div>
-    );
-    }
-}
-
-module.exports = PulsarClientCli;
diff --git a/site2/website/pages/en/pulsar-manager-release-notes.js b/site2/website/pages/en/pulsar-manager-release-notes.js
deleted file mode 100644
index 89eb0ca73ee..00000000000
--- a/site2/website/pages/en/pulsar-manager-release-notes.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary');
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const Container = CompLibrary.Container;
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-
-const releaseNotes = require('fs').readFileSync(`${CWD}/pulsar-manager-release-notes.md`, 'utf8')
-
-class ReleaseNotes extends React.Component {
-  render() {
-
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1>Apache Pulsar Manager Release Notes</h1>
-              <hr />
-            </header>
-            <MarkdownBlock>
-              {releaseNotes}
-            </MarkdownBlock>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = ReleaseNotes;
diff --git a/site2/website/pages/en/pulsar-perf-cli.js b/site2/website/pages/en/pulsar-perf-cli.js
deleted file mode 100644
index e6eaaaace0c..00000000000
--- a/site2/website/pages/en/pulsar-perf-cli.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const CWD = process.cwd();
-const releases = require(`${CWD}/releases.json`);
-
-class PulsarPerfCli extends React.Component {
-    render() {
-        const latestVersion = releases[0];
-        const url = "../js/getCliByVersion.js?latestVersion=" + latestVersion;
-        return (
-            <div className="pageContainer">
-                <Container className="mainContainer documentContainer postContainer" >
-                    <span id="latestVersion" style={{display:'none'}}>{latestVersion}</span>
-                    <span id="clientModule" style={{display: 'none'}}>pulsar-perf</span>
-                    <script src={url}></script>
-                </Container>
-            </div>
-    );
-    }
-}
-
-module.exports = PulsarPerfCli;
diff --git a/site2/website/pages/en/release-notes.js b/site2/website/pages/en/release-notes.js
deleted file mode 100644
index 076d6a6eb79..00000000000
--- a/site2/website/pages/en/release-notes.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary');
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const Container = CompLibrary.Container;
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-
-const releaseNotes = require('fs').readFileSync(`${CWD}/release-notes.md`, 'utf8')
-
-class ReleaseNotes extends React.Component {
-  render() {
-
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1>Apache Pulsar Release Notes</h1>
-              <hr />
-            </header>
-            <MarkdownBlock>
-              {releaseNotes}
-            </MarkdownBlock>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = ReleaseNotes;
diff --git a/site2/website/pages/en/resources.js b/site2/website/pages/en/resources.js
deleted file mode 100644
index 9c5b89c17f4..00000000000
--- a/site2/website/pages/en/resources.js
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary.js');
-const Container = CompLibrary.Container;
-
-const CWD = process.cwd();
-
-const translate = require('../../server/translate.js').translate;
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-const resources = require(`${CWD}/data/resources.js`)
-
-class Resources extends React.Component {
-  render() {
-    let language = this.props.language || '';
-    
-
-    return (
-      <div className="docMainWrapper wrapper">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1><translate>Resources</translate></h1>
-              <hr />
-            </header>
-            
-            <h2><translate>Books</translate></h2>
-            <table className="versions">
-              <thead>
-                <tr>
-                  <th><translate>Book</translate></th>
-                  <th><translate>Author</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                {resources.books.map(
-                  (a, i) => (
-                    <tr key={i}>
-                      <td><a href={a.link}>{a.book}</a></td>
-                      <td>{a.author}</td>
-                    </tr>
-                  )
-                )}
-              </tbody>
-            </table>
-
-            <h2><translate>Articles</translate></h2>
-            <table className="versions">
-              <thead>
-                <tr>
-                  <th><translate>Forum</translate></th>
-                  <th><translate>Date</translate></th>
-                  <th><translate>Link</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                {resources.articles.map(
-                  (a, i) => (
-                    <tr key={i}>
-                      <td><a href={a.forum_link}>{a.forum}</a></td>
-                      <td>{a.date}</td>
-                      <td><a href={a.link}>{a.title}</a></td>
-                    </tr>
-                  )
-                )}
-              </tbody>
-            </table>
-
-            <h2><translate>Presentations</translate></h2>
-            <table className="versions">
-              <thead>
-                <tr>
-                  <th><translate>Forum</translate></th>
-                  <th><translate>Date</translate></th>
-                  <th><translate>Presenter</translate></th>
-                  <th><translate>Link</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                {resources.presentations.map(
-                  (p, i) => (
-                    <tr key={i}>
-                      <td><a href={p.forum_link}>{p.forum}</a></td>
-                      <td>{p.date}</td>
-                      <td>{p.presenter}</td>
-                      <td><a href={p.link}>{p.title}</a></td>
-                    </tr>
-                  )
-                )}
-              </tbody>
-            </table>
-
-            <h2><translate>Older Articles</translate></h2>
-            <table className="versions">
-              <thead>
-                <tr>
-                  <th><translate>Forum</translate></th>
-                  <th><translate>Date</translate></th>
-                  <th><translate>Link</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                {resources.older_articles.map(
-                  (oa, i) => (
-                    <tr key={i}>
-                      <td><a href={oa.forum_link}>{oa.forum}</a></td>
-                      <td>{oa.date}</td>
-                      <td><a href={oa.link}>{oa.title}</a><br></br>
-                          <a href={oa.link2}>{oa.title2}</a><br></br>
-                          <a href={oa.link3}>{oa.title3}</a>
-                      </td>
-                    </tr>
-                  )
-                )}
-              </tbody>
-            </table>
-
-            <h2><translate>Older Presentations</translate></h2>
-            <table className="versions">
-              <thead>
-                <tr>
-                  <th><translate>Forum</translate></th>
-                  <th><translate>Date</translate></th>
-                  <th><translate>Presenter</translate></th>
-                  <th><translate>Link</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                {resources.older_presentations.map(
-                  (op, i) => (
-                    <tr key={i}>
-                      <td><a href={op.forum_link}>{op.forum}</a></td>
-                      <td>{op.date}</td>
-                      <td>{op.presenter}</td>
-                      <td><a href={op.link}>{op.title}</a></td>
-                    </tr>
-                  )
-                )}
-              </tbody>
-            </table>
-
-
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = Resources;
diff --git a/site2/website/pages/en/sink-rest-api.js b/site2/website/pages/en/sink-rest-api.js
deleted file mode 100644
index 2eeafa1a699..00000000000
--- a/site2/website/pages/en/sink-rest-api.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const siteConfig = require(`${process.cwd()}/siteConfig.js`);
-
-class SinkRestApi extends React.Component {
-  render() {
-    const swaggerUrl = `${siteConfig.baseUrl}swagger/swaggersink.json`
-
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer" >
-          <script base-url={`${swaggerUrl}`} src="../js/getSwaggerByVersion.js"></script>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = SinkRestApi;
diff --git a/site2/website/pages/en/source-rest-api.js b/site2/website/pages/en/source-rest-api.js
deleted file mode 100644
index 5c60f20dd5b..00000000000
--- a/site2/website/pages/en/source-rest-api.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const React = require('react');
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-const siteConfig = require(`${process.cwd()}/siteConfig.js`);
-
-class SourceRestApi extends React.Component {
-  render() {
-    const swaggerUrl = `${siteConfig.baseUrl}swagger/swaggersource.json`
-
-    return (
-      <div className="pageContainer">
-        <Container className="mainContainer documentContainer postContainer" >
-          <script base-url={`${swaggerUrl}`} src="../js/getSwaggerByVersion.js"></script>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = SourceRestApi;
diff --git a/site2/website/pages/en/team.js b/site2/website/pages/en/team.js
deleted file mode 100644
index 347eedacce8..00000000000
--- a/site2/website/pages/en/team.js
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary.js');
-const Container = CompLibrary.Container;
-const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const translate = require('../../server/translate.js').translate;
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-const team = require(`${CWD}/data/team.js`)
-
-class Team extends React.Component {
-  render() {
-    let language = this.props.language || '';
-
-
-    return (
-      <div className="docMainWrapper wrapper">
-        <Container className="mainContainer documentContainer postContainer">
-          <div className="post">
-            <header className="postHeader">
-              <h1><translate>Team</translate></h1>
-              <hr />
-            </header>
-            <p>
-            <translate>
-              A successful project requires many people to play many roles. Some write
-              code or documentation, while others are valuable as testers, submitting
-              patches and suggestions.
-            </translate>
-            </p>
-            <p>
-            <translate>
-              The team is comprised of PMC members, Committers and Contributors.
-              Committers have direct access to the source of a project and actively
-              evolve the codebase. Contributors improve the project through submission of
-              patches and suggestions to be reviewed by the Committers. The number of
-              Committers and Contributors to the project is unbounded. Get involved
-              today. All contributions to the project are greatly appreciated.
-            </translate>
-            </p>
-
-            <h2><translate>Committers</translate></h2>
-            <p>
-            <translate>
-              The following is a list of developers with commit privileges that have directly
-              contributed to the project in one way or another.
-            </translate>
-            </p>
-            <table className="versions">
-              <thead>
-                <tr>
-                  <th><translate>Name</translate></th>
-                  <th><translate>Apache Id</translate></th>
-                  <th><translate>Roles</translate></th>
-                </tr>
-              </thead>
-              <tbody>
-                {team.committers.map(
-                  c => (
-                    <tr key={c.apacheId}>
-                      <td>{c.name}</td>
-                      <td>{c.apacheId}</td>
-                      <td>{c.roles}</td>
-                    </tr>
-                  )
-                )}
-              </tbody>
-            </table>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = Team;
diff --git a/site2/website/pages/en/versions.js b/site2/website/pages/en/versions.js
deleted file mode 100644
index 27878e8c088..00000000000
--- a/site2/website/pages/en/versions.js
+++ /dev/null
@@ -1,130 +0,0 @@
-
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary');
-const Container = CompLibrary.Container;
-const GridBlock = CompLibrary.GridBlock;
-
-const CWD = process.cwd();
-
-const translate = require('../../server/translate.js').translate;
-
-const siteConfig = require(`${CWD}/siteConfig.js`);
-// versions post docusaurus
-const versions = require(`${CWD}/versions.json`);
-// versions pre docusaurus
-const oldversions = require(`${CWD}/oldversions.json`);
-
-function Versions(props) {
-    const latestStableVersion = versions[0];
-    const repoUrl = `https://github.com/${siteConfig.organizationName}/${
-      siteConfig.projectName
-    }`;
-    return (
-    <div className="pageContainer">
-      <Container className="mainContainer documentContainer postContainer">
-        <div className="post">
-          <header className="postHeader">
-            <h1>{siteConfig.title} <translate>Versions</translate></h1>
-          </header>
-          <h3 id="latest"><translate>Latest Stable Version</translate></h3>
-          <p><translate>Latest stable release of Apache Pulsar.</translate></p>
-          <table className="versions">
-            <tbody>
-              <tr>
-                <th>{latestStableVersion}</th>
-                <td>
-                  <a
-                    href={`${siteConfig.baseUrl}docs/${props.language}/getting-started-standalone`}>
-                    <translate>
-                    Documentation
-                    </translate>
-                  </a>
-                </td>
-                <td>
-                  <a href={`${siteConfig.baseUrl}release-notes#${latestStableVersion.replace(/\./g, "")}`}>
-                    <translate>
-                    Release Notes
-                    </translate>
-                  </a>
-                </td>
-              </tr>
-            </tbody>
-          </table>
-          <h3 id="rc"><translate>Latest Version</translate></h3>
-          <translate>
-          Here you can find the latest documentation and unreleased code.
-          </translate>
-          <table className="versions">
-            <tbody>
-              <tr>
-                <th>master</th>
-                <td>
-                  <a
-                    href={`${siteConfig.baseUrl}docs/${props.language}/next/getting-started-standalone`}>
-                    <translate>Documentation</translate>
-                  </a>
-                </td>
-                <td>
-                  <a href={repoUrl}><translate>Source Code</translate></a>
-                </td>
-              </tr>
-            </tbody>
-          </table>
-          <h3 id="archive"><translate>Past Versions</translate></h3>
-          <p>
-          <translate>
-            Here you can find documentation for previous versions of Apache Pulsar.
-          </translate>
-          </p>
-          <table className="versions">
-            <tbody>
-              {versions.map(
-                version =>
-                  version !== latestStableVersion && (
-                    <tr key={version}>
-                      <th>{version}</th>
-                      <td>
-                        <a
-                          href={`${siteConfig.baseUrl}docs/${props.language}/${version}/getting-started-standalone`}>
-                          <translate>Documentation</translate>
-                        </a>
-                      </td>
-                      <td>
-                        <a href={`${siteConfig.baseUrl}release-notes#${version.replace(/\./g, "")}`}>
-                          <translate>Release Notes</translate>
-                        </a>
-                      </td>
-                    </tr>
-                  )
-              )}
-              {oldversions.map(
-                version =>
-                  version !== latestStableVersion && (
-                    <tr key={version}>
-                      <th>{version}</th>
-                      <td>
-                        <a
-                          href={`${siteConfig.baseUrl}docs/v${version}/getting-started/LocalCluster/`}>
-                          <translate>Documentation</translate>
-                        </a>
-                      </td>
-                      <td>
-                        <a href={`${siteConfig.baseUrl}release-notes#${version.replace(/\./g, "")}`}>
-                          <translate>Release Notes</translate>
-                        </a>
-                      </td>
-                    </tr>
-                  )
-              )}
-            </tbody>
-          </table>
-        </div>
-      </Container>
-    </div>
-  );
-}
-
-Versions.title = 'Versions';
-
-module.exports = Versions;
diff --git a/site2/website/scripts/fix-tab.js b/site2/website/scripts/fix-tab.js
deleted file mode 100644
index 7252a00ccd2..00000000000
--- a/site2/website/scripts/fix-tab.js
+++ /dev/null
@@ -1,44 +0,0 @@
-const fs = require("fs");
-const path = require("path");
-const lodash = require("lodash");
-
-function travel(dir, callback) {
-  fs.readdirSync(dir).forEach((file) => {
-    var pathname = path.join(dir, file);
-    if (fs.statSync(pathname).isDirectory()) {
-      travel(pathname, callback);
-    } else {
-      callback(pathname);
-    }
-  });
-}
-
-function fixMd(filepath) {
-  let data = fs.readFileSync(filepath, "utf8");
-  if (
-    /^[ ]+<!--DOCUSAURUS_CODE_TABS-->/gm.test(data) ||
-    /<!--DOCUSAURUS_CODE_TABS-->\s+([^<!--]+)$/gm.test(data)
-  ) {
-    console.log("------- [Exists]Invalid tab exists in", filepath);
-    let filename = filepath.substr(filepath.lastIndexOf("/") + 1);
-    let locale = /\/(fr|ko|pt-PT|zh-CN|zh-TW)\//.exec(filepath);
-    if (locale && locale.length > 1) {
-      locale = locale[1];
-    }
-    let version = /\/(version-(\d\.?)+(-incubating)?)\//.exec(filepath);
-    if (version && version.length > 1) {
-      version = version[1];
-    }
-    if (version) {
-      fs.copyFileSync(
-        path.join(__dirname, "../versioned_docs/", version, filename),
-        filepath
-      );
-    } else {
-      fs.copyFileSync(path.join(__dirname, "../../docs", filename), filepath);
-    }
-    console.log("******* [Fixed]Invalid tab fixed for ", filepath);
-  }
-}
-
-travel(path.join(__dirname, "../translated_docs"), fixMd);
diff --git a/site2/website/scripts/replace.js b/site2/website/scripts/replace.js
deleted file mode 100644
index 540ae51be90..00000000000
--- a/site2/website/scripts/replace.js
+++ /dev/null
@@ -1,233 +0,0 @@
-const replace = require('replace-in-file');
-
-const fs = require('fs')
-
-const CWD = process.cwd()
-const siteConfig = require(`${CWD}/siteConfig.js`);
-const docsDir = `${CWD}/build/${siteConfig.projectName}/docs`
-
-
-function getVersions() {
-  try {
-    return JSON.parse(require('fs').readFileSync(`${CWD}/versions.json`, 'utf8'));
-  } catch (error) {
-    //console.error(error)
-    console.error('no versions found defaulting to 2.1.0')
-  }
-  return ['2.1.0']
-}
-
-function downloadPageUrl() {
-  return `${siteConfig.baseUrl}download`
-}
-
-function binaryReleaseUrl(version) {
-  if (version.includes('incubating')) {
-    return `https://archive.apache.org/dist/incubator/pulsar/pulsar-${version}/apache-pulsar-${version}-bin.tar.gz`
-  } else {
-    return `https://archive.apache.org/dist/pulsar/pulsar-${version}/apache-pulsar-${version}-bin.tar.gz`
-  }
-}
-
-function connectorReleaseUrl(version) {
-  var versions = version.split(".");
-  var majorVersion = parseInt(versions[0]);
-  var minorVersion = parseInt(versions[1]);
-  if (version.includes('incubating')) {
-    return `https://archive.apache.org/dist/incubator/pulsar/pulsar-${version}/apache-pulsar-io-connectors-${version}-bin.tar.gz`
-  } else if (majorVersion > 2 || (majorVersion == 2 && minorVersion >= 3)) {
-    return `https://archive.apache.org/dist/pulsar/pulsar-${version}/connectors`
-  } else {
-    return `https://archive.apache.org/dist/pulsar/pulsar-${version}/apache-pulsar-io-connectors-${version}-bin.tar.gz`
-  }
-}
-
-function offloaderReleaseUrl(version) {
-  return `https://archive.apache.org/dist/pulsar/pulsar-${version}/apache-pulsar-offloaders-${version}-bin.tar.gz`
-}
-
-function prestoPulsarReleaseUrl(version) {
-  if (version.includes('incubating')) {
-    return `https://archive.apache.org/dist/incubator/pulsar/pulsar-${version}/pulsar-presto-connector-${version}.tar.gz`
-  } else {
-    return `https://archive.apache.org/dist/pulsar/pulsar-${version}/pulsar-presto-connector-${version}.tar.gz`
-  }
-}
-
-function rpmReleaseUrl(version, type) {
-  rpmVersion = version.replace('incubating', '1_incubating');
-  if (version.includes('incubating')) {
-    return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=incubator/pulsar/pulsar-${version}/RPMS/apache-pulsar-client${type}-${rpmVersion}.x86_64.rpm`
-  } else {
-    return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-${version}/RPMS/apache-pulsar-client${type}-${rpmVersion}-1.x86_64.rpm`
-  }
-}
-
-function debReleaseUrl(version, type) {
-  if (version.includes('incubating')) {
-    return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=incubator/pulsar/pulsar-${version}/DEB/apache-pulsar-client${type}.deb`
-  } else {
-    return `https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-${version}/DEB/apache-pulsar-client${type}.deb`
-  }
-}
-
-function rpmDistUrl(version, type) {
-  rpmVersion = version.replace('incubating', '1_incubating');
-  if (version.includes('incubating')) {
-    return `https://archive.apache.org/dist/incubator/pulsar/pulsar-${version}/RPMS/apache-pulsar-client${type}-${rpmVersion}.x86_64.rpm`
-  } else {
-    return `https://archive.apache.org/dist/pulsar/pulsar-${version}/RPMS/apache-pulsar-client${type}-${rpmVersion}-1.x86_64.rpm`
-  }
-}
-
-function debDistUrl(version, type) {
-  if (version.includes('incubating')) {
-    return `https://archive.apache.org/dist/incubator/pulsar/pulsar-${version}/DEB/apache-pulsar-client${type}.deb`
-  } else {
-    return `https://archive.apache.org/dist/pulsar/pulsar-${version}/DEB/apache-pulsar-client${type}.deb`
-  }
-}
-
-function clientVersionUrl(version, type) {
-  var versions = version.split('.')
-  var majorVersion = parseInt(versions[0])
-  var minorVersion = parseInt(versions[1])
-  if ((majorVersion === 2 && minorVersion < 5) || (type === "python" && minorVersion >= 7)) {
-    return `/api/` + type + `/` + version;
-  } else if (majorVersion >= 2 && minorVersion >= 5) {
-    return `/api/` + type + `/` + majorVersion + `.` + minorVersion + `.0` + `-SNAPSHOT`
-  }
-}
-
-function doReplace(options) {
-  replace(options)
-    .then(changes => {
-      if (options.dry) {
-        console.log('Modified files:');
-        console.log(changes.join('\n'))
-      }
-    })
-    .catch(error => {
-      console.error('Error occurred:', error);
-    });
-}
-
-
-const versions = getVersions();
-
-const latestVersion = versions[0];
-const latestVersionWithoutIncubating = latestVersion.replace('-incubating', '');
-
-const from = [
-  /{{pulsar:version_number}}/g,
-  /{{pulsar:version}}/g,
-  /pulsar:binary_release_url/g,
-  /pulsar:connector_release_url/g,
-  /pulsar:offloader_release_url/g,
-  /pulsar:presto_pulsar_connector_release_url/g,
-  /pulsar:download_page_url/g,
-  /{{pulsar:rpm:client}}/g,
-  /{{pulsar:rpm:client-debuginfo}}/g,
-  /{{pulsar:rpm:client-devel}}/g,
-  /{{pulsar:deb:client}}/g,
-  /{{pulsar:deb:client-devel}}/g,
-
-  /{{pulsar:dist_rpm:client}}/g,
-  /{{pulsar:dist_rpm:client-debuginfo}}/g,
-  /{{pulsar:dist_rpm:client-devel}}/g,
-  /{{pulsar:dist_deb:client}}/g,
-  /{{pulsar:dist_deb:client-devel}}/g,
-
-  /\/api\/python/g,
-  /\/api\/cpp/g,
-  /\/api\/pulsar-functions/g,
-  /\/api\/client/g,
-  /\/api\/admin/g,
-
-  /\[\[pulsar:version_number\]\]/g,
-];
-
-const options = {
-  files: [
-    `${docsDir}/*.html`,
-    `${docsDir}/**/*.html`
-  ],
-  // TODO add next and assets
-  ignore: versions.map(v => `${docsDir}/${v}/**/*`).concat(versions.map(v => `${docsDir}/en/${v}/**/*`)),
-  from: from,
-  to: [
-    `${latestVersionWithoutIncubating}`,
-    `${latestVersion}`,
-    binaryReleaseUrl(`${latestVersion}`),
-    connectorReleaseUrl(`${latestVersion}`),
-    offloaderReleaseUrl(`${latestVersion}`),
-    prestoPulsarReleaseUrl(`${latestVersion}`),
-    downloadPageUrl(),
-    rpmReleaseUrl(`${latestVersion}`, ""),
-    rpmReleaseUrl(`${latestVersion}`, "-debuginfo"),
-    rpmReleaseUrl(`${latestVersion}`, "-devel"),
-    debReleaseUrl(`${latestVersion}`, ""),
-    debReleaseUrl(`${latestVersion}`, "-dev"),
-
-    rpmDistUrl(`${latestVersion}`, ""),
-    rpmDistUrl(`${latestVersion}`, "-debuginfo"),
-    rpmDistUrl(`${latestVersion}`, "-devel"),
-    debDistUrl(`${latestVersion}`, ""),
-    debDistUrl(`${latestVersion}`, "-dev"),
-
-    clientVersionUrl(`${latestVersion}`, "python"),
-    clientVersionUrl(`${latestVersion}`, "cpp"),
-    clientVersionUrl(`${latestVersion}`, "pulsar-functions"),
-    clientVersionUrl(`${latestVersion}`, "client"),
-    clientVersionUrl(`${latestVersion}`, "admin"),
-    `${latestVersion}`
-  ],
-  dry: false
-};
-
-doReplace(options);
-
-// TODO activate and test when first version of docs are cut
-// replaces versions
-for (v of versions) {
-  if (v === latestVersion) {
-    continue
-  }
-  const vWithoutIncubating = v.replace('-incubating', '');
-  const opts = {
-    files: [
-      `${docsDir}/${v}/*.html`,
-      `${docsDir}/${v}/**/*.html`,
-      `${docsDir}/en/${v}/*.html`,
-      `${docsDir}/en/${v}/**/*.html`
-    ],
-    from: from,
-    to: [
-      `${vWithoutIncubating}`,
-      `${v}`,
-      binaryReleaseUrl(`${v}`),
-      connectorReleaseUrl(`${v}`),
-      offloaderReleaseUrl(`${v}`),
-      prestoPulsarReleaseUrl(`${v}`),
-      downloadPageUrl(),
-      rpmDistUrl(`${v}`, ""),
-      rpmDistUrl(`${v}`, "-debuginfo"),
-      rpmDistUrl(`${v}`, "-devel"),
-      debDistUrl(`${v}`, ""),
-      debDistUrl(`${v}`, "-dev"),
-      rpmDistUrl(`${v}`, ""),
-      rpmDistUrl(`${v}`, "-debuginfo"),
-      rpmDistUrl(`${v}`, "-devel"),
-      debDistUrl(`${v}`, ""),
-      debDistUrl(`${v}`, "-dev"),
-      clientVersionUrl(`${v}`, "python"),
-      clientVersionUrl(`${v}`, "cpp"),
-      clientVersionUrl(`${v}`, "pulsar-functions"),
-      clientVersionUrl(`${v}`, "client"),
-      clientVersionUrl(`${v}`, "admin"),
-      `${v}`,
-    ],
-    dry: false
-  };
-  doReplace(opts);
-}
diff --git a/site2/website/scripts/split-swagger-by-version.js b/site2/website/scripts/split-swagger-by-version.js
deleted file mode 100644
index a0a4fdbeef3..00000000000
--- a/site2/website/scripts/split-swagger-by-version.js
+++ /dev/null
@@ -1,61 +0,0 @@
-const globby = require('globby');
-const fs = require('fs');
-const CWD = process.cwd();
-var path = require('path');
-let staticPath = path.resolve(__dirname, '..');
-const patterns = [`${CWD}/static/swagger/*/**.json`];
-
-(async () => {
-    const jsonFiles = await globby(patterns);
-    let restApiVersions = {}
-    
-    jsonFiles.map(async (filePath) => {
-        let data = fs.readFileSync(filePath)
-        let jsonData = JSON.parse(data)
-        let pulsarPath = filePath.split('/')
-        let reverseList = pulsarPath.reverse()
-        let fileName = reverseList[0]
-        let pulsarVersion = reverseList[1]
-        let restApiVersion = jsonData.info.version
-        let restApiDir = `${CWD}/static/swagger/${pulsarVersion}/${restApiVersion}`
-        
-        if (!fs.existsSync(restApiDir)){
-            fs.mkdirSync(restApiDir);
-        }
-        if (restApiVersions.hasOwnProperty(pulsarVersion)) {
-            
-            let isHasFileFlag = false
-            for (var i = 0; i < restApiVersions[pulsarVersion].length; i++) {
-                if (restApiVersion === restApiVersions[pulsarVersion][i]['version']) {
-                    isHasFileFlag = true
-                    restApiVersions[pulsarVersion][i]['fileName'].push(fileName.slice(0, fileName.lastIndexOf('.')))
-                }
-            }
-            if (!isHasFileFlag) {
-                restApiVersions[pulsarVersion].push({
-                    version: restApiVersion,
-                    fileName: [fileName.slice(0, fileName.lastIndexOf('.'))]
-                })
-            }
-        } else {
-            restApiVersions[pulsarVersion] = [{
-                version: restApiVersion,
-                fileName: [
-                    fileName.slice(0, fileName.lastIndexOf('.'))
-                ]
-            }]
-
-        }
-        
-        fs.writeFile(restApiDir + '/' + fileName, JSON.stringify(jsonData, null, 4),  function(err) {
-            if (err) {
-                return console.error(err);
-            }
-        })
-    })
-    fs.writeFile(`${staticPath}/static/swagger/restApiVersions.json`, JSON.stringify(restApiVersions, null, 4),  function(err) {
-        if (err) {
-            return console.error(err);
-        }
-    })
-})();
diff --git a/site2/website/scripts/test-server.js b/site2/website/scripts/test-server.js
deleted file mode 100644
index 2949c110169..00000000000
--- a/site2/website/scripts/test-server.js
+++ /dev/null
@@ -1,21 +0,0 @@
-
-const CWD = process.cwd()
-const siteConfig = require(`${CWD}/siteConfig.js`);
-
-var finalhandler = require('finalhandler')
-var http = require('http')
-var serveStatic = require('serve-static')
-
-var options = {
-  index: ['index.html', 'index.htm'],
-  extensions: ['html']
-}
-var serve = serveStatic(`./build/${siteConfig.projectName}`, options)
-
-// Create server
-var server = http.createServer(function onRequest (req, res) {
-  serve(req, res, finalhandler(req, res))
-})
-
-// Listen
-server.listen(3000)
diff --git a/site2/website/siteConfig.js b/site2/website/siteConfig.js
deleted file mode 100644
index 5607a6230b8..00000000000
--- a/site2/website/siteConfig.js
+++ /dev/null
@@ -1,212 +0,0 @@
-
-const {Plugin: Embed} = require('remarkable-embed');
-
-// Our custom remarkable plugin factory.
-const createVariableInjectionPlugin = variables => {
-  // `let` binding used to initialize the `Embed` plugin only once for efficiency.
-  // See `if` statement below.
-  let initializedPlugin;
-
-  const embed = new Embed();
-  embed.register({
-    // Call the render method to process the corresponding variable with
-    // the passed Remarkable instance.
-    // -> the Markdown markup in the variable will be converted to HTML.
-    inject: (key) => {
-      keyparts = key.split(":");
-      // javadoc:<name>:<url_path>
-      if (keyparts[0] == 'javadoc') {
-          return renderUrl(initializedPlugin, javadocUrl, keyparts);
-      // githubUrl:<name>:<path>
-      } else if (keyparts[0] == 'github') {
-          return renderUrl(initializedPlugin, githubUrl + "/tree/master/", keyparts);
-      // rest api: rest:<name>:<path>
-      } else if (keyparts[0] == 'rest') {
-          return renderUrl(initializedPlugin, restApiUrl + "#", keyparts);
-      } else if (keyparts[0] == 'functions') {
-          return renderUrl(initializedPlugin, functionsApiUrl + "#", keyparts);
-      } else if (keyparts[0] == 'source') {
-          return renderUrl(initializedPlugin, sourceApiUrl + "#", keyparts);
-      } else if (keyparts[0] == 'sink') {
-        return renderUrl(initializedPlugin, sinkApiUrl + "#", keyparts);
-      } else if (keyparts[0] == 'packages') {
-        return renderUrl(initializedPlugin, packagesApiUrl + "#", keyparts);
-      } else {
-        keyparts = key.split("|");
-        // endpoint api: endpoint|<op>
-        if (keyparts[0] == 'endpoint') {
-            const restPath = keyparts[2].split('/')
-            const restApiVersion = restPath[2]
-            const restApiType = restPath[3]
-            let restBaseUrl = restApiUrl
-            if (restApiType == 'functions') {
-              restBaseUrl = functionsApiUrl
-            } else if (restApiType == 'source') {
-              restBaseUrl = sourceApiUrl
-            } else if (restApiType == 'sink') {
-              restBaseUrl = sinkApiUrl
-            } 
-            const suffix = keyparts[keyparts.length - 1]
-            restUrl = ''
-            if (suffix.indexOf('?version') >= 0) {
-              restUrl = keyparts[keyparts.length - 1] + '&apiVersion=' + restApiVersion
-            } else {
-              restUrl = keyparts[keyparts.length - 1] + 'version=master&apiVersion=' + restApiVersion
-            }
-            return renderEndpoint(initializedPlugin, restBaseUrl + "#", keyparts, restUrl);
-        }
-      }
-      return initializedPlugin.render(variables[key])
-    }
-  });
-
-  return (md, options) => {
-    if (!initializedPlugin) {
-      initializedPlugin = {
-        render: md.render.bind(md),
-        hook: embed.hook(md, options)
-      };
-    }
-
-    return initializedPlugin.hook;
-  };
-};
-
-const renderUrl = (initializedPlugin, baseUrl, keyparts) => {
-    content = '[' + keyparts[1] + '](' + baseUrl + keyparts[2] + ')';
-    rendered_content = initializedPlugin.render(content);
-    rendered_content = rendered_content.replace('<p>', '');
-    rendered_content = rendered_content.replace('</p>', '');
-    return rendered_content;
-};
-
-const renderEndpoint = (initializedPlugin, baseUrl, keyparts, restUrl) => {
-    content = '[<b>' + keyparts[1] + '</b> <i>' + keyparts[2] + '</i>](' + baseUrl + restUrl + ')';
-    rendered_content = initializedPlugin.render(content);
-    rendered_content = rendered_content.replace('<p>', '');
-    rendered_content = rendered_content.replace('</p>', '');
-    return rendered_content;
-};
-
-const url = 'https://pulsar.apache.org';
-const javadocUrl = url + '/api';
-const restApiUrl = url + "/admin-rest-api";
-const functionsApiUrl = url + "/functions-rest-api";
-const sourceApiUrl = url + "/source-rest-api";
-const sinkApiUrl = url + "/sink-rest-api";
-const packagesApiUrl = url + "/packages-rest-api";
-const githubUrl = 'https://github.com/apache/pulsar';
-const baseUrl = '/';
-
-const siteVariables = {
-};
-
-const siteConfig = {
-  title: "Apache Pulsar" /* title for your website */,
-  disableTitleTagline: true,
-  tagline: "",
-  url: url /* your website url */,
-  baseUrl: baseUrl /* base url for your project */,
-  // For github.io type URLs, you would set the url and baseUrl like:
-  //   url: 'https://facebook.github.io',
-  //   baseUrl: '/test-site/',
-
-  editUrl: `${githubUrl}/edit/master/site2/docs/`,
-
-  // Used for publishing and more
-  projectName: "pulsar",
-  organizationName: "apache",
-  // For top-level user or org sites, the organization is still the same.
-  // e.g., for the https://JoelMarcey.github.io site, it would be set like...
-  //   organizationName: 'JoelMarcey'
-
-  // For no header links in the top nav bar -> headerLinks: [],
-  headerLinks: [
-    { doc: "getting-started-standalone", label: "Docs" },
-    { page: "download", label: "Download" },
-    { doc: "client-libraries", label: "Clients" },
-    { href: "#restapis", label: "REST APIs" },
-    { href: "#cli", label: "Cli" },
-    { blog: true, label: "Blog" },
-    { href: "#community", label: "Community" },
-    { href: "#apache", label: "Apache" },
-    {
-      href: "https://pulsar-next.staged.apache.org/",
-      label: "New Website (Beta)",
-    },
-    // Determines search bar position among links
-    //{ search: true },
-    // Determines language drop down position among links
-    { languages: true },
-  ],
-
-  // If you have users set above, you add it here:
-  users: [],
-
-  /* path to images for header/footer */
-  headerIcon: "img/pulsar.svg",
-  footerIcon: "img/pulsar.svg",
-  favicon: "img/pulsar.ico",
-  algolia: {
-    apiKey: "d226a455cecdd4bc18a554c1b47e5b52",
-    indexName: "apache_pulsar",
-    algoliaOptions: {
-      facetFilters: ["language:LANGUAGE", "version:VERSION"],
-    },
-  },
-  gaTrackingId: "UA-102219959-1",
-
-  /* colors for website */
-  colors: {
-    primaryColor: "#188fff",
-    secondaryColor: "#205C3B",
-  },
-  translationRecruitingLink: "https://crowdin.com/project/apache-pulsar",
-  // This copyright info is used in /core/Footer.js and blog rss/atom feeds.
-  copyright:
-    "Copyright © " +
-    new Date().getFullYear() +
-    " The Apache Software Foundation. All Rights Reserved." +
-    " Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.",
-
-  highlight: {
-    // Highlight.js theme to use for syntax highlighting in code blocks
-    theme: "atom-one-dark",
-  },
-
-  // Add custom scripts here that would be placed in <script> tags
-  scripts: [
-    "https://buttons.github.io/buttons.js",
-    "https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js",
-    `${baseUrl}js/custom.js`,
-  ],
-  stylesheets: [`${baseUrl}css/code-blocks-buttons.css`],
-
-  /* On page navigation for the current documentation page */
-  onPageNav: "separate",
-
-  /* Open Graph and Twitter card images */
-  //ogImage: 'img/docusaurus.png',
-  twitter: true,
-  twitterUsername: "apache_pulsar",
-  twitterImage: "img/pulsar.svg",
-
-  disableHeaderTitle: true,
-
-  cleanUrl: true,
-  //scrollToTop: true,
-  scrollToTopOptions: {
-    zIndex: 100,
-  },
-
-  githubUrl: githubUrl,
-
-  projectDescription: `
-    Apache Pulsar is a cloud-native, distributed messaging and streaming platform originally
-    created at Yahoo! and now a top-level Apache Software Foundation project
-  `,
-
-  markdownPlugins: [createVariableInjectionPlugin(siteVariables)],
-};
-
-module.exports = siteConfig;
diff --git a/site2/website/static/css/code-blocks-buttons.css b/site2/website/static/css/code-blocks-buttons.css
deleted file mode 100644
index 17682d41b1e..00000000000
--- a/site2/website/static/css/code-blocks-buttons.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/* "Copy" code block button */
-pre {
-  position: relative;
-}
-
-pre .btnIcon {
-  position: absolute;
-  top: 4px;
-  z-index: 2;
-  cursor: pointer;
-  border: 1px solid transparent;
-  padding: 0;
-  color: #fff;
-  background-color: transparent;
-  height: 30px;
-  transition: all .25s ease-out;
-}
-
-pre .btnIcon:hover {
-  text-decoration: none;
-}
-
-.btnIcon__body {
-  align-items: center;
-  display: flex;
-}
-
-.btnIcon svg {
-  fill: currentColor;
-  margin-right: .4em;
-}
-
-.btnIcon__label {
-  font-size: 11px;
-}
-
-.btnClipboard {
-  right: 10px;
-}
-
-.version_select {
-  width: 200px;
-  height: 30px;
-  border: 1px solid #000000;
-  border-radius: 4px;
-}
\ No newline at end of file
diff --git a/site2/website/static/css/custom.css b/site2/website/static/css/custom.css
deleted file mode 100644
index 78d05737188..00000000000
--- a/site2/website/static/css/custom.css
+++ /dev/null
@@ -1,150 +0,0 @@
-/* your custom css */
-
-@media only screen and (min-device-width: 360px) and (max-device-width: 736px) {
-}
-
-@media only screen and (min-width: 1024px) {
-}
-
-@media only screen and (max-width: 1023px) {
-}
-
-@media only screen and (min-width: 1400px) {
-}
-
-@media only screen and (min-width: 1500px) {
-}
-
-.topic {
-  color: #bcc5c5;
-  background-color: #232937;
-  font-size: 1.25rem;
-  font-family: "Inconsolata", monospace;
-  font-weight: 700;
-  padding: .5rem 0 .5rem 1rem;
-  border-radius: 0;
-}
-
-.tenant-color {
-  color: #b1cc00;
-}
-
-/* header navigation */
-.fixedHeaderContainer {
-  background-color: white;
-}
-
-.navigationSlider .slidingNav ul li a {
-  color: #188fff;
-}
-
-.navigationSlider .slidingNav ul li.siteNavGroupActive a,
-.navigationSlider .slidingNav ul li.siteNavItemActive a,
-.navigationSlider .slidingNav ul li a:focus,
-.navigationSlider .slidingNav ul li a:hover {
-  background: white;
-  color: #188fff;
-}
-
-.navigationSlider .slidingNav ul li.siteNavItemActive a {
-  background: #188fff;
-  color: white;
-}
-
-
-/* header navigation */
-
-/* for versioning */
-.fixedHeaderContainer header h3 {
-  color: #188fff;
-}
-
-
-/* for drop down menus */
-#community-dropdown.hide,
-#apache-dropdown.hide,
-#restapis-dropdown.hide,
-#cli-dropdown.hide,
-#languages-dropdown.hide {
-  display: none;
-}
-
-
-#community-dropdown.visible,
-#apache-dropdown.visible,
-#restapis-dropdown.visible,
-#cli-dropdown.visible,
-#languages-dropdown.visible {
-  display: flex;
-}
-
-#community-dropdown,
-#apache-dropdown,
-#restapis-dropdown,
-#cli-dropdown,
-#languages-dropdown {
-  pointer-events: none;
-  position: absolute;
-  width: 100%;
-}
-
-#community-dropdown-items,
-#apache-dropdown-items,
-#restapis-dropdown-items,
-#cli-dropdown-items,
-#languages-dropdown-items {
-  background-color: white;
-  display: flex;
-  flex-direction: column;
-  min-width: 120px;
-  pointer-events: all;
-  border: 1px solid rgba(35, 41, 55, 0.15);
-  border-radius: 0.25rem;
-}
-
-
-.logo-wrapper {
-  display: grid;
-  grid-template-columns: 250px 250px 250px 250px 250px;
-  grid-gap: 30px;
-  /* background-color: #fff; */
-  /* color: #444; */
-  /* border: dashed red 1px; */
-  /* align-items: center; */
-  justify-content: center;
-}
-
-.logo-box {
-  /* background-color: #fafafa; */
-  /* color: #fff; */
-  border-radius: 5px;
-  padding: 20px;
-  font-size: 150%;
-  /* border: dashed blue 1px; */
-  height: 120px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-
-}
-
-.logo-box-background-for-white {
-  background-color: #0f1637;
-  border-radius: 5px;
-  padding: 20px;
-  font-size: 150%;
-  /* border: dashed blue 1px; */
-  height: 120px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-
-.logo-box img {
-  max-height: 80px;
-  /* border: dashed green 1px; */
-}
-
-.logo-svg {
-  min-width: 200px;
-}
diff --git a/site2/website/static/doap.rdf b/site2/website/static/doap.rdf
deleted file mode 100644
index 2658dcf7e1f..00000000000
--- a/site2/website/static/doap.rdf
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl"?>
-<rdf:RDF xml:lang="en"
-         xmlns="http://usefulinc.com/ns/doap#" 
-         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-         xmlns:asfext="http://projects.apache.org/ns/asfext#"
-         xmlns:foaf="http://xmlns.com/foaf/0.1/">
-<!--
-  =======================================================================
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
-  =======================================================================
--->
-  <Project rdf:about="https://pulsar.apache.org/">
-    <created>2018-09-19</created>
-    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
-    <name>Apache Pulsar</name>
-    <homepage rdf:resource="https://pulsar.apache.org/" />
-    <asfext:pmc rdf:resource="https://pulsar.apache.org" />
-    <shortdesc>A distributed pub-sub messaging system.</shortdesc>
-    <description>Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API.</description>
-    <bug-database rdf:resource="https://github.com/apache/pulsar/issues" />
-    <mailing-list rdf:resource="https://pulsar.apache.org/en/contact/" />
-    <download-page rdf:resource="http://pulsar.apache.org/en/download/" />
-    <programming-language>Java</programming-language>
-    <category rdf:resource="https://projects.apache.org/category/database" />
-
-    <repository>
-      <GitRepository>
-        <location rdf:resource="https://gitbox.apache.org/repos/asf/pulsar.git"/>
-        <browse rdf:resource="https://github.com/apache/pulsar"/>
-      </GitRepository>
-    </repository>
-    
-    <maintainer>
-      <foaf:Person>
-        <foaf:name>Apache Pulsar Community</foaf:name>
-        <foaf:mbox rdf:resource="mailto:dev@pulsar.apache.org"/>
-      </foaf:Person>
-    </maintainer>
-
-  </Project>
-</rdf:RDF>
diff --git a/site2/website/static/examples/openssl.cnf b/site2/website/static/examples/openssl.cnf
deleted file mode 100644
index eee8a472985..00000000000
--- a/site2/website/static/examples/openssl.cnf
+++ /dev/null
@@ -1,152 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# 
-# Configuration file for testing certificate authority.
-# The environment variable, CA_HOME, must be set to point to the directory
-# containing this file before running any openssl commands.
-#
-[ ca ]
-# `man ca`
-default_ca = CA_default
-
-[ CA_default ]
-# Directory and file locations.
-dir               = $ENV::CA_HOME
-certs             = $dir/certs
-crl_dir           = $dir/crl
-new_certs_dir     = $dir/newcerts
-database          = $dir/index.txt
-serial            = $dir/serial
-RANDFILE          = $dir/private/.rand
-
-# The root key and root certificate.
-private_key       = $dir/private/ca.key.pem
-certificate       = $dir/certs/ca.cert.pem
-
-# For certificate revocation lists.
-crlnumber         = $dir/crlnumber
-crl               = $dir/crl/ca.crl.pem
-crl_extensions    = crl_ext
-default_crl_days  = 30
-
-# SHA-1 is deprecated, so use SHA-2 instead.
-default_md        = sha256
-
-name_opt          = ca_default
-cert_opt          = ca_default
-default_days      = 375
-preserve          = no
-policy            = policy_strict
-
-[ policy_strict ]
-# The root CA should only sign intermediate certificates that match.
-# See the POLICY FORMAT section of `man ca`.
-countryName             = match
-stateOrProvinceName     = match
-organizationName        = match
-organizationalUnitName  = optional
-commonName              = supplied
-emailAddress            = optional
-
-[ policy_loose ]
-# Allow the intermediate CA to sign a more diverse range of certificates.
-# See the POLICY FORMAT section of the `ca` man page.
-countryName             = optional
-stateOrProvinceName     = optional
-localityName            = optional
-organizationName        = optional
-organizationalUnitName  = optional
-commonName              = supplied
-emailAddress            = optional
-
-[ req ]
-# Options for the `req` tool (`man req`).
-default_bits        = 2048
-distinguished_name  = req_distinguished_name
-string_mask         = utf8only
-
-# SHA-1 is deprecated, so use SHA-2 instead.
-default_md          = sha256
-
-# Extension to add when the -x509 option is used.
-x509_extensions     = v3_ca
-
-[ req_distinguished_name ]
-# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
-countryName                     = Country Name (2 letter code)
-stateOrProvinceName             = State or Province Name
-localityName                    = Locality Name
-0.organizationName              = Organization Name
-organizationalUnitName          = Organizational Unit Name
-commonName                      = Common Name
-emailAddress                    = Email Address
-
-# Optionally, specify some defaults.
-countryName_default             = US
-stateOrProvinceName_default     = California
-localityName_default            = Palo Alto
-0.organizationName_default      = My company
-organizationalUnitName_default  = IT
-emailAddress_default            =
-
-[ v3_ca ]
-# Extensions for a typical CA (`man x509v3_config`).
-subjectKeyIdentifier = hash
-authorityKeyIdentifier = keyid:always,issuer
-basicConstraints = critical, CA:true
-keyUsage = critical, digitalSignature, cRLSign, keyCertSign
-
-[ v3_intermediate_ca ]
-# Extensions for a typical intermediate CA (`man x509v3_config`).
-subjectKeyIdentifier = hash
-authorityKeyIdentifier = keyid:always,issuer
-basicConstraints = critical, CA:true, pathlen:0
-keyUsage = critical, digitalSignature, cRLSign, keyCertSign
-
-[ usr_cert ]
-# Extensions for client certificates (`man x509v3_config`).
-basicConstraints = CA:FALSE
-nsCertType = client, email
-nsComment = "OpenSSL Generated Client Certificate"
-subjectKeyIdentifier = hash
-authorityKeyIdentifier = keyid,issuer
-keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
-extendedKeyUsage = clientAuth, emailProtection
-
-[ server_cert ]
-# Extensions for server certificates (`man x509v3_config`).
-basicConstraints = CA:FALSE
-nsCertType = server
-nsComment = "OpenSSL Generated Server Certificate"
-subjectKeyIdentifier = hash
-authorityKeyIdentifier = keyid,issuer:always
-keyUsage = critical, digitalSignature, keyEncipherment
-extendedKeyUsage = serverAuth
-
-[ crl_ext ]
-# Extension for CRLs (`man x509v3_config`).
-authorityKeyIdentifier=keyid:always
-
-[ ocsp ]
-# Extension for OCSP signing certificates (`man ocsp`).
-basicConstraints = CA:FALSE
-subjectKeyIdentifier = hash
-authorityKeyIdentifier = keyid,issuer
-keyUsage = critical, digitalSignature
-extendedKeyUsage = critical, OCSPSigning
\ No newline at end of file
diff --git a/site2/website/static/js/custom.js b/site2/website/static/js/custom.js
deleted file mode 100644
index 84d3c7daafe..00000000000
--- a/site2/website/static/js/custom.js
+++ /dev/null
@@ -1,247 +0,0 @@
-// Turn off ESLint for this file because it's sent down to users as-is.
-/* eslint-disable */
-
-window.addEventListener('load', function () {
-    let restApiVersions = null;
-    var url = "../../../../swagger/restApiVersions.json";
-    var request = new XMLHttpRequest();
-    request.open("get", url, false);
-    request.send(null);
-    restApiVersions = JSON.parse(request.responseText);
-
-    // setup apache menu items in nav bar
-    const apache = document.querySelector("a[href='#apache']").parentNode;
-    const apacheMenu =
-        '<li>' +
-        '<a id="apache-menu" href="#">Apache <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
-        '<div id="apache-dropdown" class="hide">' +
-        '<ul id="apache-dropdown-items">' +
-        '<li><a href="https://www.apache.org/" target="_blank" >Foundation &#x2750</a></li>' +
-        '<li><a href="https://www.apache.org/licenses/" target="_blank">License &#x2750</a></li>' +
-        '<li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship &#x2750</a></li>' +
-        '<li><a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks &#x2750</a></li>' +
-        '<li><a href="https://www.apache.org/security" target="_blank">Security &#x2750</a></li>' +
-        '</ul>' +
-        '</div>' +
-        '</li>';
-
-    apache.innerHTML = apacheMenu;
-
-    const apacheMenuItem = document.getElementById("apache-menu");
-    const apacheDropDown = document.getElementById("apache-dropdown");
-    apacheMenuItem.addEventListener("click", function (event) {
-        event.preventDefault();
-
-        if (apacheDropDown.className == 'hide') {
-            apacheDropDown.className = 'visible';
-        } else {
-            apacheDropDown.className = 'hide';
-        }
-    });
-
-    const href = document.querySelector('a[href="/en/versions"]');
-    let version = href.textContent;
-
-    if (version === 'next') {
-        version = 'master'
-    }
-
-    let adminApiVersion = ''
-    if (restApiVersions[version][0]['fileName'].indexOf('swagger') == 0) {
-        adminApiVersion = restApiVersions[version][0]['version']
-    } else {
-        adminApiVersion = restApiVersions[version][1]['version']
-    }
-    let functionApiVersion = ''
-    if (restApiVersions[version][0]['fileName'].indexOf('swaggerfunctions') >= 0) {
-        functionApiVersion = restApiVersions[version][0]['version']
-    } else {
-        functionApiVersion = restApiVersions[version][1]['version']
-    }
-    let sourceApiVersion = ''
-    if (restApiVersions[version][0]['fileName'].indexOf('swaggersource') >= 0) {
-        sourceApiVersion = restApiVersions[version][0]['version']
-    } else {
-        sourceApiVersion = restApiVersions[version][1]['version']
-    }
-    let sinkApiVersion = ''
-    if (restApiVersions[version][0]['fileName'].indexOf('swaggersink') >= 0) {
-        sinkApiVersion = restApiVersions[version][0]['version']
-    } else {
-        sinkApiVersion = restApiVersions[version][1]['version']
-    }
-    let packagesApiVersion = ''
-    if (restApiVersions[version][0]['fileName'].indexOf('swaggerpackages') >= 0) {
-        packagesApiVersion = restApiVersions[version][0]['version']
-    } else {
-        packagesApiVersion = restApiVersions[version][1]['version']
-    }
-    // setup rest api menu items in nav bar
-    const restapis = document.querySelector("a[href='#restapis']").parentNode;
-    const restapisMenu =
-        '<li>' +
-        '<a id="restapis-menu" href="#restapis">REST APIs <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
-        '<div id="restapis-dropdown" class="hide">' +
-        '<ul id="restapis-dropdown-items">' +
-        '<li><a href="/admin-rest-api?version=' + version + '&apiversion=' + adminApiVersion + '">Admin REST API </a></li>' +
-        '<li><a href="/functions-rest-api?version=' + version + '&apiversion=' + functionApiVersion + '">Functions </a></li>' +
-        '<li><a href="/source-rest-api?version=' + version + '&apiversion=' + sourceApiVersion + '">Sources </a></li>' +
-        '<li><a href="/sink-rest-api?version=' + version + '&apiversion=' + sinkApiVersion + '">Sinks </a></li>' +
-        '<li><a href="/packages-rest-api?version=' + version + '&apiversion=' + packagesApiVersion + '">Packages </a></li>' +
-        '</ul>' +
-        '</div>' +
-        '</li>';
-
-    restapis.innerHTML = restapisMenu;
-
-    const restapisMenuItem = document.getElementById("restapis-menu");
-    const restapisDropDown = document.getElementById("restapis-dropdown");
-    restapisMenuItem.addEventListener("click", function (event) {
-        event.preventDefault();
-
-        if (restapisDropDown.className == 'hide') {
-            restapisDropDown.className = 'visible';
-        } else {
-            restapisDropDown.className = 'hide';
-        }
-    });
-
-    // setup cli menu items in nav bar
-    const cli = document.querySelector("a[href='#cli']").parentNode;
-    const cliMenu =
-        '<li>' +
-        '<a id="cli-menu" href="#">CLI <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
-        '<div id="cli-dropdown" class="hide">' +
-        '<ul id="cli-dropdown-items">' +
-        '<li><a href="/pulsar-admin-cli?version=' + version + '">Pulsar Admin</a></li>' +
-        '<li><a href="/pulsar-client-cli?version=' + version + '">Pulsar Client</a></li>' +
-        '<li><a href="/pulsar-perf-cli?version=' + version + '">Pulsar Perf</a></li>' +
-        '<li><a href="/pulsar-cli?version=' + version + '">Pulsar</a></li>' +
-      '</ul>' +
-        '</div>' +
-        '</li>';
-
-    cli.innerHTML = cliMenu;
-
-    const cliMenuItem = document.getElementById("cli-menu");
-    const cliDropDown = document.getElementById("cli-dropdown");
-    cliMenuItem.addEventListener("click", function (event) {
-        event.preventDefault();
-
-        if (cliDropDown.className == 'hide') {
-            cliDropDown.className = 'visible';
-        } else {
-            cliDropDown.className = 'hide';
-        }
-    });
-
-    function button(label, ariaLabel, icon, className) {
-        const btn = document.createElement('button');
-        btn.classList.add('btnIcon', className);
-        btn.setAttribute('type', 'button');
-        btn.setAttribute('aria-label', ariaLabel);
-        btn.innerHTML =
-            '<div class="btnIcon__body">' +
-            icon +
-            '<strong class="btnIcon__label">' +
-            label +
-            '</strong>' +
-            '</div>';
-        return btn;
-    }
-
-    function addButtons(codeBlockSelector, btn) {
-        document.querySelectorAll(codeBlockSelector).forEach(function (code) {
-            code.parentNode.appendChild(btn.cloneNode(true));
-        });
-    }
-
-    const copyIcon =
-        '<svg width="12" height="12" viewBox="340 364 14 15" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M342 375.974h4v.998h-4v-.998zm5-5.987h-5v.998h5v-.998zm2 2.994v-1.995l-3 2.993 3 2.994v-1.996h5v-1.995h-5zm-4.5-.997H342v.998h2.5v-.997zm-2.5 2.993h2.5v-.998H342v.998zm9 .998h1v1.996c-.016.28-.11.514-.297.702-.187.187-.422.28-.703.296h-10c-.547 0-1-.452-1-.998v-10.976c0-.546.453-.998 1-.998h3c0-1.107.89-1.996 2-1.996 1.11 0 2 .89 2 1.996h3c.547 0 1 .452 1 .998v4.99 [...]
-
-    addButtons(
-        '.hljs',
-        button('Copy', 'Copy code to clipboard', copyIcon, 'btnClipboard')
-    );
-
-    const clipboard = new ClipboardJS('.btnClipboard', {
-        target: function (trigger) {
-            return trigger.parentNode.querySelector('code');
-        },
-    });
-
-    clipboard.on('success', function (event) {
-        event.clearSelection();
-        const textEl = event.trigger.querySelector('.btnIcon__label');
-        textEl.textContent = 'Copied';
-        setTimeout(function () {
-            textEl.textContent = 'Copy';
-        }, 2000);
-    });
-
-    // setup input of api version
-    let pathName = window.location.pathname;
-    let apiVersionList = [];
-    restApiVersions[version].forEach(ele => {
-        let hasRestApi = ele.fileName.find(h => h == 'swagger');
-        let hasFunctions = ele.fileName.find(h => h == 'swaggerfunctions');
-        let hasSink = ele.fileName.find(h => h == 'swaggersink');
-        let hasSource = ele.fileName.find(h => h == 'swaggersource');
-
-        if ( pathName.indexOf('/admin-rest-api') >= 0 && hasRestApi ) {
-            apiVersionList.push(ele);
-        }
-        if ( pathName.indexOf('/functions-rest-api') >= 0 && hasFunctions ) {
-            apiVersionList.push(ele);
-        }
-        if ( pathName.indexOf('/sink-rest-api') >= 0 && hasSink ) {
-            apiVersionList.push(ele);
-        }
-        if ( pathName.indexOf('/source-rest-api') >= 0 && hasSource ) {
-            apiVersionList.push(ele);
-        }
-    });
-
-    const wrapperDiv = document.querySelectorAll('.wrapper')[1];
-    
-    if (pathName.indexOf('/admin-rest-api') >= 0
-        || pathName.indexOf('/functions-rest-api') >= 0
-        || pathName.indexOf('/source-rest-api') >= 0
-        || pathName.indexOf('/sink-rest-api') >= 0
-        || pathName.indexOf('/packages-rest-api') >= 0) {
-        wrapperDiv.innerHTML = `<select name="apiVersion" class="version_select" id="version_select">
-                                    ${apiVersionList.map(v => `<option value="${v.version}">${v.version}</option>`).join("")}
-                                </select>`;
-
-    } else {
-        return;
-    }
-
-
-    const versionSelect = document.querySelectorAll('.version_select')[0];
-    let aversion = '';
-    if (!window.location.search.split('&')[1]) {
-        aversion = apiVersionList[0];
-    } else {
-        aversion = window.location.search.split('&')[1].split('=')[1];
-    }
-    let versionOption = versionSelect.querySelectorAll('option');
-    versionOption.forEach(ele => {
-        if (ele.value == aversion) {
-            ele.selected = true;
-        } else {
-            ele.selected = false;
-        }
-    });
-
-    versionSelect.addEventListener('change', (e) => {
-        console.log(window.location);
-        let optionValue = e.target.value;
-        let changeValueDom = document.createElement('a');
-        changeValueDom.href = pathName + '?version=' + version + '&apiversion=' + optionValue;
-        this.document.querySelectorAll('body')[0].appendChild(changeValueDom);
-        changeValueDom.click();
-
-    })
-
-});
diff --git a/site2/website/static/js/getCliByVersion.js b/site2/website/static/js/getCliByVersion.js
deleted file mode 100644
index 7f3ab5d4ff4..00000000000
--- a/site2/website/static/js/getCliByVersion.js
+++ /dev/null
@@ -1,48 +0,0 @@
-function getCliByVersion(){
-    var params = window.location.search
-    var latestVersion = document.getElementById("latestVersion").textContent
-    var clientModule = document.getElementById("clientModule").textContent
-    if (!clientModule) {
-        clientModule = "pulsar-admin"
-    }
-    params = params.replace('?', '')
-    const paramsList = params.split('&')
-    var version = 'master'
-    for (var i in paramsList) {
-        var param = paramsList[i].split('=')
-        if (param[0] === 'version') {
-            version = param[1]
-        }
-    }
-
-    if (version === "master") {
-        var latestVersionSplit = latestVersion.split('.')
-        version = parseInt(latestVersionSplit[0]) + "." + (parseInt(latestVersionSplit[1]) + 1) + ".0"
-    }
-    var versions = version.split('.')
-    var majorVersion = parseInt(versions[0])
-    var minorVersion = parseInt(versions[1])
-    var minMinorVersion = 5
-    var referenceLink = "/pulsar-admin"
-    if (clientModule === "pulsar-client") {
-        minMinorVersion = 8
-        referenceLink = "/reference-cli-tools/#pulsar-client"
-    } else if(clientModule === "pulsar-perf") {
-        minMinorVersion = 8
-        referenceLink = "/reference-cli-tools/#pulsar-perf"
-    } else if(clientModule === "pulsar") {
-        minMinorVersion = 8
-        referenceLink = "/reference-cli-tools/#pulsar"
-    }
-    if ((majorVersion > 1 && minorVersion <= minMinorVersion) || majorVersion === 1) {
-        if (version === latestVersion) {
-            window.location.href = "/docs/en" + referenceLink
-        } else {
-            window.location.href = "/docs/en/" + version + referenceLink
-        }
-    } else {
-        version = parseInt(versions[0]) + "." + parseInt(versions[1]) + ".0"
-        window.location.href = "http://pulsar.apache.org/tools/" + clientModule + "/" + version + "-SNAPSHOT"
-    }
-}
-window.onload=getCliByVersion
diff --git a/site2/website/static/js/getSwaggerByVersion.js b/site2/website/static/js/getSwaggerByVersion.js
deleted file mode 100644
index da6ff0c1ef3..00000000000
--- a/site2/website/static/js/getSwaggerByVersion.js
+++ /dev/null
@@ -1,63 +0,0 @@
-function getSwaggerByVersion(){
-    var params = window.location.search
-    var pathName = window.location.pathname
-    params = params.replace('?', '')
-    const paramsList = params.split('&')
-    var version = 'master'
-    var apiversion = '';
-    for (var i in paramsList) {
-        var param = paramsList[i].split('=')
-        if (param[0] === 'version') {
-            version = param[1]
-        }
-        if (param[0] === 'apiversion') {
-            apiversion = param[1]
-        }
-    }
-    var href = document.querySelector('a[href="/en/versions"]');
-    href.innerHTML = '<h3>' + version + '</h3>'
-    var restApiHref = document.querySelectorAll("#restapis-dropdown-items a")
-    for (var i = 0; i < restApiHref.length; i++) {
-        var tempHref = restApiHref[i].href
-        var path = tempHref.split('version')
-        var newVersionPath = path[0] + 'version=' + version
-        restApiHref[i].href = newVersionPath
-    }
-
-    if (version !== 'master') {
-        var versions = version.split('.')
-        var majorVersion = parseInt(versions[0])
-        var minorVersion = parseInt(versions[1])
-        if (majorVersion < 2) {
-            version = '2.3.0'
-        } else if (minorVersion < 3) {
-            version = '2.3.0'
-        }
-    }
-
-    
-    const wrapper = document.querySelector('.pageContainer .wrapper')
-    const redoc = document.createElement('redoc');
-
-
-    if (pathName.indexOf('admin-rest-api') >= 0) {
-        redoc.setAttribute('spec-url', '/swagger/' + version + '/' + apiversion  + '/swagger.json')
-    } else if (pathName.indexOf('functions-rest-api') >= 0) {
-        redoc.setAttribute('spec-url', '/swagger/' + version + '/' + apiversion  + '/swaggerfunctions.json')
-    } else if (pathName.indexOf('source-rest-api') >= 0) {
-        redoc.setAttribute('spec-url', '/swagger/' + version + '/' + apiversion  + '/swaggersource.json')
-    } else if (pathName.indexOf('sink-rest-api') >= 0) {
-        redoc.setAttribute('spec-url', '/swagger/' + version + '/' + apiversion  + '/swaggersink.json')
-    } else if (pathName.indexOf('packages-rest-api' >= 0)) {
-        redoc.setAttribute('spec-url', '/swagger/' + version + '/' + apiversion  + '/swaggerpackages.json')
-    }
-    redoc.setAttribute('lazy-rendering', 'true')
-    const redocLink = document.createElement('script');
-    redocLink.setAttribute('src', 'https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js')
-    const script = document.querySelector('.pageContainer .wrapper script')
-
-    wrapper.insertBefore(redoc, script)
-    wrapper.insertBefore(redocLink, script)
-
-}
-window.onload=getSwaggerByVersion