You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by gu...@apache.org on 2026/01/25 22:45:58 UTC

(mahout) branch main updated: [Docs] init docs effort (#914)

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

guanmingchiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/mahout.git


The following commit(s) were added to refs/heads/main by this push:
     new b736eb90d [Docs] init docs effort (#914)
b736eb90d is described below

commit b736eb90dc403d592fef06e1be0fe92ed5365717
Author: Ryan Huang <hc...@apache.org>
AuthorDate: Mon Jan 26 06:45:53 2026 +0800

    [Docs] init docs effort (#914)
    
    * Add SVG illustration and TypeScript configuration file
    
    - Added a new SVG file for the illustration "Focus on What Matters" in the static images directory.
    - Created a TypeScript configuration file (tsconfig.json) to enhance editor experience, extending from the Docusaurus base configuration.
    
    * Add Quantum Computing Primer Documentation
    
    - Created a comprehensive primer on quantum computing, including sections on qubits, quantum gates, quantum circuits, quantum entanglement, quantum algorithms, and quantum error correction.
    - Implemented examples using the `qumat` library to demonstrate key concepts and operations.
    - Added a sidebar for version 0.4 and updated the versions.json file to include the new version.
    
    * fix pre-commit?
    
    * chore: comment out push trigger in website workflow
    
    * git ignore docs/ files
    
    * fix severity vulnerability
    
    * feat: preserve specified files during documentation sync
    
    * temporarily delete website yml workflow
    
    * feat: community and guildlines should be in docs also.
    
    * deleted git ignored files
    
    * move website-new to website
    
    Signed-off-by: Ryan Huang <ry...@gmail.com>
    
    * Add meeting minutes and blog posts for 2024-2025
    
    - Created meeting minutes for weekly community meetings from July 2024 to October 2025, detailing attendees, old and new business, and next steps.
    - Added blog posts for the Qumat 0.4 release and FOSDEM 2025 talk announcement.
    - Updated sync-docs.js to handle blog posts separately during documentation sync.
    
    ---------
    
    Signed-off-by: Ryan Huang <ry...@gmail.com>
---
 .github/workflows/website.yml                      |    56 -
 .gitignore                                         |    10 +-
 CONTRIBUTING.md                                    |    44 +-
 {website => docs}/about/how-to-contribute.md       |    18 +-
 docs/adr/001-jekyll-to-docusaurus-migration.md     |   153 +
 docs/adr/DOCUSAURUS_MIGRATION_PLAN.md              |   492 +
 docs/{basic_gates.md => basic-gates.md}            |    43 +-
 .../_posts => docs/blog}/2017-12-20-new-website.md |     8 +-
 .../_posts => docs/blog}/2018-06-18-preping-014.md |     6 +-
 .../blog}/2019-12-14-version-14-1.md               |     6 +-
 .../blog}/2020-10-18-version-14-1-released.md      |     6 +-
 .../blog}/2020-10-30-weekly-meeting-minutes.md     |     6 +-
 .../blog}/2020-11-13-weekly-meeting-minutes.md     |     6 +-
 .../blog}/2020-11-20-weekly-meeting-minutes.md     |     6 +-
 .../blog}/2020-11-6-weekly-meeting-minutes.md      |     6 +-
 .../blog}/2020-12-15-weekly-meeting-minutes.md     |     6 +-
 .../blog}/2020-12-8-weekly-meeting-minutes.md      |     6 +-
 .../blog}/2021-01-05-weekly-meeting-minutes.md     |     6 +-
 .../blog}/2021-02-02-weekly-meeting-minutes.md     |     6 +-
 .../blog}/2021-06-01-Zeppelin Quickstart.md        |     6 +-
 .../blog}/2023-02-22-Meeting-Minutes.md            |     6 +-
 .../blog}/2023-03-29-Meeting-Minutes.md            |     6 +-
 .../blog}/2023-07-26-Meeting-Minutes.md            |     6 +-
 .../blog}/2023-08-30-Meeting-Minutes.md            |     6 +-
 .../blog}/2023-09-27-Meeting-Minutes.md            |     6 +-
 .../blog}/2023-10-25-Meeting-Minutes.md            |     6 +-
 .../blog}/2023-11-29-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-01-31-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-02-14-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-03-07-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-03-13-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-03-20-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-03-27-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-04-03-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-04-17-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-04-24-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-05-08-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-07-17-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-07-24-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-08-02-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-08-09-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-08-30-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-09-20-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-09-27-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-10-04-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-11-01-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-11-15-Meeting-Minutes.md            |     6 +-
 .../blog}/2024-12-06-Meeting-Minutes.md            |     6 +-
 .../_posts => docs/blog}/2025-01-24-FOSDEM-Talk.md |     6 +-
 .../blog}/2025-01-24-Meeting-Minutes.md            |     6 +-
 .../blog}/2025-02-14-Meeting-Minutes.md            |     6 +-
 .../blog}/2025-03-13-Meeting-Minutes.md            |     6 +-
 .../blog}/2025-03-21-Meeting-Minutes.md            |     6 +-
 .../blog}/2025-04-11-Meeting-Minutes.md            |     6 +-
 .../blog}/2025-04-17-Qumat-0.4-Release.md          |     6 +-
 .../blog}/2025-05-16-Meeting-Minutes.md            |     6 +-
 .../blog}/2025-08-01-Meeting-Minutes.md            |     6 +-
 .../blog}/2025-10-24-Meeting-Minutes.md            |     6 +-
 .../coc.md => docs/community/code-of-conduct.md    |     4 +-
 {website => docs}/community/index.md               |     2 +-
 {website => docs}/community/mailing-lists.md       |     2 +-
 {website => docs}/community/who-we-are.md          |     4 +-
 .../downloads.md => docs/download/index.md         |     4 +-
 docs/download/quickstart.md                        |    58 +
 ...with_qumat.md => getting-started-with-qumat.md} |    17 +-
 docs/{getting_started.md => getting-started.md}    |     0
 docs/index.md                                      |    28 +-
 ...rized_circuits.md => parameterized-circuits.md} |    18 +-
 docs/{p_q_c.md => pqc.md}                          |    16 +-
 docs/qdp/observability.md                          |   148 +
 docs/qdp/readers.md                                |   222 +
 docs/qdp/testing.md                                |    54 +
 ...is_for_pqc.md => qumat-gap-analysis-for-pqc.md} |     0
 .../core/api/index.md => docs/qumat/core/api.md    |     0
 .../index.md => docs/qumat/core/concepts.md        |     0
 .../index.md => docs/qumat/core/examples.md        |     0
 .../index.md => docs/qumat/core/getting-started.md |     0
 docs/qumat/core/index.md                           |    14 +
 {website => docs}/qumat/index.md                   |     9 +-
 .../An-Efficient-Quantum-Factoring-Algorithm.md    |     0
 ...-Neutral-Atoms-For-Supervised-Classification.md |     0
 ...antum-machine-learning-beyond-kernel-methods.md |     0
 ...-the-Potential-of-LLMs-for-Quantum-Computing.md |     0
 docs/qumat/papers/index.md                         |    12 +
 .../qdp/api/index.md => docs/qumat/qdp/api.md      |     0
 .../index.md => docs/qumat/qdp/concepts.md         |     0
 .../index.md => docs/qumat/qdp/examples.md         |     0
 docs/qumat/qdp/getting-started.md                  |     8 +
 {website => docs}/qumat/qdp/index.md               |     9 +-
 .../quantum-computing-primer/advanced-topics.md    |     0
 .../qumat/quantum-computing-primer/applications.md |     0
 .../qumat/quantum-computing-primer/index.md        |    19 +-
 .../qumat/quantum-computing-primer/introduction.md |     0
 .../quantum-computing-primer/quantum-algorithms.md |     0
 .../quantum-computing-primer/quantum-circuits.md   |     0
 .../quantum-entanglement.md                        |     0
 .../quantum-error-correction.md                    |     0
 .../quantum-computing-primer/quantum-gates.md      |     0
 .../qumat/quantum-computing-primer/qubits.md       |     0
 website/.bundle/config                             |     2 -
 website/.gitignore                                 |    20 +
 website/.htaccess                                  |    38 -
 website/404.html                                   |    58 -
 website/Gemfile                                    |    54 -
 website/README.md                                  |   301 +-
 website/_config.yml                                |    65 -
 website/_includes/analytics.html                   |    17 -
 website/_includes/doc-navbar.html                  |   128 -
 website/_includes/footer.html                      |     5 -
 website/_includes/head.html                        |    42 -
 website/_includes/navbar.html                      |   103 -
 website/_includes/posts/post-preview.html          |    34 -
 website/_includes/sidebar.html                     |    70 -
 website/_layouts/default.html                      |    17 -
 website/_layouts/deprecated-docs.html              |    13 -
 website/_layouts/doc-default.html                  |    20 -
 website/_layouts/doc-page.html                     |    15 -
 website/_layouts/home.html                         |    36 -
 website/_layouts/page.html                         |    18 -
 website/_layouts/post.html                         |    27 -
 website/_posts/2020-10-10-version-14-1             |    11 -
 website/_sass/mahout.scss                          |    39 -
 website/_sass/mahout/_base.scss                    |    70 -
 website/_sass/mahout/_heading.scss                 |    79 -
 website/_sass/mahout/_mixins.scss                  |    24 -
 website/_sass/mahout/_navbar.scss                  |    68 -
 website/_sass/mahout/_posts.scss                   |    35 -
 website/_sass/mahout/_syntax-highlighting.scss     |    86 -
 website/assets/css/github-markdown.css             |  1104 --
 website/assets/css/main.scss                       |    22 -
 website/assets/header.js                           |   219 -
 .../assets/vendor/bootstrap/js/bootstrap.min.js    |     6 -
 website/assets/vendor/bootstrap/scss/_alert.scss   |    48 -
 website/assets/vendor/bootstrap/scss/_badge.scss   |    48 -
 .../assets/vendor/bootstrap/scss/_breadcrumb.scss  |    38 -
 .../vendor/bootstrap/scss/_button-group.scss       |   198 -
 website/assets/vendor/bootstrap/scss/_buttons.scss |   141 -
 website/assets/vendor/bootstrap/scss/_card.scss    |   223 -
 .../assets/vendor/bootstrap/scss/_carousel.scss    |   185 -
 website/assets/vendor/bootstrap/scss/_close.scss   |    29 -
 website/assets/vendor/bootstrap/scss/_code.scss    |    64 -
 .../vendor/bootstrap/scss/_custom-forms.scss       |   254 -
 .../assets/vendor/bootstrap/scss/_dropdown.scss    |   123 -
 website/assets/vendor/bootstrap/scss/_forms.scss   |   390 -
 .../assets/vendor/bootstrap/scss/_functions.scss   |    90 -
 website/assets/vendor/bootstrap/scss/_grid.scss    |    53 -
 website/assets/vendor/bootstrap/scss/_images.scss  |    43 -
 .../assets/vendor/bootstrap/scss/_input-group.scss |   176 -
 .../assets/vendor/bootstrap/scss/_jumbotron.scss   |    16 -
 .../assets/vendor/bootstrap/scss/_list-group.scss  |   114 -
 website/assets/vendor/bootstrap/scss/_media.scss   |     8 -
 website/assets/vendor/bootstrap/scss/_mixins.scss  |    41 -
 website/assets/vendor/bootstrap/scss/_modal.scss   |   142 -
 website/assets/vendor/bootstrap/scss/_nav.scss     |   118 -
 website/assets/vendor/bootstrap/scss/_navbar.scss  |   287 -
 .../assets/vendor/bootstrap/scss/_pagination.scss  |    66 -
 website/assets/vendor/bootstrap/scss/_popover.scss |   195 -
 website/assets/vendor/bootstrap/scss/_print.scss   |   119 -
 .../assets/vendor/bootstrap/scss/_progress.scss    |    32 -
 website/assets/vendor/bootstrap/scss/_reboot.scss  |   481 -
 website/assets/vendor/bootstrap/scss/_tables.scss  |   168 -
 website/assets/vendor/bootstrap/scss/_tooltip.scss |   107 -
 .../assets/vendor/bootstrap/scss/_transitions.scss |    34 -
 website/assets/vendor/bootstrap/scss/_type.scss    |   123 -
 .../assets/vendor/bootstrap/scss/_utilities.scss   |    14 -
 .../assets/vendor/bootstrap/scss/_variables.scss   |   837 -
 .../vendor/bootstrap/scss/bootstrap-grid.scss      |    37 -
 .../vendor/bootstrap/scss/bootstrap-reboot.scss    |     9 -
 .../assets/vendor/bootstrap/scss/bootstrap.scss    |    41 -
 .../vendor/bootstrap/scss/mixins/_alert.scss       |    13 -
 .../bootstrap/scss/mixins/_background-variant.scss |    12 -
 .../vendor/bootstrap/scss/mixins/_badge.scss       |    12 -
 .../bootstrap/scss/mixins/_border-radius.scss      |    35 -
 .../vendor/bootstrap/scss/mixins/_box-shadow.scss  |     5 -
 .../vendor/bootstrap/scss/mixins/_breakpoints.scss |   105 -
 .../vendor/bootstrap/scss/mixins/_buttons.scss     |    83 -
 .../vendor/bootstrap/scss/mixins/_clearfix.scss    |     7 -
 .../vendor/bootstrap/scss/mixins/_float.scss       |     9 -
 .../vendor/bootstrap/scss/mixins/_forms.scss       |    81 -
 .../vendor/bootstrap/scss/mixins/_gradients.scss   |    37 -
 .../bootstrap/scss/mixins/_grid-framework.scss     |    56 -
 .../assets/vendor/bootstrap/scss/mixins/_grid.scss |    47 -
 .../vendor/bootstrap/scss/mixins/_hover.scss       |    60 -
 .../vendor/bootstrap/scss/mixins/_image.scss       |    36 -
 .../vendor/bootstrap/scss/mixins/_list-group.scss  |    26 -
 .../vendor/bootstrap/scss/mixins/_lists.scss       |     7 -
 .../vendor/bootstrap/scss/mixins/_nav-divider.scss |    10 -
 .../bootstrap/scss/mixins/_navbar-align.scss       |     9 -
 .../vendor/bootstrap/scss/mixins/_pagination.scss  |    22 -
 .../vendor/bootstrap/scss/mixins/_reset-text.scss  |    18 -
 .../vendor/bootstrap/scss/mixins/_resize.scss      |     6 -
 .../bootstrap/scss/mixins/_screen-reader.scss      |    35 -
 .../assets/vendor/bootstrap/scss/mixins/_size.scss |     6 -
 .../vendor/bootstrap/scss/mixins/_table-row.scss   |    30 -
 .../bootstrap/scss/mixins/_text-emphasis.scss      |    12 -
 .../vendor/bootstrap/scss/mixins/_text-hide.scss   |     8 -
 .../bootstrap/scss/mixins/_text-truncate.scss      |     8 -
 .../vendor/bootstrap/scss/mixins/_transition.scss  |     9 -
 .../vendor/bootstrap/scss/mixins/_visibility.scss  |     5 -
 .../vendor/bootstrap/scss/utilities/_align.scss    |     6 -
 .../bootstrap/scss/utilities/_background.scss      |     5 -
 .../vendor/bootstrap/scss/utilities/_borders.scss  |    48 -
 .../vendor/bootstrap/scss/utilities/_clearfix.scss |     3 -
 .../vendor/bootstrap/scss/utilities/_display.scss  |    53 -
 .../vendor/bootstrap/scss/utilities/_embed.scss    |    52 -
 .../vendor/bootstrap/scss/utilities/_flex.scss     |    44 -
 .../vendor/bootstrap/scss/utilities/_float.scss    |     9 -
 .../vendor/bootstrap/scss/utilities/_position.scss |    25 -
 .../bootstrap/scss/utilities/_screenreaders.scss   |    11 -
 .../vendor/bootstrap/scss/utilities/_sizing.scss   |    10 -
 .../vendor/bootstrap/scss/utilities/_spacing.scss  |    41 -
 .../vendor/bootstrap/scss/utilities/_text.scss     |    49 -
 .../bootstrap/scss/utilities/_visibility.scss      |    11 -
 website/assets/vendor/jquery/jquery-slim.min.js    |  8160 --------
 website/assets/vendor/mathjax/core.js              |     1 -
 website/assets/vendor/mathjax/input/asciimath.js   |     1 -
 website/assets/vendor/mathjax/input/mml.js         |     1 -
 .../assets/vendor/mathjax/input/mml/entities.js    |     1 -
 .../vendor/mathjax/input/mml/extensions/mml3.js    |     1 -
 .../mathjax/input/mml/extensions/mml3.sef.json     |     1 -
 website/assets/vendor/mathjax/input/tex-base.js    |     1 -
 website/assets/vendor/mathjax/input/tex-full.js    |    34 -
 website/assets/vendor/mathjax/input/tex.js         |     1 -
 .../vendor/mathjax/input/tex/extensions/action.js  |     1 -
 .../mathjax/input/tex/extensions/all-packages.js   |    34 -
 .../vendor/mathjax/input/tex/extensions/ams.js     |     1 -
 .../vendor/mathjax/input/tex/extensions/amscd.js   |     1 -
 .../mathjax/input/tex/extensions/autoload.js       |     1 -
 .../vendor/mathjax/input/tex/extensions/bbox.js    |     1 -
 .../mathjax/input/tex/extensions/boldsymbol.js     |     1 -
 .../vendor/mathjax/input/tex/extensions/braket.js  |     1 -
 .../mathjax/input/tex/extensions/bussproofs.js     |     1 -
 .../vendor/mathjax/input/tex/extensions/cancel.js  |     1 -
 .../vendor/mathjax/input/tex/extensions/cases.js   |     1 -
 .../mathjax/input/tex/extensions/centernot.js      |     1 -
 .../vendor/mathjax/input/tex/extensions/color.js   |     1 -
 .../mathjax/input/tex/extensions/colortbl.js       |     1 -
 .../vendor/mathjax/input/tex/extensions/colorv2.js |     1 -
 .../mathjax/input/tex/extensions/configmacros.js   |     1 -
 .../vendor/mathjax/input/tex/extensions/empheq.js  |     1 -
 .../vendor/mathjax/input/tex/extensions/enclose.js |     1 -
 .../mathjax/input/tex/extensions/extpfeil.js       |     1 -
 .../vendor/mathjax/input/tex/extensions/gensymb.js |     1 -
 .../vendor/mathjax/input/tex/extensions/html.js    |     1 -
 .../mathjax/input/tex/extensions/mathtools.js      |     1 -
 .../vendor/mathjax/input/tex/extensions/mhchem.js  |    34 -
 .../mathjax/input/tex/extensions/newcommand.js     |     1 -
 .../mathjax/input/tex/extensions/noerrors.js       |     1 -
 .../mathjax/input/tex/extensions/noundefined.js    |     1 -
 .../vendor/mathjax/input/tex/extensions/physics.js |     1 -
 .../vendor/mathjax/input/tex/extensions/require.js |     1 -
 .../mathjax/input/tex/extensions/setoptions.js     |     1 -
 .../mathjax/input/tex/extensions/tagformat.js      |     1 -
 .../mathjax/input/tex/extensions/textcomp.js       |     1 -
 .../mathjax/input/tex/extensions/textmacros.js     |     1 -
 .../vendor/mathjax/input/tex/extensions/unicode.js |     1 -
 .../vendor/mathjax/input/tex/extensions/upgreek.js |     1 -
 .../vendor/mathjax/input/tex/extensions/verb.js    |     1 -
 website/assets/vendor/mathjax/loader.js            |     1 -
 website/assets/vendor/mathjax/startup.js           |     1 -
 website/assets/vendor/mathjax/tex-chtml.js         |     1 -
 website/assets/vendor/popper/popper.min.js         |     5 -
 website/build_site.sh                              |    64 -
 website/docs/.gitignore                            |    10 +
 website/docusaurus.config.ts                       |   287 +
 website/download/quickstart.md                     |    75 -
 website/index.md                                   |    20 -
 website/news.html                                  |    16 -
 website/package-lock.json                          | 18683 +++++++++++++++++++
 website/package.json                               |    54 +
 website/qumat/core/index.md                        |    15 -
 website/qumat/papers/index.md                      |    12 -
 website/qumat/qdp/getting-started/index.md         |    82 -
 website/scripts/migrate-posts.js                   |   195 +
 website/scripts/migrate-website-docs.js            |   231 +
 website/scripts/sync-docs.js                       |   275 +
 website/sidebars.ts                                |   125 +
 website/src/components/WaveAnimation/index.tsx     |   161 +
 .../src/components/WaveAnimation/styles.module.css |     7 +
 website/src/css/custom.css                         |   170 +
 website/src/pages/index.module.css                 |   226 +
 website/src/pages/index.tsx                        |   177 +
 website/src/pages/markdown-page.md                 |     7 +
 .../getting_started.md => website/static/.nojekyll |     0
 website/{assets => static/img}/asf_logo.svg        |     0
 website/{assets => static/img}/asf_logo_white.svg  |     0
 website/{assets => static/img}/asf_new_logo.svg    |     0
 website/static/img/docusaurus-social-card.jpg      |   Bin 0 -> 55746 bytes
 website/static/img/docusaurus.png                  |   Bin 0 -> 5142 bytes
 website/static/img/favicon.ico                     |   Bin 0 -> 3626 bytes
 website/static/img/logo.svg                        |     1 +
 .../{assets => static/img}/mahout-logo-blue.svg    |     0
 .../{assets => static/img}/mahout-logo-white.svg   |     0
 website/{assets => static/img}/mahout-logo.svg     |     0
 .../images => static/img}/mascot_with_text.png     |   Bin
 website/static/img/undraw_docusaurus_mountain.svg  |   171 +
 website/static/img/undraw_docusaurus_react.svg     |   170 +
 website/static/img/undraw_docusaurus_tree.svg      |    40 +
 website/tsconfig.json                              |     8 +
 .../version-0.4}/about/how-to-contribute.md        |    14 +-
 .../adr/001-jekyll-to-docusaurus-migration.md      |   153 +
 website/versioned_docs/version-0.4/api.md          |   160 +
 .../versioned_docs/version-0.4/assets/mascot.png   |   Bin 0 -> 834802 bytes
 .../version-0.4/assets}/mascot_with_text.png       |   Bin
 .../versioned_docs/version-0.4/basic-gates.md      |    43 +-
 .../version-0.4/community/code-of-conduct.md}      |     4 +-
 .../version-0.4}/community/index.md                |     2 +-
 .../version-0.4}/community/mailing-lists.md        |     2 +-
 .../version-0.4}/community/who-we-are.md           |     4 +-
 .../version-0.4/download/index.md}                 |     4 +-
 .../version-0.4/download/quickstart.md             |    58 +
 .../version-0.4/getting-started-with-qumat.md      |    20 +-
 .../versioned_docs/version-0.4/getting-started.md  |     3 +
 website/versioned_docs/version-0.4/index.md        |    32 +
 .../version-0.4/parameterized-circuits.md          |    18 +-
 .../versioned_docs/version-0.4/pqc.md              |    16 +-
 .../version-0.4/qdp/observability.md               |   151 +
 website/versioned_docs/version-0.4/qdp/readers.md  |   225 +
 website/versioned_docs/version-0.4/qdp/testing.md  |    57 +
 .../version-0.4/qumat-gap-analysis-for-pqc.md      |     3 +
 .../version-0.4/qumat/core/api.md}                 |     1 -
 .../version-0.4/qumat/core/concepts.md}            |     1 -
 .../version-0.4/qumat/core/examples.md}            |     1 -
 .../version-0.4/qumat/core/getting-started.md}     |     1 -
 .../versioned_docs/version-0.4/qumat/core/index.md |    14 +
 .../version-0.4}/qumat/index.md                    |     9 +-
 .../An-Efficient-Quantum-Factoring-Algorithm.md    |     3 +-
 ...-Neutral-Atoms-For-Supervised-Classification.md |     1 -
 ...antum-machine-learning-beyond-kernel-methods.md |     3 +-
 ...-the-Potential-of-LLMs-for-Quantum-Computing.md |     1 -
 .../version-0.4/qumat/papers/index.md              |    12 +
 .../version-0.4/qumat/qdp/api.md}                  |     1 -
 .../version-0.4/qumat/qdp/concepts.md}             |     1 -
 .../version-0.4/qumat/qdp/examples.md}             |     1 -
 .../version-0.4/qumat/qdp/getting-started.md       |     7 +
 .../version-0.4}/qumat/qdp/index.md                |     9 +-
 .../quantum-computing-primer/advanced-topics.md}   |     1 -
 .../quantum-computing-primer/applications.md}      |     1 -
 .../qumat/quantum-computing-primer/index.md        |    19 +-
 .../quantum-computing-primer/introduction.md}      |     1 -
 .../quantum-algorithms.md}                         |     1 -
 .../quantum-computing-primer/quantum-circuits.md}  |     1 -
 .../quantum-entanglement.md}                       |     1 -
 .../quantum-error-correction.md}                   |     1 -
 .../quantum-computing-primer/quantum-gates.md}     |     1 -
 .../qumat/quantum-computing-primer/qubits.md}      |     1 -
 .../versioned_sidebars/version-0.4-sidebars.json   |     8 +
 website/versions.json                              |     3 +
 348 files changed, 23699 insertions(+), 17854 deletions(-)

diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml
deleted file mode 100644
index 4c0861a35..000000000
--- a/.github/workflows/website.yml
+++ /dev/null
@@ -1,56 +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.
-
-
-name: Website
-
-# Controls when the action will run. Triggers the workflow on push or pull request
-# events but only for the trunk branch
-on:
-  push:
-    branches:
-      - main
-
-
-# A workflow run is made up of one or more jobs that can run sequentially or in parallel
-jobs:
-  # This workflow contains a single job called "build"
-  build:
-    # The type of runner that the job will run on
-    runs-on: ubuntu-latest
-
-    # Steps represent a sequence of tasks that will be executed as part of the job
-    steps:
-    # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
-    - uses: actions/checkout@v6
-      with:
-        token: ${{ secrets.GITHUB_TOKEN }}
-    # Runs a single command using the runners shell
-    - name: Build Website
-      run: |
-        git config user.name "GitHub Actions Bot"
-        git config user.email "<>"
-        ./website/build_site.sh
-        rm -rf *
-        git checkout asf-site
-        cp -r $WORKDIR/. .
-        git add .
-        git commit -m "Automatic Site Publish by Buildbot"
-        git push
-      env:
-        WORKDIR: /tmp/mahout-site
-
-        RUBY_PATH: ~/shared/.rvm
-        GEM_HOME: ${RUBY_PATH}/gems
diff --git a/.gitignore b/.gitignore
index 001761abe..de41e2269 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,13 +24,19 @@ math-tests/
 metastore_db/*
 bin/derby.log
 bin/metastore_db
-*jar
-*log
+*.jar
+*.log
+
+# Jekyll (legacy)
 website/_site
 website/Gemfile.lock
 website/.bundle
 website/.sass-cache
 
+# Docusaurus build artifacts (synced from /docs)
+website/blog/
+website-new/
+
 *.iml
 .idea
 
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bbff5bd84..a01a3ab6e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -97,11 +97,49 @@ pre-commit run --all-files
 
 Create a pull request on GitHub. Please follow the [pull request template](.github/PULL_REQUEST_TEMPLATE) to provide a detailed description of your changes.
 
-## 3. Project Structure
+## 3. Website Development
+
+The website is built with [Docusaurus](https://docusaurus.io/). The `/docs` directory is the source of truth for documentation.
+
+### Local Development
+
+```bash
+cd website-new
+npm install
+npm run start
+```
+
+This starts a local development server at `http://localhost:3000` with hot reload.
+
+### Building
+
+```bash
+cd website-new
+npm run build
+```
+
+The build syncs documentation from `/docs` and `/qdp/docs` automatically.
+
+### Documentation Workflow
+
+1. Edit documentation in the `/docs` directory (not `website-new/docs`)
+2. Run `npm run sync` in `website-new/` to update the website docs
+3. The sync runs automatically during `npm run start` and `npm run build`
+
+### Creating a Version Snapshot
+
+When releasing a new version, snapshot the current documentation:
+
+```bash
+cd website-new
+npm run docusaurus docs:version X.Y
+```
+
+## 4. Project Structure
 
 - `qumat/` - Core library code
 - `qdp/` - QDP (Quantum Data Plane)
-- `docs/` - Documentation
+- `docs/` - Documentation (source of truth)
 - `examples/` - Examples and Jupyter notebooks
 - `testing/` - Test files (using pytest)
-- `website/` - Website source code (using Jekyll)
+- `website-new/` - Website source code (using Docusaurus)
diff --git a/website/about/how-to-contribute.md b/docs/about/how-to-contribute.md
similarity index 89%
copy from website/about/how-to-contribute.md
copy to docs/about/how-to-contribute.md
index b0eda2a92..aaa73e82f 100644
--- a/website/about/how-to-contribute.md
+++ b/docs/about/how-to-contribute.md
@@ -1,6 +1,6 @@
 ---
-layout: page
 title: How To Contribute
+sidebar_label: How To Contribute
 ---
 
 # How to contribute
@@ -12,7 +12,7 @@ of ways to contribute!
 <a name="HowToContribute-BeInvolved"></a>
 ## Get Involved
 
-Discussions at Apache happen on the mailing list. To get involved, you should join the [Mahout mailing lists](/community/mailing-lists.html).  In particular:
+Discussions at Apache happen on the mailing list. To get involved, you should join the [Mahout mailing lists](/docs/community/mailing-lists).  In particular:
 
 * The **user list** (to help others)
 * The **development list** (to join discussions of changes)  -- This is the best place
@@ -50,7 +50,7 @@ to this website, and we have a [guide for making website updates][2].
 We also have a [wide variety of books and slides][3] for learning more about
 machine learning algorithms.
 
-If you are interested in working towards being a committer, [general guidelines are available online](/documentation/developers/how-to-become-a-committer.html).
+If you are interested in working towards being a committer, general guidelines are available in the [Apache Community documentation](https://community.apache.org/contributors/).
 
 <a name="HowToContribute-ContributingCode(Features,BigFixes,Tests,etc...)"></a>
 ## Contributing Code (Features, Big Fixes, Tests, etc...)
@@ -76,19 +76,19 @@ and possibly improve it.
 <a name="HowToContribute-Gettingthesourcecode"></a>
 ## Getting the source code
 
-First of all, you need to get the [Mahout source code](/documentation/developers/version-control.html). Most development is done on the "trunk".  Mahout mirrors its codebase on [GitHub](https://github.com/apache/mahout). The first step to making a contribution is to fork Mahout's master branch to your GitHub repository.
+First of all, you need to get the Mahout source code from [GitHub](https://github.com/apache/mahout). Most development is done on the "main" branch. The first step to making a contribution is to fork Mahout's main branch to your GitHub repository.
 
 
 <a name="HowToContribute-MakingChanges"></a>
 ## Making Changes
 
-Before you start, you should send a message to the [Mahout developer mailing list](/community/mailing-lists.html)
-(note: you have to subscribe before you can post), or file a ticket in  our [issue tracker](/documentation/developers/issue-tracker.html).
+Before you start, you should send a message to the [Mahout developer mailing list](/docs/community/mailing-lists)
+(note: you have to subscribe before you can post), or file a ticket in our [issue tracker](https://issues.apache.org/jira/browse/MAHOUT).
 Describe your proposed changes and check that they fit in with what others are doing and have planned for the project.  Be patient, it may take folks a while to understand your requirements.
 
- 1. Create a JIRA Issue (if one does not already exist or you haven't already)
+ 1. Create a JIRA Issue in the [issue tracker](https://issues.apache.org/jira/browse/MAHOUT) (if one does not already exist)
  2. Pull the code from your GitHub repository
- 3. Ensure that you are working with the latest code from the [apache/mahout](https://github.com/apache/mahout) master branch.
+ 3. Ensure that you are working with the latest code from the [apache/mahout](https://github.com/apache/mahout) main branch.
  3. Modify the source code and add some (very) nice features.
      - Be sure to adhere to the following points:
          - All public classes and methods should have informative Javadoc
@@ -144,7 +144,7 @@ for improvement (more tests, better javadocs, etc...) then make the changes on y
 thumbs up, that's a good sign for committers when deciding if it's worth spending time to review it -- and if other people have already put in
 effort to improve the docs/tests for an issue, that helps even more.
 
-For more information see [Handling GitHub PRs](http://mahout.apache.org/documentation/developers/github.html).
+For more information see [Handling GitHub PRs](http://mahout.apache.org/documentation/developers/github).
 
 
   [1]: http://www.apache.org/dev/contrib-email-tips
diff --git a/docs/adr/001-jekyll-to-docusaurus-migration.md b/docs/adr/001-jekyll-to-docusaurus-migration.md
new file mode 100644
index 000000000..407119a4e
--- /dev/null
+++ b/docs/adr/001-jekyll-to-docusaurus-migration.md
@@ -0,0 +1,153 @@
+---
+title: "ADR-001: Jekyll to Docusaurus Migration"
+sidebar_label: "ADR-001: Jekyll to Docusaurus"
+---
+
+<!--
+ 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.
+-->
+
+# ADR-001: Jekyll to Docusaurus Migration
+
+## Status
+
+Accepted
+
+## Date
+
+2026-01-22
+
+## Context
+
+The Apache Mahout website was built using Jekyll 4.3.2 with Bootstrap 5, MathJax 3 for math rendering, and Kramdown for Markdown processing. As the project evolved with the introduction of Qumat (quantum computing capabilities), we needed to evaluate our documentation infrastructure.
+
+### Problems with Jekyll
+
+1. **Ruby ecosystem maintenance** - Managing Ruby/Bundler dependencies and versions adds complexity
+2. **Limited interactivity** - Jekyll is purely static; no React components for dynamic content
+3. **Documentation versioning** - No built-in support for multi-version documentation
+4. **Developer experience** - Hot reload and local development workflows are slower
+5. **Documentation sync** - No standard pattern for syncing `/docs` with website content
+
+### Requirements
+
+- Documentation versioning for Qumat releases (0.4, 0.5, etc.)
+- Math/LaTeX support for quantum computing documentation
+- `/docs` directory as source of truth for documentation
+- Fast local development with hot reload
+- React components for enhanced interactivity
+- Modern JavaScript tooling (Node.js ecosystem)
+
+## Decision
+
+Migrate from Jekyll to **Docusaurus 3.x** with the following configuration:
+
+### Technology Choices
+
+| Component | Decision | Rationale |
+|-----------|----------|-----------|
+| Framework | Docusaurus 3.x | Active development, React-based, built-in versioning |
+| Math rendering | KaTeX | Faster than MathJax, lighter bundle size, covers 95%+ use cases |
+| Migration approach | New directory (`website-new/`) | Safe migration, can keep Jekyll during transition |
+| Versioning | Enabled from start | Supports Qumat release cycle |
+
+### Architecture
+
+```
+website-new/
+├── docusaurus.config.ts      # Main configuration
+├── sidebars.ts               # Sidebar navigation
+├── package.json
+├── scripts/
+│   └── sync-docs.js          # Syncs /docs → website-new/docs
+├── docs/                     # Current version (synced from /docs)
+├── versioned_docs/           # Previous versions (snapshots)
+│   └── version-0.4/
+├── versions.json             # Version manifest
+├── blog/                     # Migrated from Jekyll _posts
+├── src/
+│   ├── components/           # React components
+│   ├── css/custom.css        # Theme customizations
+│   └── pages/index.tsx       # Custom homepage
+└── static/                   # Images and assets
+```
+
+### Documentation Sync Workflow
+
+The `/docs` directory at the repository root is the source of truth. A sync script copies documentation to the website at build time:
+
+1. `npm run sync` - Copies `/docs` and `/qdp/docs` to `website-new/docs/`
+2. Transforms frontmatter as needed
+3. Runs automatically before `npm run build` and `npm run start`
+
+This pattern allows:
+- Documentation to live alongside code
+- Website to always reflect latest `/docs`
+- Version snapshots to preserve historical documentation
+
+### Versioning Strategy
+
+- `current` (0.5-dev): Active development, synced from `/docs`
+- `0.4`: First stable snapshot, frozen documentation
+
+To create a new version:
+```bash
+npm run docusaurus docs:version X.Y
+```
+
+## Consequences
+
+### Positive
+
+1. **Versioned documentation** - Users can view docs for their specific Qumat version
+2. **Faster builds** - Node.js build pipeline is faster than Jekyll
+3. **React components** - Can add interactive examples, code playgrounds
+4. **Better DX** - Fast hot reload, TypeScript support, modern tooling
+5. **KaTeX performance** - Math rendering is 10x faster than MathJax
+6. **Active community** - Docusaurus has strong Meta backing and active maintenance
+
+### Negative
+
+1. **Learning curve** - Team needs to learn React/Docusaurus patterns
+2. **Migration effort** - One-time cost to migrate all content
+3. **KaTeX limitations** - Some advanced MathJax features may not work (rare edge cases)
+
+### Neutral
+
+1. **Bundle size** - Slightly larger JavaScript bundle, but better caching
+2. **CI/CD changes** - GitHub Actions updated from Ruby to Node.js
+
+## Implementation Notes
+
+### Key Files Changed
+
+- `.github/workflows/website.yml` - Now uses Node.js instead of Ruby
+- `website-new/docusaurus.config.ts` - Main Docusaurus configuration
+- `website-new/scripts/sync-docs.js` - Documentation sync script
+- `website-new/src/components/WaveAnimation/` - Ported hero animation
+
+### Redirect Strategy
+
+Client-side redirects handle old Jekyll URLs:
+- `/news.html` → `/blog`
+
+Additional redirects can be added to `docusaurus.config.ts` as needed.
+
+## References
+
+- [Docusaurus documentation](https://docusaurus.io/)
+- [KaTeX supported functions](https://katex.org/docs/supported.html)
+- [GitHub discussion](https://github.com/apache/mahout/discussions/) (original proposal)
diff --git a/docs/adr/DOCUSAURUS_MIGRATION_PLAN.md b/docs/adr/DOCUSAURUS_MIGRATION_PLAN.md
new file mode 100644
index 000000000..04fc876d4
--- /dev/null
+++ b/docs/adr/DOCUSAURUS_MIGRATION_PLAN.md
@@ -0,0 +1,492 @@
+# Jekyll to Docusaurus Migration Plan
+
+## Overview
+
+Migrate the Apache Mahout website from Jekyll 4.3.2 to Docusaurus 3.x, implementing a documentation sync workflow where `/docs` is the source of truth.
+
+## Current State
+
+| Component | Current Technology |
+|-----------|-------------------|
+| Framework | Jekyll 4.3.2 (Ruby) |
+| Styling | Bootstrap 5 + custom SCSS |
+| Math | MathJax 3 (self-hosted) |
+| Markdown | Kramdown |
+| Hosting | ASF infrastructure via `asf-site` branch |
+| CI/CD | GitHub Actions |
+
+**Content inventory:**
+- 51 blog posts in `/website/_posts/`
+- 22+ Qumat documentation pages in `/website/qumat/`
+- 8 markdown files in `/docs/` (proposed source of truth)
+- 4 papers in `/website/_papers/`
+- 3 QDP docs in `/qdp/docs/`
+
+## Decision Summary
+
+| Decision | Choice |
+|----------|--------|
+| Math rendering | KaTeX (faster, lighter) |
+| Migration approach | New directory (`website-new/`) then rename |
+| Documentation versioning | Enabled from start |
+
+## Target Architecture
+
+```
+website-new/                    # During migration (rename to website/ after)
+├── docusaurus.config.js       # Main configuration
+├── sidebars.js                # Sidebar configuration
+├── package.json
+├── scripts/
+│   └── sync-docs.js           # Syncs /docs → website-new/docs
+├── docs/                      # Current version (synced from /docs)
+├── versioned_docs/            # Previous versions
+│   └── version-0.4/           # Snapshot of v0.4 docs
+├── versioned_sidebars/        # Sidebars for each version
+├── versions.json              # Version manifest
+├── blog/                      # Migrated from _posts
+├── src/
+│   ├── components/            # React components (navbar, footer, hero)
+│   ├── css/custom.css         # Migrated styles
+│   └── pages/index.js         # Custom homepage
+└── static/                    # Images, API docs, vendor assets
+```
+
+## Implementation Phases
+
+### Phase 1: Foundation Setup
+
+**Tasks:**
+1. Initialize Docusaurus 3.x project in `/website-new/`
+2. Configure `docusaurus.config.js`:
+   - Site metadata (title, URL, baseUrl)
+   - Theme colors (primary: `#00bcd4`)
+   - Math support via KaTeX (remark-math + rehype-katex)
+   - Versioning configuration (current = 0.5-dev, initial snapshot = 0.4)
+3. Create `scripts/sync-docs.js` based on gofannon pattern:
+   - Copy markdown from `/docs` → `website-new/docs/`
+   - Transform frontmatter (Jekyll → Docusaurus format)
+   - Handle relative link transformations
+4. Set up `package.json` with sync integration:
+   ```json
+   "scripts": {
+     "sync": "node scripts/sync-docs.js",
+     "prebuild": "npm run sync",
+     "start": "npm run sync && docusaurus start",
+     "version": "docusaurus docs:version"
+   }
+   ```
+5. Create initial version snapshot for v0.4 (current stable)
+
+**Files to create:**
+- `website-new/docusaurus.config.js`
+- `website-new/sidebars.js`
+- `website-new/package.json`
+- `website-new/scripts/sync-docs.js`
+- `website-new/versions.json`
+
+### Phase 2: Content Migration
+
+**Tasks:**
+1. Migrate static assets from `/website/assets/` → `website-new/static/`
+2. Create blog post migration script (`scripts/migrate-posts.js`):
+   - Transform Jekyll frontmatter to Docusaurus format
+   - Convert `category` → `tags`
+   - Preserve dates and content
+3. Run migration for all 51 blog posts
+4. Migrate papers collection to custom pages or docs section
+5. Configure sidebar structure in `sidebars.js`
+
+**Frontmatter transformation:**
+```yaml
+# Jekyll (before)                    # Docusaurus (after)
+layout: post                         title: Example Post
+title: Example Post          →       date: 2025-04-17
+date: 2025-04-17                     tags: [news]
+category: news                       authors: [mahout-team]
+```
+
+### Phase 3: Layout & Styling
+
+**Tasks:**
+1. Migrate navbar structure to `docusaurus.config.js`:
+   - About dropdown
+   - Qumat dropdown (Core, QDP, Primer, Papers)
+   - Download, Community, News links
+   - GitHub icon
+2. Create custom homepage component (`src/pages/index.js`):
+   - Hero section with gradient background
+   - Feature cards
+   - Download CTA
+3. Migrate SCSS to CSS custom properties in `src/css/custom.css`:
+   ```css
+   :root {
+     --ifm-color-primary: #00bcd4;
+     --ifm-font-family-base: 'Muli', sans-serif;
+   }
+   ```
+4. Configure footer with ASF copyright
+
+**Key files to reference:**
+- `/website/_includes/navbar.html` → navbar config
+- `/website/_sass/mahout.scss` → CSS variables
+- `/website/_layouts/home.html` → homepage structure
+
+### Phase 4: Documentation Integration
+
+**Tasks:**
+1. Verify sync workflow copies all `/docs` content correctly
+2. Integrate QDP documentation from `/qdp/docs/`
+3. Migrate existing `/website/qumat/` documentation
+4. Configure Quantum Computing Primer sidebar navigation
+5. Test all internal documentation links
+6. Verify LaTeX/math rendering in all docs (e.g., `basic_gates.md`)
+
+### Phase 5: Deployment & Cutover
+
+**Tasks:**
+1. Update GitHub Actions workflow (`.github/workflows/website.yml`):
+   ```yaml
+   - uses: actions/setup-node@v4
+     with:
+       node-version: '18'
+   - run: npm ci
+     working-directory: website-new
+   - run: npm run build
+     working-directory: website-new
+   - name: Deploy to asf-site
+     run: |
+       git config user.name "GitHub Actions Bot"
+       git config user.email "<>"
+       git checkout asf-site
+       rm -rf *
+       cp -r website-new/build/* .
+       git add .
+       git commit -m "Automatic Site Publish by Buildbot"
+       git push
+   ```
+2. Configure URL redirects using `@docusaurus/plugin-client-redirects`:
+   - `/news.html` → `/blog`
+   - Handle `.html` extension removal
+3. Run link checker on built site
+4. Test deployment to `asf-site` branch
+5. Rename `website-new/` → `website/` (archive old Jekyll site)
+
+### Phase 6: Documentation & Cleanup
+
+**Tasks:**
+1. Create ADR at `/docs/adr/001-jekyll-to-docusaurus-migration.md`
+2. Update `CONTRIBUTING.md` with new website development instructions
+3. Remove old Jekyll configuration files
+4. Update README with new local development commands
+
+## Versioning Configuration
+
+Docusaurus versioning will be configured to support multiple documentation versions:
+
+**Initial setup:**
+```javascript
+// docusaurus.config.js
+docs: {
+  lastVersion: 'current',
+  versions: {
+    current: {
+      label: '0.5-dev',
+      path: '',
+    },
+    '0.4': {
+      label: '0.4',
+      path: '0.4',
+    },
+  },
+}
+```
+
+**Creating a new version:**
+```bash
+npm run docusaurus docs:version 0.4
+```
+This snapshots the current `/docs` to `/versioned_docs/version-0.4/`.
+
+**Version workflow:**
+1. `/docs` always contains the "next" (development) version
+2. When releasing, run `docs:version X.Y` to snapshot
+3. Users can switch versions via dropdown in navbar
+4. Sync script only updates current `/docs`, versioned docs are static snapshots
+
+## Sync Script Design
+
+Based on the [gofannon sync_docs.py](https://github.com/The-AI-Alliance/gofannon/blob/2eaf7d22a80f4ed8794c02b074ccda137b51ea0b/website/scripts/sync_docs.py) reference, the sync script will:
+
+```javascript
+// scripts/sync-docs.js
+const SYNC_SOURCES = [
+  { source: '../docs', dest: './docs', prefix: '' },
+  { source: '../qdp/docs', dest: './docs/qdp', prefix: 'qdp/' },
+];
+
+// For each source:
+// 1. Clean destination directory
+// 2. Copy markdown files recursively
+// 3. Transform frontmatter (add sidebar_position, remove layout)
+// 4. Convert relative links to Docusaurus format
+// 5. Copy associated assets (images)
+```
+
+## URL Preservation Strategy
+
+| Content | Old URL | New URL | Redirect |
+|---------|---------|---------|----------|
+| Homepage | `/` | `/` | None |
+| Blog listing | `/news.html` | `/blog` | Yes |
+| Blog posts | `/YYYY/MM/DD/title.html` | `/blog/YYYY/MM/DD/title` | Automatic |
+| Qumat docs | `/qumat/core/` | `/docs/qumat/core` | Yes |
+| Papers | `/qumat/papers/:name/` | `/docs/papers/:name` | Yes |
+
+## Verification Checklist
+
+- [ ] All 51 blog posts migrated and rendering correctly
+- [ ] Math/LaTeX displays properly via KaTeX (test with `basic_gates.md`)
+- [ ] Navbar matches current structure with version dropdown
+- [ ] Homepage hero section renders
+- [ ] Sync script copies `/docs` content on build
+- [ ] Version switching works (0.4 ↔ 0.5-dev)
+- [ ] All internal links resolve in both versions
+- [ ] Redirects work for old URLs
+- [ ] GitHub Actions deploys successfully to `asf-site`
+- [ ] Lighthouse performance score > 90
+- [ ] `website-new/` renamed to `website/` and old Jekyll archived
+
+## Key Dependencies
+
+```json
+{
+  "@docusaurus/core": "^3.0.0",
+  "@docusaurus/preset-classic": "^3.0.0",
+  "@docusaurus/plugin-client-redirects": "^3.0.0",
+  "remark-math": "^3.0.0",
+  "rehype-katex": "^5.0.0"
+}
+```
+
+## Risk Mitigation
+
+| Risk | Mitigation |
+|------|------------|
+| Broken links | Run link checker in CI, comprehensive redirects |
+| Math rendering differences | Test all LaTeX content; KaTeX covers 95%+ of MathJax syntax. Audit `basic_gates.md` and quantum primer for edge cases. |
+| SEO impact | Maintain URL structure, proper 301 redirects, sitemap |
+| Content loss | Keep Jekyll site archived in git history until migration verified |
+| Versioning complexity | Start with just 0.4 + current; add versions incrementally as releases happen |
+| Version URL changes | Configure `path` options to maintain clean URLs (`/docs/0.4/...`) |
+
+## Architecture Decision Record (ADR)
+
+An ADR should be created at `/docs/adr/001-jekyll-to-docusaurus-migration.md` documenting:
+
+- **Status:** Accepted
+- **Context:** Current Jekyll setup challenges (Ruby dependency management, manual doc sync, limited modern features)
+- **Decision:** Migrate to Docusaurus 3.x with sync workflow
+- **Rationale:** React-based, built-in versioning/search, purpose-built for technical docs, active community
+- **Consequences:** Initial migration effort, team learns React/Docusaurus, but simplified long-term maintenance
+
+---
+
+## Work Log - January 22, 2026
+
+### Session 1: Initial Docusaurus Setup & Content Migration
+
+**Completed Tasks:**
+
+1. **Initialized Docusaurus 3.x project** in `/website-new/`
+   - Created `docusaurus.config.ts` with TypeScript
+   - Configured KaTeX for math rendering (remark-math + rehype-katex)
+   - Set up navbar with dropdowns (About, Qumat, Download, Community, News)
+   - Configured footer with ASF copyright
+   - Added Prism syntax highlighting for Python, Java, Scala, Rust, Bash
+
+2. **Created documentation sync script** (`scripts/sync-docs.js`)
+   - Syncs markdown from `/docs` to `website-new/docs/`
+   - Transforms Jekyll frontmatter to Docusaurus format
+   - Removes `layout:` field, preserves titles
+   - Handles link transformations (removes `.md` extensions)
+
+3. **Migrated blog posts** (51 posts)
+   - Created `scripts/migrate-posts.js`
+   - Transformed Jekyll frontmatter (`category` → `tags`)
+   - Preserved dates and content
+   - Fixed MDX parsing issues with `markdown: { format: 'detect' }`
+
+4. **Created WaveAnimation component** (`src/components/WaveAnimation/`)
+   - Ported jQuery sine wave animation to React
+   - Canvas-based animation matching original Jekyll site hero
+   - Responsive sizing
+
+5. **Built custom homepage** (`src/pages/index.tsx`)
+   - Hero section with wave animation and gradient background
+   - Mahout logo (120px) and ASF logo (100px)
+   - Download button and version text
+   - Sidebar with release info, ASF links, and talks
+
+6. **Migrated static assets**
+   - Logos: `mahout-logo-white.svg`, `mahout-logo-blue.svg`, `asf_new_logo.svg`
+   - Mascot image: `mascot_with_text.png`
+   - Favicon
+
+7. **Updated GitHub Actions workflow** (`.github/workflows/website.yml`)
+   - Changed from Ruby/Jekyll to Node.js 20/Docusaurus
+   - Added path triggers for `website-new/`, `docs/`, `qdp/docs/`
+   - Deploy to `asf-site` branch
+
+8. **Configured URL redirects**
+   - `/news.html` → `/blog`
+   - `/news` → `/blog`
+
+9. **Created ADR document** (`/docs/adr/001-jekyll-to-docusaurus-migration.md`)
+   - Documented migration rationale and decisions
+   - Architecture overview
+   - Versioning strategy
+
+10. **Updated CONTRIBUTING.md**
+    - Added website development instructions
+    - Documented sync workflow
+    - Added version snapshot instructions
+
+### Session 2: Documentation Restructuring
+
+**Problem Identified:**
+The initial migration created a fragmented structure:
+- `/docs/` at root had only 8 sparse API files
+- `/website/qumat/` had 22+ documentation pages
+- `/website-new/docs/` had mixed content from multiple sources
+- No clear source of truth
+
+**Solution Implemented:**
+
+1. **Restructured `/docs/` as single source of truth**
+
+   New structure:
+   ```
+   /docs/
+   ├── index.md                     # Main Qumat overview
+   ├── api.md                       # API reference
+   ├── basic-gates.md               # Gates documentation
+   ├── getting-started.md           # Getting started guide
+   ├── getting-started-with-qumat.md
+   ├── parameterized-circuits.md    # PQC guide
+   ├── pqc.md                       # In-depth PQC
+   ├── qumat-gap-analysis-for-pqc.md
+   ├── adr/
+   │   └── 001-jekyll-to-docusaurus-migration.md
+   ├── qdp/                         # QDP package docs
+   │   ├── observability.md
+   │   ├── readers.md
+   │   └── testing.md
+   └── qumat/
+       ├── index.md
+       ├── core/
+       │   ├── index.md
+       │   ├── api.md
+       │   ├── concepts.md
+       │   ├── examples.md
+       │   └── getting-started.md
+       ├── qdp/
+       │   ├── index.md
+       │   ├── api.md
+       │   ├── concepts.md
+       │   ├── examples.md
+       │   └── getting-started.md
+       ├── quantum-computing-primer/
+       │   ├── index.md
+       │   ├── introduction.md
+       │   ├── qubits.md
+       │   ├── quantum-gates.md
+       │   ├── quantum-circuits.md
+       │   ├── quantum-entanglement.md
+       │   ├── quantum-algorithms.md
+       │   ├── quantum-error-correction.md
+       │   ├── applications.md
+       │   └── advanced-topics.md
+       └── papers/
+           ├── index.md
+           └── [4 paper summaries]
+   ```
+
+2. **Moved content from multiple sources:**
+   - `/website/qumat/` → `/docs/qumat/`
+   - `/website/_papers/` → `/docs/qumat/papers/`
+   - `/qdp/docs/` → `/docs/qdp/`
+
+3. **Renamed files to kebab-case:**
+   - `basic_gates.md` → `basic-gates.md`
+   - `getting_started.md` → `getting-started.md`
+   - `parameterized_circuits.md` → `parameterized-circuits.md`
+   - `p_q_c.md` → `pqc.md`
+   - Primer chapters: `01_introduction/index.md` → `introduction.md`
+
+4. **Moved all content to `/docs/`:**
+   - `community/` moved from `website-new/docs/` to `/docs/`
+   - `about/` moved from `website-new/docs/` to `/docs/`
+   - `download/` moved from `website-new/docs/` to `/docs/`
+   - `website-new/docs/` is now 100% synced (build artifact, gitignored)
+
+5. **Updated sync script** (`scripts/sync-docs.js`):
+   - Single source: syncs ALL content from `/docs/`
+   - Only preserves `.gitignore` during clean
+   - No longer syncs from `/qdp/docs/` separately (content moved to `/docs/qdp/`)
+
+6. **Deleted old version snapshot:**
+   - Removed `versioned_docs/version-0.4/` (based on old messy structure)
+   - Removed `versions.json`
+   - Updated `docusaurus.config.ts` to remove 0.4 version config
+
+7. **Verified build succeeds:**
+   - `npm run sync` - Synced 40 files, 8 directories
+   - `npm run build` - SUCCESS with broken link warnings
+   - Broken links are due to incorrect paths in source docs (e.g., `/qumat/core` should be `./core`)
+
+### Current State
+
+| Component | Status |
+|-----------|--------|
+| Docusaurus setup | ✅ Complete |
+| Blog migration (51 posts) | ✅ Complete |
+| Homepage with wave animation | ✅ Complete |
+| `/docs/` restructured | ✅ Complete |
+| Sync script | ✅ Complete |
+| GitHub Actions | ✅ Complete |
+| ADR document | ✅ Complete |
+| Build | ✅ Succeeds |
+
+### Remaining Work
+
+1. **Fix broken internal links in `/docs/`:**
+   - Links like `/qumat/core` should be `./core` (relative)
+   - Primer links like `01_introduction/` should be `./introduction`
+
+2. **Create version 0.4 snapshot** (after links are fixed):
+   ```bash
+   npm run docusaurus docs:version 0.4
+   ```
+
+3. **Final cutover:**
+   - Test deployment to `asf-site` branch
+   - Rename `website-new/` → `website/`
+   - Archive old Jekyll site
+
+### Files Created/Modified Today
+
+| File | Action |
+|------|--------|
+| `/docs/qumat/**` | Created - moved from /website/qumat/ |
+| `/docs/qdp/**` | Created - moved from /qdp/docs/ |
+| `/docs/*.md` | Renamed to kebab-case |
+| `website-new/scripts/sync-docs.js` | Updated - new sync logic |
+| `website-new/docusaurus.config.ts` | Updated - removed 0.4 version |
+| `website-new/docs/` | Build artifact - 100% synced, gitignored |
+| `/docs/community/` | Moved from website-new/docs/ |
+| `/docs/about/` | Moved from website-new/docs/ |
+| `/docs/download/` | Moved from website-new/docs/ |
+| `.github/workflows/website.yml` | Updated - Node.js/Docusaurus |
+| `CONTRIBUTING.md` | Updated - website dev instructions |
+| `/docs/adr/001-jekyll-to-docusaurus-migration.md` | Created |
diff --git a/docs/basic_gates.md b/docs/basic-gates.md
similarity index 56%
copy from docs/basic_gates.md
copy to docs/basic-gates.md
index 61e74286c..803e36370 100644
--- a/docs/basic_gates.md
+++ b/docs/basic-gates.md
@@ -1,25 +1,24 @@
 # Quantum Gate Explanations
 
 ## NOT Gate (X-Gate)
-The NOT gate, also called the **Pauli X Gate**, is a fundamental quantum gate used to flip the state of a qubit. It is often referred to as a bit-flip gate. When applied to a qubit in the |0⟩ state, it changes it to the |1⟩ state, and vice versa. Mathematically, if |ψ⟩ represents the qubit's state, applying the X-gate results in:
+The NOT gate, also called the **Pauli X Gate**, is a fundamental quantum gate used to flip the state of a qubit. It is often referred to as a bit-flip gate. When applied to a qubit in the $|0\rangle$ state, it changes it to the $|1\rangle$ state, and vice versa. Mathematically, if $|\psi\rangle$ represents the qubit's state, applying the X-gate results in:
 
-\[ X|ψ⟩ = |¬ψ⟩ \]
+$$X|\psi\rangle = |\neg\psi\rangle$$
 
 ## Hadamard Gate (H-Gate)
-The Hadamard gate, denoted as the H-gate, is used to create superposition states. When applied to a qubit in the |0⟩ state, it transforms it into an equal superposition of |0⟩ and |1⟩ states. Mathematically:
+The Hadamard gate, denoted as the H-gate, is used to create superposition states. When applied to a qubit in the $|0\rangle$ state, it transforms it into an equal superposition of $|0\rangle$ and $|1\rangle$ states. Mathematically:
 
-
-\[ $H|0⟩ = \frac{(|0⟩ + |1⟩)}{√2}$ \]
+$$H|0\rangle = \frac{|0\rangle + |1\rangle}{\sqrt{2}}$$
 
 
 
 This gate is crucial in quantum algorithms like Grover's and quantum teleportation.
 
 ## CNOT Gate (Controlled-X Gate)
-The CNOT gate, or controlled-X gate, is an entangling gate that acts on two qubits: a control qubit and a target qubit. If the control qubit is in the |1⟩ state, it applies the X-gate to the target qubit; otherwise, it does nothing. It creates entanglement between the two qubits and is essential in building quantum circuits for various applications.
+The CNOT gate, or controlled-X gate, is an entangling gate that acts on two qubits: a control qubit and a target qubit. If the control qubit is in the $|1\rangle$ state, it applies the X-gate to the target qubit; otherwise, it does nothing. It creates entanglement between the two qubits and is essential in building quantum circuits for various applications.
 
 ## Toffoli Gate (Controlled-Controlled-X Gate)
-The Toffoli gate is a three-qubit gate that acts as a controlled-controlled-X gate. It applies the X-gate to the target qubit only if both control qubits are in the |1⟩ state. It is used in quantum computing for implementing reversible classical logic operations.
+The Toffoli gate is a three-qubit gate that acts as a controlled-controlled-X gate. It applies the X-gate to the target qubit only if both control qubits are in the $|1\rangle$ state. It is used in quantum computing for implementing reversible classical logic operations.
 
 ## SWAP Gate
 The SWAP gate exchanges the states of two qubits. When applied, it swaps the state of the first qubit with the state of the second qubit. This gate is fundamental in quantum algorithms and quantum error correction codes.
@@ -27,52 +26,52 @@ The SWAP gate exchanges the states of two qubits. When applied, it swaps the sta
 ## Pauli Y Gate (Y-Gate)
 The Pauli Y gate introduces complex phase shifts along with a bit-flip operation. It can be thought of as a combination of bit-flip and phase-flip gates. Mathematically:
 
-\[ Y|0⟩ = i|1⟩ \]
-\[ Y|1⟩ = -i|0⟩ \]
+$$Y|0\rangle = i|1\rangle$$
+$$Y|1\rangle = -i|0\rangle$$
 
 It's essential in quantum error correction and quantum algorithms.
 
 ## Pauli Z Gate (Z-Gate)
-The Pauli Z gate introduces a phase flip without changing the qubit's state. It leaves |0⟩ unchanged and transforms |1⟩ to -|1⟩. Mathematically:
+The Pauli Z gate introduces a phase flip without changing the qubit's state. It leaves $|0\rangle$ unchanged and transforms $|1\rangle$ to $-|1\rangle$. Mathematically:
 
-\[ Z|0⟩ = |0⟩ \]
-\[ Z|1⟩ = -|1⟩ \]
+$$Z|0\rangle = |0\rangle$$
+$$Z|1\rangle = -|1\rangle$$
 
 It's used for measuring the phase of a qubit.
 
 ## T-Gate (π/8 Gate)
 The T-Gate applies a **π/4 phase shift** to the qubit. It is essential for quantum computing because it, along with the Hadamard and CNOT gates, allows for **universal quantum computation**. Mathematically:
 
-\[ T|0⟩ = |0⟩ \]
-\[ T|1⟩ = e^{i\pi/4} |1⟩ \]
+$$T|0\rangle = |0\rangle$$
+$$T|1\rangle = e^{i\pi/4} |1\rangle$$
 
 ## CSWAP Gate (Controlled-SWAP / Fredkin Gate)
-The CSWAP gate, also known as the **Fredkin gate**, is a three-qubit gate that conditionally swaps the states of two target qubits based on the state of a control qubit. If the control qubit is in the |1⟩ state, it swaps the states of the two target qubits; otherwise, it leaves them unchanged.
+The CSWAP gate, also known as the **Fredkin gate**, is a three-qubit gate that conditionally swaps the states of two target qubits based on the state of a control qubit. If the control qubit is in the $|1\rangle$ state, it swaps the states of the two target qubits; otherwise, it leaves them unchanged.
 
 ### Mathematical Definition
 
-The CSWAP gate acts on three qubits: a control qubit |c⟩ and two target qubits |t₁⟩ and |t₂⟩. The operation is:
+The CSWAP gate acts on three qubits: a control qubit $|c\rangle$ and two target qubits $|t_1\rangle$ and $|t_2\rangle$. The operation is:
 
-\[ \text{CSWAP}|c\rangle|t_1\rangle|t_2\rangle = \begin{cases} |c\rangle|t_1\rangle|t_2\rangle & \text{if } c = 0 \\ |c\rangle|t_2\rangle|t_1\rangle & \text{if } c = 1 \end{cases} \]
+$$\text{CSWAP}|c\rangle|t_1\rangle|t_2\rangle = \begin{cases} |c\rangle|t_1\rangle|t_2\rangle & \text{if } c = 0 \\ |c\rangle|t_2\rangle|t_1\rangle & \text{if } c = 1 \end{cases}$$
 
 In matrix form (for the 8-dimensional space of three qubits), the CSWAP gate is:
 
-\[ \text{CSWAP} = \begin{pmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \end{pmatrix} \]
+$$\text{CSWAP} = \begin{pmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \end{pmatrix}$$
 
-The CSWAP gate is fundamental in quantum algorithms such as the swap test, quantum error correction, and quantum state comparison. The CSWAP gate is reversible and preserves the number of |1⟩ states in the system (conserves the Hamming weight).
+The CSWAP gate is fundamental in quantum algorithms such as the swap test, quantum error correction, and quantum state comparison. The CSWAP gate is reversible and preserves the number of $|1\rangle$ states in the system (conserves the Hamming weight).
 
 ## U Gate (Universal Single-Qubit Gate)
-The U gate is a **universal single-qubit gate** parameterized by three angles (θ, φ, λ) that can represent any single-qubit unitary operation. It provides a complete parameterization of single-qubit rotations and is essential for implementing arbitrary quantum operations.
+The U gate is a **universal single-qubit gate** parameterized by three angles ($\theta$, $\phi$, $\lambda$) that can represent any single-qubit unitary operation. It provides a complete parameterization of single-qubit rotations and is essential for implementing arbitrary quantum operations.
 
 ### Mathematical Definition
 
 The U gate matrix representation is:
 
-\[ U(\theta, \phi, \lambda) = \begin{pmatrix} \cos(\theta/2) & -e^{i\lambda}\sin(\theta/2) \\ e^{i\phi}\sin(\theta/2) & e^{i(\phi+\lambda)}\cos(\theta/2) \end{pmatrix} \]
+$$U(\theta, \phi, \lambda) = \begin{pmatrix} \cos(\theta/2) & -e^{i\lambda}\sin(\theta/2) \\ e^{i\phi}\sin(\theta/2) & e^{i(\phi+\lambda)}\cos(\theta/2) \end{pmatrix}$$
 
 The U gate can be decomposed into rotations around the Z, Y, and Z axes:
 
-\[ U(\theta, \phi, \lambda) = R_z(\phi) \cdot R_y(\theta) \cdot R_z(\lambda) \]
+$$U(\theta, \phi, \lambda) = R_z(\phi) \cdot R_y(\theta) \cdot R_z(\lambda)$$
 
 This decomposition shows that the U gate applies:
 1. A rotation by λ around the Z-axis
diff --git a/website/_posts/2017-12-20-new-website.md b/docs/blog/2017-12-20-new-website.md
similarity index 72%
rename from website/_posts/2017-12-20-new-website.md
rename to docs/blog/2017-12-20-new-website.md
index e1cf31748..a876d6ffb 100644
--- a/website/_posts/2017-12-20-new-website.md
+++ b/docs/blog/2017-12-20-new-website.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: New Website
-date:   2017-12-20 16:16:01 -0600
-category: news
+date: 2017-12-20
+tags: [news]
+authors: [mahout-team]
 ---
 
 We've launced a new website, (a HUUUGE special thanks to David Miller from [StartBootstrap.com](http://startbootstrap.com)).
@@ -10,4 +10,4 @@ We've launced a new website, (a HUUUGE special thanks to David Miller from [Star
 It looks great but there's lots to do as we migrate and clean up content from the old site. If you see anything broken,
 please let us know via either:
 - send an email to dev@mahout.apache.org
-- fix it yourself and [open a PR](/documentation/developers/githubPRs)!
+- fix it yourself and [open a PR](https://github.com/apache/mahout/pulls)!
diff --git a/website/_posts/2018-06-18-preping-014.md b/docs/blog/2018-06-18-preping-014.md
similarity index 94%
rename from website/_posts/2018-06-18-preping-014.md
rename to docs/blog/2018-06-18-preping-014.md
index fa2585043..f4e465dc2 100644
--- a/website/_posts/2018-06-18-preping-014.md
+++ b/docs/blog/2018-06-18-preping-014.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Preparing for version 14.1
-date:   2019-06-18 16:16:01 -0600
-category: news
+date: 2018-06-18
+tags: [news]
+authors: [mahout-team]
 ---
 
 Hey all!  We're preparing for Mahout version 14.1.
diff --git a/website/_posts/2019-12-14-version-14-1.md b/docs/blog/2019-12-14-version-14-1.md
similarity index 92%
rename from website/_posts/2019-12-14-version-14-1.md
rename to docs/blog/2019-12-14-version-14-1.md
index 4f7c74885..6d90c1da0 100644
--- a/website/_posts/2019-12-14-version-14-1.md
+++ b/docs/blog/2019-12-14-version-14-1.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Code Freeze and Wierd Numbering
-date:   2019-12-14 16:16:01 -0600
-category: news
+date: 2019-12-14
+tags: [news]
+authors: [mahout-team]
 ---
 
 
diff --git a/website/_posts/2020-10-18-version-14-1-released.md b/docs/blog/2020-10-18-version-14-1-released.md
similarity index 87%
rename from website/_posts/2020-10-18-version-14-1-released.md
rename to docs/blog/2020-10-18-version-14-1-released.md
index 2c8819b47..0dadf5dac 100644
--- a/website/_posts/2020-10-18-version-14-1-released.md
+++ b/docs/blog/2020-10-18-version-14-1-released.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: 14.1 Is Released!
-date:   2020-10-18 16:16:01 -0600
-category: news
+date: 2020-10-18
+tags: [news]
+authors: [mahout-team]
 ---
 
 Oh happy day! A lot of work went into this release with getting the build system to work again so that we can release
diff --git a/website/_posts/2020-10-30-weekly-meeting-minutes.md b/docs/blog/2020-10-30-weekly-meeting-minutes.md
similarity index 94%
rename from website/_posts/2020-10-30-weekly-meeting-minutes.md
rename to docs/blog/2020-10-30-weekly-meeting-minutes.md
index cd19459c1..d7056c357 100644
--- a/website/_posts/2020-10-30-weekly-meeting-minutes.md
+++ b/docs/blog/2020-10-30-weekly-meeting-minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Weekly Meeting Minutes 2020-10-30
-date:   2020-10-30 13:00:01 -0600
-category: minutes
+date: 2020-10-30
+tags: [minutes]
+authors: [mahout-team]
 ---
 
 ### Topic: Apache Mahout Wikipedia Page
diff --git a/website/_posts/2020-11-13-weekly-meeting-minutes.md b/docs/blog/2020-11-13-weekly-meeting-minutes.md
similarity index 93%
rename from website/_posts/2020-11-13-weekly-meeting-minutes.md
rename to docs/blog/2020-11-13-weekly-meeting-minutes.md
index d5b401008..154919a71 100644
--- a/website/_posts/2020-11-13-weekly-meeting-minutes.md
+++ b/docs/blog/2020-11-13-weekly-meeting-minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Weekly Meeting Minutes 2020-11-13
-date:   2020-11-13 12:00:01 -0600
-category: minutes
+date: 2020-11-13
+tags: [minutes]
+authors: [mahout-team]
 ---
 
 Weekly community meeting minutes.
diff --git a/website/_posts/2020-11-20-weekly-meeting-minutes.md b/docs/blog/2020-11-20-weekly-meeting-minutes.md
similarity index 70%
rename from website/_posts/2020-11-20-weekly-meeting-minutes.md
rename to docs/blog/2020-11-20-weekly-meeting-minutes.md
index 74063ddee..80868550c 100644
--- a/website/_posts/2020-11-20-weekly-meeting-minutes.md
+++ b/docs/blog/2020-11-20-weekly-meeting-minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Weekly Meeting Minutes 2020-11-20
-date:   2020-11-20 12:00:01 -0600
-category: minutes
+date: 2020-11-20
+tags: [minutes]
+authors: [mahout-team]
 ---
 
 Weekly community meeting minutes.
diff --git a/website/_posts/2020-11-6-weekly-meeting-minutes.md b/docs/blog/2020-11-6-weekly-meeting-minutes.md
similarity index 91%
rename from website/_posts/2020-11-6-weekly-meeting-minutes.md
rename to docs/blog/2020-11-6-weekly-meeting-minutes.md
index 9e34cc682..ddbe9a45d 100644
--- a/website/_posts/2020-11-6-weekly-meeting-minutes.md
+++ b/docs/blog/2020-11-6-weekly-meeting-minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Weekly Meeting Minutes 2020-11-06
-date:   2020-11-06 00:00:01 -0600
-category: minutes
+date: 2020-11-06
+tags: [minutes]
+authors: [mahout-team]
 ---
 
 Weekly community meeting minutes.
diff --git a/website/_posts/2020-12-15-weekly-meeting-minutes.md b/docs/blog/2020-12-15-weekly-meeting-minutes.md
similarity index 77%
rename from website/_posts/2020-12-15-weekly-meeting-minutes.md
rename to docs/blog/2020-12-15-weekly-meeting-minutes.md
index 61b1ab5fc..0c70fca51 100644
--- a/website/_posts/2020-12-15-weekly-meeting-minutes.md
+++ b/docs/blog/2020-12-15-weekly-meeting-minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Weekly Meeting Minutes 2020-12-15
-date:   2020-12-15 16:00:01 -0600
-category: minutes
+date: 2020-12-15
+tags: [minutes]
+authors: [mahout-team]
 ---
 
 Trevor able to do Mahout in-core matrix addition in Python. Will continue working, but good first step. Want
diff --git a/website/_posts/2020-12-8-weekly-meeting-minutes.md b/docs/blog/2020-12-8-weekly-meeting-minutes.md
similarity index 95%
rename from website/_posts/2020-12-8-weekly-meeting-minutes.md
rename to docs/blog/2020-12-8-weekly-meeting-minutes.md
index 6e880dc83..557dae0f5 100644
--- a/website/_posts/2020-12-8-weekly-meeting-minutes.md
+++ b/docs/blog/2020-12-8-weekly-meeting-minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Weekly Meeting Minutes 2020-12-08
-date:   2020-12-08 16:00:01 -0600
-category: minutes
+date: 2020-12-08
+tags: [minutes]
+authors: [mahout-team]
 ---
 
 New Meeting time is Tuesdays, still hammering down final time.
diff --git a/website/_posts/2021-01-05-weekly-meeting-minutes.md b/docs/blog/2021-01-05-weekly-meeting-minutes.md
similarity index 88%
rename from website/_posts/2021-01-05-weekly-meeting-minutes.md
rename to docs/blog/2021-01-05-weekly-meeting-minutes.md
index 987a91a2d..02c315093 100644
--- a/website/_posts/2021-01-05-weekly-meeting-minutes.md
+++ b/docs/blog/2021-01-05-weekly-meeting-minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Weekly Meeting Minutes 2021-01-05
-date:   2021-01-05 16:00:01 -0600
-category: minutes
+date: 2021-01-05
+tags: [minutes]
+authors: [mahout-team]
 ---
 
 Andrew showed Trevor how to file his first board report.
diff --git a/website/_posts/2021-02-02-weekly-meeting-minutes.md b/docs/blog/2021-02-02-weekly-meeting-minutes.md
similarity index 87%
rename from website/_posts/2021-02-02-weekly-meeting-minutes.md
rename to docs/blog/2021-02-02-weekly-meeting-minutes.md
index 9b279aa70..d580fa990 100644
--- a/website/_posts/2021-02-02-weekly-meeting-minutes.md
+++ b/docs/blog/2021-02-02-weekly-meeting-minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Weekly Meeting Minutes 2021-02-02
-date:   2021-02-02 16:00:01 -0600
-category: minutes
+date: 2021-02-02
+tags: [minutes]
+authors: [mahout-team]
 ---
 
 ### Recap Since Last Time
diff --git a/website/_posts/2021-06-01-Zeppelin Quickstart.md b/docs/blog/2021-06-01-Zeppelin Quickstart.md
similarity index 92%
rename from website/_posts/2021-06-01-Zeppelin Quickstart.md
rename to docs/blog/2021-06-01-Zeppelin Quickstart.md
index 60af5f7b5..0ab5855c0 100644
--- a/website/_posts/2021-06-01-Zeppelin Quickstart.md	
+++ b/docs/blog/2021-06-01-Zeppelin Quickstart.md	
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Zeppelin Quickstart
-date:   2021-06-01 00:00:01 -0600
-category: tutorial
+date: 2021-06-01
+tags: [tutorial]
+authors: [mahout-team]
 ---
 
 # Apache Zeppelin Quickstart
diff --git a/website/_posts/2023-02-22-Meeting-Minutes.md b/docs/blog/2023-02-22-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2023-02-22-Meeting-Minutes.md
rename to docs/blog/2023-02-22-Meeting-Minutes.md
index dd9896e1f..9218fc4c3 100644
--- a/website/_posts/2023-02-22-Meeting-Minutes.md
+++ b/docs/blog/2023-02-22-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2023-02-22 00:00:00 -0800
-category: minutes
+date: 2023-02-22
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Monthly community call
 
diff --git a/website/_posts/2023-03-29-Meeting-Minutes.md b/docs/blog/2023-03-29-Meeting-Minutes.md
similarity index 97%
rename from website/_posts/2023-03-29-Meeting-Minutes.md
rename to docs/blog/2023-03-29-Meeting-Minutes.md
index e95d31f8a..291c6f938 100644
--- a/website/_posts/2023-03-29-Meeting-Minutes.md
+++ b/docs/blog/2023-03-29-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2023-03-29 00:00:00 -0800
-category: minutes
+date: 2023-03-29
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Monthly community call
 
diff --git a/website/_posts/2023-07-26-Meeting-Minutes.md b/docs/blog/2023-07-26-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2023-07-26-Meeting-Minutes.md
rename to docs/blog/2023-07-26-Meeting-Minutes.md
index adb684e76..3e6742f2c 100644
--- a/website/_posts/2023-07-26-Meeting-Minutes.md
+++ b/docs/blog/2023-07-26-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2023-07-26 00:00:00 -0800
-category: minutes
+date: 2023-07-26
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Monthly community call
 
diff --git a/website/_posts/2023-08-30-Meeting-Minutes.md b/docs/blog/2023-08-30-Meeting-Minutes.md
similarity index 97%
rename from website/_posts/2023-08-30-Meeting-Minutes.md
rename to docs/blog/2023-08-30-Meeting-Minutes.md
index e8a9e259e..e31d2a141 100644
--- a/website/_posts/2023-08-30-Meeting-Minutes.md
+++ b/docs/blog/2023-08-30-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2023-08-30 00:00:00 -0800
-category: minutes
+date: 2023-08-30
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Monthly community call
 
diff --git a/website/_posts/2023-09-27-Meeting-Minutes.md b/docs/blog/2023-09-27-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2023-09-27-Meeting-Minutes.md
rename to docs/blog/2023-09-27-Meeting-Minutes.md
index 6b4417eed..ec7438fd1 100644
--- a/website/_posts/2023-09-27-Meeting-Minutes.md
+++ b/docs/blog/2023-09-27-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2023-09-27 00:00:00 -0800
-category: minutes
+date: 2023-09-27
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Monthly community call
 
diff --git a/website/_posts/2023-10-25-Meeting-Minutes.md b/docs/blog/2023-10-25-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2023-10-25-Meeting-Minutes.md
rename to docs/blog/2023-10-25-Meeting-Minutes.md
index da9742fb1..5e7144163 100644
--- a/website/_posts/2023-10-25-Meeting-Minutes.md
+++ b/docs/blog/2023-10-25-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2023-10-25 00:00:00 -0800
-category: minutes
+date: 2023-10-25
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Monthly community meeting
 
diff --git a/website/_posts/2023-11-29-Meeting-Minutes.md b/docs/blog/2023-11-29-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2023-11-29-Meeting-Minutes.md
rename to docs/blog/2023-11-29-Meeting-Minutes.md
index 87a9cfe11..2fb07da23 100644
--- a/website/_posts/2023-11-29-Meeting-Minutes.md
+++ b/docs/blog/2023-11-29-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2023-11-29 00:00:00 -0800
-category: minutes
+date: 2023-11-29
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Monthly community meeting
 
diff --git a/website/_posts/2024-01-31-Meeting-Minutes.md b/docs/blog/2024-01-31-Meeting-Minutes.md
similarity index 94%
rename from website/_posts/2024-01-31-Meeting-Minutes.md
rename to docs/blog/2024-01-31-Meeting-Minutes.md
index bf6d0b5d3..38be466a9 100644
--- a/website/_posts/2024-01-31-Meeting-Minutes.md
+++ b/docs/blog/2024-01-31-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-01-31 00:00:00 -0800
-category: minutes
+date: 2024-01-31
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Monthly community meeting
 
diff --git a/website/_posts/2024-02-14-Meeting-Minutes.md b/docs/blog/2024-02-14-Meeting-Minutes.md
similarity index 94%
rename from website/_posts/2024-02-14-Meeting-Minutes.md
rename to docs/blog/2024-02-14-Meeting-Minutes.md
index c7bb0db3c..19967a69f 100644
--- a/website/_posts/2024-02-14-Meeting-Minutes.md
+++ b/docs/blog/2024-02-14-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-02-14 00:00:00 -0800
-category: minutes
+date: 2024-02-14
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 
diff --git a/website/_posts/2024-03-07-Meeting-Minutes.md b/docs/blog/2024-03-07-Meeting-Minutes.md
similarity index 95%
rename from website/_posts/2024-03-07-Meeting-Minutes.md
rename to docs/blog/2024-03-07-Meeting-Minutes.md
index 7a3cd3c96..838429986 100644
--- a/website/_posts/2024-03-07-Meeting-Minutes.md
+++ b/docs/blog/2024-03-07-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-03-06 00:00:00 -0800
-category: minutes
+date: 2024-03-07
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 
diff --git a/website/_posts/2024-03-13-Meeting-Minutes.md b/docs/blog/2024-03-13-Meeting-Minutes.md
similarity index 94%
rename from website/_posts/2024-03-13-Meeting-Minutes.md
rename to docs/blog/2024-03-13-Meeting-Minutes.md
index 087fcae3f..41bf6a9c4 100644
--- a/website/_posts/2024-03-13-Meeting-Minutes.md
+++ b/docs/blog/2024-03-13-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-03-13 00:00:00 -0800
-category: minutes
+date: 2024-03-13
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 
diff --git a/website/_posts/2024-03-20-Meeting-Minutes.md b/docs/blog/2024-03-20-Meeting-Minutes.md
similarity index 95%
rename from website/_posts/2024-03-20-Meeting-Minutes.md
rename to docs/blog/2024-03-20-Meeting-Minutes.md
index 0461d8dc6..8c8d7776f 100644
--- a/website/_posts/2024-03-20-Meeting-Minutes.md
+++ b/docs/blog/2024-03-20-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-03-20 00:00:00 -0800
-category: minutes
+date: 2024-03-20
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 
diff --git a/website/_posts/2024-03-27-Meeting-Minutes.md b/docs/blog/2024-03-27-Meeting-Minutes.md
similarity index 95%
rename from website/_posts/2024-03-27-Meeting-Minutes.md
rename to docs/blog/2024-03-27-Meeting-Minutes.md
index ac1d55b7a..4b936bfd1 100644
--- a/website/_posts/2024-03-27-Meeting-Minutes.md
+++ b/docs/blog/2024-03-27-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-03-27 00:00:00 -0800
-category: minutes
+date: 2024-03-27
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 
diff --git a/website/_posts/2024-04-03-Meeting-Minutes.md b/docs/blog/2024-04-03-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-04-03-Meeting-Minutes.md
rename to docs/blog/2024-04-03-Meeting-Minutes.md
index 8f8f51e7f..423e247c3 100644
--- a/website/_posts/2024-04-03-Meeting-Minutes.md
+++ b/docs/blog/2024-04-03-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-04-03 00:00:00 -0800
-category: minutes
+date: 2024-04-03
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-04-17-Meeting-Minutes.md b/docs/blog/2024-04-17-Meeting-Minutes.md
similarity index 95%
rename from website/_posts/2024-04-17-Meeting-Minutes.md
rename to docs/blog/2024-04-17-Meeting-Minutes.md
index 532188674..941b0119e 100644
--- a/website/_posts/2024-04-17-Meeting-Minutes.md
+++ b/docs/blog/2024-04-17-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-04-17 00:00:00 -0800
-category: minutes
+date: 2024-04-17
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-04-24-Meeting-Minutes.md b/docs/blog/2024-04-24-Meeting-Minutes.md
similarity index 91%
rename from website/_posts/2024-04-24-Meeting-Minutes.md
rename to docs/blog/2024-04-24-Meeting-Minutes.md
index 3a6975667..15be58890 100644
--- a/website/_posts/2024-04-24-Meeting-Minutes.md
+++ b/docs/blog/2024-04-24-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-04-24 00:00:00 -0800
-category: minutes
+date: 2024-04-24
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-05-08-Meeting-Minutes.md b/docs/blog/2024-05-08-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-05-08-Meeting-Minutes.md
rename to docs/blog/2024-05-08-Meeting-Minutes.md
index c8f1939c9..de7065d8a 100644
--- a/website/_posts/2024-05-08-Meeting-Minutes.md
+++ b/docs/blog/2024-05-08-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-05-08 00:00:00 -0800
-category: minutes
+date: 2024-05-08
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-07-17-Meeting-Minutes.md b/docs/blog/2024-07-17-Meeting-Minutes.md
similarity index 95%
rename from website/_posts/2024-07-17-Meeting-Minutes.md
rename to docs/blog/2024-07-17-Meeting-Minutes.md
index 23df8987f..8e7045d7e 100644
--- a/website/_posts/2024-07-17-Meeting-Minutes.md
+++ b/docs/blog/2024-07-17-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-07-17 00:00:00 -0800
-category: minutes
+date: 2024-07-17
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-07-24-Meeting-Minutes.md b/docs/blog/2024-07-24-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-07-24-Meeting-Minutes.md
rename to docs/blog/2024-07-24-Meeting-Minutes.md
index 745fff34b..e6de01796 100644
--- a/website/_posts/2024-07-24-Meeting-Minutes.md
+++ b/docs/blog/2024-07-24-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-07-24 00:00:00 -0800
-category: minutes
+date: 2024-07-24
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-08-02-Meeting-Minutes.md b/docs/blog/2024-08-02-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-08-02-Meeting-Minutes.md
rename to docs/blog/2024-08-02-Meeting-Minutes.md
index 4e04dec4d..d1844617a 100644
--- a/website/_posts/2024-08-02-Meeting-Minutes.md
+++ b/docs/blog/2024-08-02-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-08-02 00:00:00 -0800
-category: minutes
+date: 2024-08-02
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-08-09-Meeting-Minutes.md b/docs/blog/2024-08-09-Meeting-Minutes.md
similarity index 95%
rename from website/_posts/2024-08-09-Meeting-Minutes.md
rename to docs/blog/2024-08-09-Meeting-Minutes.md
index c9ffb3a58..93ef32a46 100644
--- a/website/_posts/2024-08-09-Meeting-Minutes.md
+++ b/docs/blog/2024-08-09-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-08-09 00:00:00 -0800
-category: minutes
+date: 2024-08-09
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-08-30-Meeting-Minutes.md b/docs/blog/2024-08-30-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-08-30-Meeting-Minutes.md
rename to docs/blog/2024-08-30-Meeting-Minutes.md
index db7398bd2..8193f3e2c 100644
--- a/website/_posts/2024-08-30-Meeting-Minutes.md
+++ b/docs/blog/2024-08-30-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-08-30 00:00:00 -0800
-category: minutes
+date: 2024-08-30
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-09-20-Meeting-Minutes.md b/docs/blog/2024-09-20-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-09-20-Meeting-Minutes.md
rename to docs/blog/2024-09-20-Meeting-Minutes.md
index 05a242d2d..e114fd49d 100644
--- a/website/_posts/2024-09-20-Meeting-Minutes.md
+++ b/docs/blog/2024-09-20-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-09-20 00:00:00 -0800
-category: minutes
+date: 2024-09-20
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-09-27-Meeting-Minutes.md b/docs/blog/2024-09-27-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-09-27-Meeting-Minutes.md
rename to docs/blog/2024-09-27-Meeting-Minutes.md
index 0457f28ad..43a1ff3b2 100644
--- a/website/_posts/2024-09-27-Meeting-Minutes.md
+++ b/docs/blog/2024-09-27-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-09-27 00:00:00 -0800
-category: minutes
+date: 2024-09-27
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-10-04-Meeting-Minutes.md b/docs/blog/2024-10-04-Meeting-Minutes.md
similarity index 97%
rename from website/_posts/2024-10-04-Meeting-Minutes.md
rename to docs/blog/2024-10-04-Meeting-Minutes.md
index b044fbd02..fe430d94b 100644
--- a/website/_posts/2024-10-04-Meeting-Minutes.md
+++ b/docs/blog/2024-10-04-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-10-04 00:00:00 -0800
-category: minutes
+date: 2024-10-04
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-11-01-Meeting-Minutes.md b/docs/blog/2024-11-01-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-11-01-Meeting-Minutes.md
rename to docs/blog/2024-11-01-Meeting-Minutes.md
index 5c53025ce..869072ba8 100644
--- a/website/_posts/2024-11-01-Meeting-Minutes.md
+++ b/docs/blog/2024-11-01-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-11-01 00:00:00 -0800
-category: minutes
+date: 2024-11-01
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-11-15-Meeting-Minutes.md b/docs/blog/2024-11-15-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-11-15-Meeting-Minutes.md
rename to docs/blog/2024-11-15-Meeting-Minutes.md
index d7ff54cd9..9bd0e121d 100644
--- a/website/_posts/2024-11-15-Meeting-Minutes.md
+++ b/docs/blog/2024-11-15-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-11-15 00:00:00 -0800
-category: minutes
+date: 2024-11-15
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2024-12-06-Meeting-Minutes.md b/docs/blog/2024-12-06-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2024-12-06-Meeting-Minutes.md
rename to docs/blog/2024-12-06-Meeting-Minutes.md
index 00de86c15..8373abf51 100644
--- a/website/_posts/2024-12-06-Meeting-Minutes.md
+++ b/docs/blog/2024-12-06-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2024-12-06 00:00:00 -0800
-category: minutes
+date: 2024-12-06
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2025-01-24-FOSDEM-Talk.md b/docs/blog/2025-01-24-FOSDEM-Talk.md
similarity index 95%
rename from website/_posts/2025-01-24-FOSDEM-Talk.md
rename to docs/blog/2025-01-24-FOSDEM-Talk.md
index 17065baa9..e6b34f0da 100644
--- a/website/_posts/2025-01-24-FOSDEM-Talk.md
+++ b/docs/blog/2025-01-24-FOSDEM-Talk.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Mahout at FOSDEM - Introducing Qumat
-date:   2025-01-24 00:00:00 -0800
-category: news
+date: 2025-01-24
+tags: [news]
+authors: [mahout-team]
 ---
 ## FOSDEM 2025, ULB Solbosch Campus
 ## Feb 2nd, Brussels, Belgium
diff --git a/website/_posts/2025-01-24-Meeting-Minutes.md b/docs/blog/2025-01-24-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2025-01-24-Meeting-Minutes.md
rename to docs/blog/2025-01-24-Meeting-Minutes.md
index 6d6ec8578..f8ce3bf23 100644
--- a/website/_posts/2025-01-24-Meeting-Minutes.md
+++ b/docs/blog/2025-01-24-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2025-01-24 00:00:00 -0800
-category: minutes
+date: 2025-01-24
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2025-02-14-Meeting-Minutes.md b/docs/blog/2025-02-14-Meeting-Minutes.md
similarity index 96%
rename from website/_posts/2025-02-14-Meeting-Minutes.md
rename to docs/blog/2025-02-14-Meeting-Minutes.md
index 31d779a51..447e2724f 100644
--- a/website/_posts/2025-02-14-Meeting-Minutes.md
+++ b/docs/blog/2025-02-14-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2025-02-14 00:00:00 -0800
-category: minutes
+date: 2025-02-14
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2025-03-13-Meeting-Minutes.md b/docs/blog/2025-03-13-Meeting-Minutes.md
similarity index 97%
rename from website/_posts/2025-03-13-Meeting-Minutes.md
rename to docs/blog/2025-03-13-Meeting-Minutes.md
index ba1026417..958e84759 100644
--- a/website/_posts/2025-03-13-Meeting-Minutes.md
+++ b/docs/blog/2025-03-13-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2025-03-13 00:00:00 -0800
-category: minutes
+date: 2025-03-13
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list to ask for details on joining.
diff --git a/website/_posts/2025-03-21-Meeting-Minutes.md b/docs/blog/2025-03-21-Meeting-Minutes.md
similarity index 68%
rename from website/_posts/2025-03-21-Meeting-Minutes.md
rename to docs/blog/2025-03-21-Meeting-Minutes.md
index 42bc19c44..2b5c98f0d 100644
--- a/website/_posts/2025-03-21-Meeting-Minutes.md
+++ b/docs/blog/2025-03-21-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2025-03-21 00:00:00 -0800
-category: minutes
+date: 2025-03-21
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Minutes](https://github.com/apache/mahout/discussions/523) on GitHub Discussions.
diff --git a/website/_posts/2025-04-11-Meeting-Minutes.md b/docs/blog/2025-04-11-Meeting-Minutes.md
similarity index 68%
rename from website/_posts/2025-04-11-Meeting-Minutes.md
rename to docs/blog/2025-04-11-Meeting-Minutes.md
index 5c7782e7b..79f35fa0b 100644
--- a/website/_posts/2025-04-11-Meeting-Minutes.md
+++ b/docs/blog/2025-04-11-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2025-04-11 00:00:00 -0800
-category: minutes
+date: 2025-04-11
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Minutes](https://github.com/apache/mahout/discussions/532) on GitHub Discussions.
diff --git a/website/_posts/2025-04-17-Qumat-0.4-Release.md b/docs/blog/2025-04-17-Qumat-0.4-Release.md
similarity index 69%
rename from website/_posts/2025-04-17-Qumat-0.4-Release.md
rename to docs/blog/2025-04-17-Qumat-0.4-Release.md
index d97881e6a..66065cc87 100644
--- a/website/_posts/2025-04-17-Qumat-0.4-Release.md
+++ b/docs/blog/2025-04-17-Qumat-0.4-Release.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Qumat 0.4 Release
-date:   2025-04-17 00:00:00 -0800
-category: news
+date: 2025-04-17
+tags: [news]
+authors: [mahout-team]
 ---
 ## Qumat 0.4 Released
 [Release notes](https://github.com/apache/mahout/discussions/536) on GitHub Discussions.
diff --git a/website/_posts/2025-05-16-Meeting-Minutes.md b/docs/blog/2025-05-16-Meeting-Minutes.md
similarity index 68%
rename from website/_posts/2025-05-16-Meeting-Minutes.md
rename to docs/blog/2025-05-16-Meeting-Minutes.md
index 424ae2e2b..7f0cb62ec 100644
--- a/website/_posts/2025-05-16-Meeting-Minutes.md
+++ b/docs/blog/2025-05-16-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2025-05-15 00:00:00 -0800
-category: minutes
+date: 2025-05-16
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Minutes](https://github.com/apache/mahout/discussions/541) on GitHub Discussions.
diff --git a/website/_posts/2025-08-01-Meeting-Minutes.md b/docs/blog/2025-08-01-Meeting-Minutes.md
similarity index 92%
rename from website/_posts/2025-08-01-Meeting-Minutes.md
rename to docs/blog/2025-08-01-Meeting-Minutes.md
index 09bc03bd2..fc315dad3 100644
--- a/website/_posts/2025-08-01-Meeting-Minutes.md
+++ b/docs/blog/2025-08-01-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2025-08-01 00:00:00 -0800
-category: minutes
+date: 2025-08-01
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list for details on joining.
diff --git a/website/_posts/2025-10-24-Meeting-Minutes.md b/docs/blog/2025-10-24-Meeting-Minutes.md
similarity index 89%
rename from website/_posts/2025-10-24-Meeting-Minutes.md
rename to docs/blog/2025-10-24-Meeting-Minutes.md
index da4bf9cf7..64ec3800e 100644
--- a/website/_posts/2025-10-24-Meeting-Minutes.md
+++ b/docs/blog/2025-10-24-Meeting-Minutes.md
@@ -1,8 +1,8 @@
 ---
-layout: post
 title: Meeting Minutes
-date:   2025-10-24 00:00:00 -0800
-category: minutes
+date: 2025-10-24
+tags: [minutes]
+authors: [mahout-team]
 ---
 ## Weekly community meeting
 [Subscribe](mailto:user-subscribe@mahout.apache.org) to the Mahout User list for details on joining.
diff --git a/website/community/coc.md b/docs/community/code-of-conduct.md
similarity index 98%
copy from website/community/coc.md
copy to docs/community/code-of-conduct.md
index 8f1a30efd..6e2014e8f 100644
--- a/website/community/coc.md
+++ b/docs/community/code-of-conduct.md
@@ -1,6 +1,6 @@
 ---
-layout: page
-title:  Code of Conduct
+title: Code of Conduct
+sidebar_label: Code of Conduct
 ---
 # Apache Mahout Community Code of Conduct
 
diff --git a/website/community/index.md b/docs/community/index.md
similarity index 99%
copy from website/community/index.md
copy to docs/community/index.md
index a68ea1864..dde1582ce 100644
--- a/website/community/index.md
+++ b/docs/community/index.md
@@ -1,6 +1,6 @@
 ---
-layout: page
 title: Community Overview
+sidebar_label: Community Overview
 ---
 
 # Community Overview
diff --git a/website/community/mailing-lists.md b/docs/community/mailing-lists.md
similarity index 98%
copy from website/community/mailing-lists.md
copy to docs/community/mailing-lists.md
index 0c21184d4..988257e24 100644
--- a/website/community/mailing-lists.md
+++ b/docs/community/mailing-lists.md
@@ -1,6 +1,6 @@
 ---
-layout: page
 title: Mailing Lists, IRC and Archives
+sidebar_label: Mailing Lists, IRC and Archives
 ---
 
 # General
diff --git a/website/community/who-we-are.md b/docs/community/who-we-are.md
similarity index 99%
copy from website/community/who-we-are.md
copy to docs/community/who-we-are.md
index 2311a78a6..9c57218c5 100644
--- a/website/community/who-we-are.md
+++ b/docs/community/who-we-are.md
@@ -1,8 +1,6 @@
 ---
-layout: page
 title: Who Are We?
-
-
+sidebar_label: Who Are We?
 ---
 
 <a name="WhoWeAre-Whoweare"></a>
diff --git a/website/download/downloads.md b/docs/download/index.md
similarity index 98%
copy from website/download/downloads.md
copy to docs/download/index.md
index 8a8da4f6a..62d736401 100644
--- a/website/download/downloads.md
+++ b/docs/download/index.md
@@ -1,8 +1,6 @@
 ---
-layout: page
 title: Downloads
-
-
+sidebar_label: Downloads
 ---
 
 <a name="Downloads-OfficialRelease"></a>
diff --git a/docs/download/quickstart.md b/docs/download/quickstart.md
new file mode 100644
index 000000000..c9e8859b3
--- /dev/null
+++ b/docs/download/quickstart.md
@@ -0,0 +1,58 @@
+---
+title: Quickstart
+sidebar_label: Quickstart
+---
+
+<!--
+ 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.
+-->
+
+# Qumat Quickstart
+
+## Installation
+
+Install Qumat using pip:
+
+```bash
+pip install qumat
+```
+
+## Basic Usage
+
+```python
+from qumat import QumatCircuit
+
+# Create a simple quantum circuit
+circuit = QumatCircuit(2)
+circuit.h(0)      # Hadamard gate on qubit 0
+circuit.cx(0, 1)  # CNOT gate
+
+# Run the circuit
+result = circuit.run()
+print(result)
+```
+
+## Next Steps
+
+- [Getting Started with Qumat](/docs/getting-started-with-qumat)
+- [Basic Gates](/docs/basic-gates)
+- [API Reference](/docs/api)
+
+## Legacy Mahout MapReduce
+
+:::note
+The legacy Mahout MapReduce functionality is deprecated. For current quantum computing features, see the [Qumat documentation](/docs/qumat).
+:::
diff --git a/docs/getting_started_with_qumat.md b/docs/getting-started-with-qumat.md
similarity index 65%
copy from docs/getting_started_with_qumat.md
copy to docs/getting-started-with-qumat.md
index 76e23370d..3dbe310de 100644
--- a/docs/getting_started_with_qumat.md
+++ b/docs/getting-started-with-qumat.md
@@ -36,18 +36,19 @@ pip install .
 
 ## Examples
 
-Refer to the example notebooks in the 'examples' directory for practical implementations of basic commands and getting started. Notable examples include:
+Refer to the example notebooks in the `examples/` directory at the repository root for practical implementations:
 
-- [Simple_Example.ipynb](examples/Simple_Example.ipynb)
-- [Optimization_Example.ipynb](examples/Optimization_Example.ipynb)
+- `examples/Simple_Example.ipynb` - Basic quantum circuit example
+- `examples/Optimization_Example.ipynb` - Optimization with parameterized circuits
 
 ## Building the Website
 
-To serve the website locally, navigate to the 'website' directory and execute the following commands:
+To serve the website locally:
 
-```
-cd website
-bundle exec jekyll serve
+```bash
+cd website-new
+npm install
+npm run start
 ```
 
-The "build_site.sh" script is for deployment tooling and not necessary for users wanting to serve the website locally.
+See the [website README](https://github.com/apache/mahout/tree/main/website-new) for more details.
diff --git a/docs/getting_started.md b/docs/getting-started.md
similarity index 100%
copy from docs/getting_started.md
copy to docs/getting-started.md
diff --git a/docs/index.md b/docs/index.md
index 20ef0b540..5d6f0a851 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,30 +1,32 @@
+---
+title: QuMat Documentation
+---
+
 ![QuMat Logo](assets/mascot.png)
 
 # QuMat
 
-QuMat is a POC of a high level Python library for intefacing with multiple
+QuMat is a high level Python library for interfacing with multiple
 quantum computing backends. It is designed to be easy to use and to abstract
 the particularities of each backend, so that you may 'write once, run
-anywhere.' Like the Java of quantum computing, but Java is the new COBOL so
-we're trying to distance ourselves from that comparison :P
+anywhere.'
 
 ## Documentation
 
 ### Getting Started
-- [Getting Started with QuMat](getting_started_with_qumat.md) - Introduction and setup guide
+- [Getting Started with QuMat](./getting-started-with-qumat) - Introduction and setup guide
 
 ### Core Concepts
-- [Basic Gates](basic_gates.md) - Introduction to fundamental quantum gates (NOT, Hadamard, CNOT, Toffoli, SWAP, Pauli gates, CSWAP, U gate)
-- [Parameterized Quantum Circuits and Rotation Gates](parameterized_circuits.md) - Rotation gates (Rx, Ry, Rz) and creating/optimizing parameterized circuits
+- [Basic Gates](./basic-gates) - Introduction to fundamental quantum gates (NOT, Hadamard, CNOT, Toffoli, SWAP, Pauli gates, CSWAP, U gate)
+- [Parameterized Quantum Circuits and Rotation Gates](./parameterized-circuits) - Rotation gates (Rx, Ry, Rz) and creating/optimizing parameterized circuits
 
 ### API Reference
-- [API Documentation](api.md) - Complete reference for all QuMat class methods
+- [API Documentation](./api) - Complete reference for all QuMat class methods
 
 ### Additional Resources
-- [Parameterized Quantum Circuits: Developer's Guide](p_q_c.md) - In-depth guide to PQCs
-- [Qumat Gap Analysis for PQC](qumat_gap_analysis_for_pqc.md) - Analysis of PQC capabilities
-
-## Examples
+- [Parameterized Quantum Circuits: Developer's Guide](./pqc) - In-depth guide to PQCs
+- [Qumat Gap Analysis for PQC](./qumat-gap-analysis-for-pqc) - Analysis of PQC capabilities
 
-You can also check out examples in the [examples](examples) directory. The
-cool one is [quantum teleportation](examples/quantum_teleportation.py).
+### Qumat Subprojects
+- [Qumat Core](./qumat) - Quantum circuit abstraction layer
+- [QDP (Quantum Data Plane)](./qumat/qdp) - GPU-accelerated data encoding
diff --git a/docs/parameterized_circuits.md b/docs/parameterized-circuits.md
similarity index 88%
copy from docs/parameterized_circuits.md
copy to docs/parameterized-circuits.md
index 3361a8b7a..65e208bf0 100644
--- a/docs/parameterized_circuits.md
+++ b/docs/parameterized-circuits.md
@@ -18,11 +18,11 @@ Rotation gates rotate a qubit around the X, Y, or Z axis of the Bloch sphere. Ea
 
 ### Rx Gate
 
-Rotates a qubit around the X-axis by angle θ.
+Rotates a qubit around the X-axis by angle $\theta$.
 
-\[ R_x(\theta) = \begin{pmatrix} \cos(\theta/2) & -i\sin(\theta/2) \\ -i\sin(\theta/2) & \cos(\theta/2) \end{pmatrix} \]
+$$R_x(\theta) = \begin{pmatrix} \cos(\theta/2) & -i\sin(\theta/2) \\ -i\sin(\theta/2) & \cos(\theta/2) \end{pmatrix}$$
 
-\[ R_x(\pi/2)|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle - i|1\rangle) \]
+$$R_x(\pi/2)|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle - i|1\rangle)$$
 
 ```python
 from qumat import QuMat
@@ -40,11 +40,11 @@ results = qumat.execute_circuit()
 
 ### Ry Gate
 
-Rotates a qubit around the Y-axis by angle θ.
+Rotates a qubit around the Y-axis by angle $\theta$.
 
-\[ R_y(\theta) = \begin{pmatrix} \cos(\theta/2) & -\sin(\theta/2) \\ \sin(\theta/2) & \cos(\theta/2) \end{pmatrix} \]
+$$R_y(\theta) = \begin{pmatrix} \cos(\theta/2) & -\sin(\theta/2) \\ \sin(\theta/2) & \cos(\theta/2) \end{pmatrix}$$
 
-\[ R_y(\pi/2)|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle + |1\rangle) \]
+$$R_y(\pi/2)|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle + |1\rangle)$$
 
 ```python
 qumat.create_empty_circuit(num_qubits=1)
@@ -54,11 +54,11 @@ results = qumat.execute_circuit()
 
 ### Rz Gate
 
-Rotates a qubit around the Z-axis by angle θ. Changes phase without affecting probability amplitudes.
+Rotates a qubit around the Z-axis by angle $\theta$. Changes phase without affecting probability amplitudes.
 
-\[ R_z(\theta) = \begin{pmatrix} e^{-i\theta/2} & 0 \\ 0 & e^{i\theta/2} \end{pmatrix} \]
+$$R_z(\theta) = \begin{pmatrix} e^{-i\theta/2} & 0 \\ 0 & e^{i\theta/2} \end{pmatrix}$$
 
-\[ R_z(\pi/2)\frac{1}{\sqrt{2}}(|0\rangle + |1\rangle) = \frac{1}{\sqrt{2}}(|0\rangle + i|1\rangle) \]
+$$R_z(\pi/2)\frac{1}{\sqrt{2}}(|0\rangle + |1\rangle) = \frac{1}{\sqrt{2}}(|0\rangle + i|1\rangle)$$
 
 Probabilities remain: P(|0⟩) = P(|1⟩) = 1/2
 
diff --git a/docs/p_q_c.md b/docs/pqc.md
similarity index 95%
copy from docs/p_q_c.md
copy to docs/pqc.md
index b65a243d2..523a58b1d 100644
--- a/docs/p_q_c.md
+++ b/docs/pqc.md
@@ -27,15 +27,15 @@ Welcome to the guide designed for developers interested in implementing paramete
 
 Quantum gates are the building blocks of quantum circuits, functioning similarly to classical logic gates but operating on qubits, the fundamental units of quantum information. Unlike classical bits, which can be either 0 or 1, qubits can exist in superpositions of states, represented as linear combinations of |0⟩ and |1⟩.
 
-**Universal Gate Sets:** To perform arbitrary quantum computations, it's essential to understand universal gate sets. A set of quantum gates is considered universal if any unitary operation (any quantum computation) can be approximated to arbitrary accuracy using these gates. Common universal gate sets include the set of Hadamard (H), CNOT, and \( T \) gates. The H gate creates superpositions, CNOT is an entangling operation, and the \( T \) gate provides a necessary phase shift.
+**Universal Gate Sets:** To perform arbitrary quantum computations, it's essential to understand universal gate sets. A set of quantum gates is considered universal if any unitary operation (any quantum computation) can be approximated to arbitrary accuracy using these gates. Common universal gate sets include the set of Hadamard (H), CNOT, and $T$ gates. The H gate creates superpositions, CNOT is an entangling operation, and the $T$ gate provides a necessary phase shift.
 
 ### Parameterized Gates
 
-Parameterized gates are quantum gates that include parameters that can be adjusted, often continuously. These gates are integral to parameterized quantum circuits, as their parameters can be optimized during algorithms. Common parameterized gates include rotation gates such as \( R_x(\theta) \), \( R_y(\theta) \), and \( R_z(\theta) \), each corresponding to a rotation around the respective axes in the Bloch sphere representation of a qubit.
+Parameterized gates are quantum gates that include parameters that can be adjusted, often continuously. These gates are integral to parameterized quantum circuits, as their parameters can be optimized during algorithms. Common parameterized gates include rotation gates such as $R_x(\theta)$, $R_y(\theta)$, and $R_z(\theta)$, each corresponding to a rotation around the respective axes in the Bloch sphere representation of a qubit.
 
-**Rotation Gates:** For instance, a rotation gate around the x-axis, \( R_x(\theta) \), can be represented by the unitary operation:
-\[ R_x(\theta) = \exp(-i \frac{\theta}{2} \sigma_x) \]
-where \( \sigma_x \) is the Pauli X matrix. The parameter \( \theta \) can be adjusted during the circuit's operation, which is key in variational and learning-based quantum algorithms.
+**Rotation Gates:** For instance, a rotation gate around the x-axis, $R_x(\theta)$, can be represented by the unitary operation:
+$$R_x(\theta) = \exp\left(-i \frac{\theta}{2} \sigma_x\right)$$
+where $\sigma_x$ is the Pauli X matrix. The parameter $\theta$ can be adjusted during the circuit's operation, which is key in variational and learning-based quantum algorithms.
 
 ### Motivation for PQCs
 
@@ -128,9 +128,9 @@ Mitigation strategies include using circuit architectures tailored to specific p
 
 ### Parameter Shift Rule
 
-The **parameter shift rule** is an essential tool for obtaining exact gradients of parameters in a PQC. It is specifically designed taking into account the unitary nature of quantum gates. For a parameterized gate \(U(\theta)\), the gradient of the expectation value \( \langle \psi | U^{\dagger}(\theta) O U(\theta) | \psi \rangle \) with respect to \(\theta\) can be calculated by evaluating the expectation with shifted parameters:
+The **parameter shift rule** is an essential tool for obtaining exact gradients of parameters in a PQC. It is specifically designed taking into account the unitary nature of quantum gates. For a parameterized gate $U(\theta)$, the gradient of the expectation value $\langle \psi | U^{\dagger}(\theta) O U(\theta) | \psi \rangle$ with respect to $\theta$ can be calculated by evaluating the expectation with shifted parameters:
 
-\[ \frac{d}{d\theta} \langle \psi | U^\dagger(\theta) O U(\theta) |\psi\rangle = \frac{1}{2}\left(\langle \psi | U^\dagger(\theta + \frac{\pi}{2}) O U(\theta + \frac{\pi}{2}) |\psi\rangle - \langle \psi | U^\dagger(\theta - \frac{\pi}{2}) O U(\theta - \frac{\pi}{2}) |\psi\rangle\right) \]
+$$\frac{d}{d\theta} \langle \psi | U^\dagger(\theta) O U(\theta) |\psi\rangle = \frac{1}{2}\left(\langle \psi | U^\dagger(\theta + \frac{\pi}{2}) O U(\theta + \frac{\pi}{2}) |\psi\rangle - \langle \psi | U^\dagger(\theta - \frac{\pi}{2}) O U(\theta - \frac{\pi}{2}) |\psi\rangle\right)$$
 
 This approach is hardware-efficient since it requires only a few additional circuit evaluations per parameter.
 
@@ -148,7 +148,7 @@ Quantum classifiers are used in machine learning to categorize or predict outcom
 
 To make use of quantum classifiers, efficient data encoding is crucial:
 
-- **Amplitude Encoding** utilizes the amplitudes of quantum states to encode classical data. This method can encode \(2^n\) dimensional data into n qubits, offering exponential data compression. However, the challenge lies in preparing the exact quantum state, which can be resource-intensive and sensitive to noise.
+- **Amplitude Encoding** utilizes the amplitudes of quantum states to encode classical data. This method can encode $2^n$ dimensional data into n qubits, offering exponential data compression. However, the challenge lies in preparing the exact quantum state, which can be resource-intensive and sensitive to noise.
 
 - **Angle Encoding** involves mapping classical data points directly to the rotation angles of quantum gates. This simple yet effective method can encode data by transforming features into angles that control the operations of parameterized gates (e.g., RX, RY, RZ). Its advantage lies in the straightforward implementation and flexibility, but it may not fully exploit the exponential scaling potential.
 
diff --git a/docs/qdp/observability.md b/docs/qdp/observability.md
new file mode 100644
index 000000000..a4fe92ee1
--- /dev/null
+++ b/docs/qdp/observability.md
@@ -0,0 +1,148 @@
+# NVTX Profiling Guide
+
+## Overview
+
+NVTX (NVIDIA Tools Extension) provides performance markers visible in Nsight Systems. This project uses zero-cost macros that compile to no-ops when the `observability` feature is disabled.
+
+## Build with NVTX
+
+Default builds exclude NVTX for zero overhead. Enable profiling with:
+
+```bash
+cd mahout/qdp
+cargo build -p qdp-core --example nvtx_profile --features observability --release
+```
+
+## Run Example
+
+```bash
+./target/release/examples/nvtx_profile
+```
+
+**Expected output:**
+```
+=== NVTX Profiling Example ===
+
+✓ Engine initialized
+✓ Created test data: 1024 elements
+
+Starting encoding (NVTX markers will appear in Nsight Systems)...
+Expected NVTX markers:
+  - Mahout::Encode
+  - CPU::L2Norm
+  - GPU::Alloc
+  - GPU::H2DCopy
+  - GPU::KernelLaunch
+  - GPU::Synchronize
+  - DLPack::Wrap
+
+✓ Encoding succeeded
+✓ DLPack pointer: 0x558114be6250
+✓ Memory freed
+
+=== Test Complete ===
+```
+
+## Profile with Nsight Systems
+
+```bash
+nsys profile --trace=cuda,nvtx -o report ./target/release/examples/nvtx_profile
+```
+
+This generates `report.nsys-rep` and `report.sqlite`.
+
+## Viewing Results
+
+### GUI View (Nsight Systems)
+
+Open the report in Nsight Systems GUI:
+
+```bash
+nsys-ui report.nsys-rep
+```
+
+In the GUI timeline view, you will see:
+- Colored blocks for each NVTX marker
+- CPU timeline showing `CPU::L2Norm`
+- GPU timeline showing `GPU::Alloc`, `GPU::H2DCopy`, `GPU::Kernel`
+- Overall workflow covered by `Mahout::Encode`
+
+### Command Line Statistics
+
+View summary statistics:
+
+```bash
+nsys stats report.nsys-rep
+```
+
+**Example NVTX Range Summary output:**
+```
+Time (%)  Total Time (ns)  Instances    Avg (ns)      Med (ns)     Min (ns)    Max (ns)   StdDev (ns)   Style        Range
+--------  ---------------  ---------  ------------  ------------  ----------  ----------  -----------  --------  --------------
+   50.0       11,207,505          1  11,207,505.0  11,207,505.0  11,207,505  11,207,505          0.0  StartEnd  Mahout::Encode
+   48.0       10,759,758          1  10,759,758.0  10,759,758.0  10,759,758  10,759,758          0.0  StartEnd  GPU::Alloc
+    1.8          413,753          1     413,753.0     413,753.0     413,753     413,753          0.0  StartEnd  CPU::L2Norm
+    0.1           15,873          1      15,873.0      15,873.0      15,873      15,873          0.0  StartEnd  GPU::H2DCopy
+    0.0              317          1         317.0         317.0         317         317          0.0  StartEnd  GPU::KernelLaunch
+```
+
+The output shows:
+- Time percentage for each operation
+- Total time in nanoseconds
+- Number of instances
+- Average, median, min, max execution times
+
+**CUDA API Summary** shows detailed CUDA call statistics:
+
+ Time (%)  Total Time (ns)  Num Calls   Avg (ns)     Med (ns)    Min (ns)   Max (ns)   StdDev (ns)          Name
+ --------  ---------------  ---------  -----------  -----------  --------  ----------  -----------  --------------------
+     99.2       11,760,277          2  5,880,138.5  5,880,138.5     2,913  11,757,364  8,311,652.0  cuMemAllocAsync
+      0.4           45,979          2     22,989.5     22,989.5     7,938      38,041     21,286.0  cuMemcpyHtoDAsync_v2
+      0.1           14,722          1     14,722.0     14,722.0    14,722      14,722          0.0  cuEventCreate
+      0.1           13,100          3      4,366.7      3,512.0       861       8,727      4,002.0  cuStreamSynchronize
+      0.1            9,468         11        860.7        250.0       114       4,671      1,453.3  cuCtxSetCurrent
+      0.1            6,479          1      6,479.0      6,479.0     6,479       6,479          0.0  cuEventDestroy_v2
+      0.0            4,599          2      2,299.5      2,299.5     1,773       2,826        744.6  cuMemFreeAsync
+- Memory allocation (`cuMemAllocAsync`)
+- Memory copies (`cuMemcpyHtoDAsync_v2`)
+- Stream synchronization (`cuStreamSynchronize`)
+
+## NVTX Markers
+
+The following markers are tracked:
+
+- `Mahout::Encode` - Complete encoding workflow
+- `CPU::L2Norm` - L2 normalization on CPU
+- `GPU::Alloc` - GPU memory allocation
+- `GPU::H2DCopy` - Host-to-device memory copy
+- `GPU::KernelLaunch` - CPU-side kernel launch
+- `GPU::Synchronize` - CPU waiting for GPU completion
+- `DLPack::Wrap` - Conversion to DLPack pointer
+
+## Using Profiling Macros
+
+The project provides zero-cost macros in `qdp-core/src/profiling.rs`:
+
+```rust
+// Profile a scope (automatically pops on exit)
+crate::profile_scope!("MyOperation");
+
+// Mark a point in time
+crate::profile_mark!("Checkpoint");
+```
+
+When `observability` feature is disabled, these macros compile to no-ops with zero runtime cost.
+
+## Example Location
+
+Source code: `qdp-core/examples/nvtx_profile.rs`
+
+## Troubleshooting
+
+**NVTX markers not appearing:**
+- Ensure `--features observability` is used during build
+- Verify CUDA device is available
+- Check that encoding actually executes
+
+**nsys warnings:**
+Warnings about CPU sampling are normal and can be ignored. They do not affect NVTX marker recording.
diff --git a/docs/qdp/readers.md b/docs/qdp/readers.md
new file mode 100644
index 000000000..92d4a5cdf
--- /dev/null
+++ b/docs/qdp/readers.md
@@ -0,0 +1,222 @@
+# QDP Input Format Architecture
+
+This document describes the refactored input handling system in QDP that makes it easy to support multiple data formats.
+
+## Overview
+
+QDP now uses a trait-based architecture for reading quantum data from various sources. This design allows adding new input formats (NumPy, PyTorch, HDF5, etc.) without modifying core library code.
+
+## Architecture
+
+### Core Traits
+
+#### `DataReader` Trait
+Basic interface for batch reading:
+```rust
+pub trait DataReader {
+    fn read_batch(&mut self) -> Result<(Vec<f64>, usize, usize)>;
+    fn get_sample_size(&self) -> Option<usize> { None }
+    fn get_num_samples(&self) -> Option<usize> { None }
+}
+```
+
+#### `StreamingDataReader` Trait
+Extended interface for large files that don't fit in memory:
+```rust
+pub trait StreamingDataReader: DataReader {
+    fn read_chunk(&mut self, buffer: &mut [f64]) -> Result<usize>;
+    fn total_rows(&self) -> usize;
+}
+```
+
+### Implemented Formats
+
+| Format | Reader | Streaming | Status |
+|--------|--------|-----------|--------|
+| Parquet | `ParquetReader` | ✅ `ParquetStreamingReader` | ✅ Complete |
+| Arrow IPC | `ArrowIPCReader` | ❌ | ✅ Complete |
+| NumPy | `NumpyReader` | ❌ | ✅ Complete |
+| PyTorch | `TorchReader` | ❌ | ✅ (feature: `pytorch`) |
+
+## Benefits
+
+### 1. Easy Extension
+Adding a new format requires only:
+- Implementing the `DataReader` trait
+- Registering in `readers/mod.rs`
+- Optional: Add convenience functions
+
+No changes to core QDP code needed!
+
+### 2. Zero Performance Overhead
+- Traits use static dispatch where possible
+- No runtime polymorphism overhead in hot paths
+- Same zero-copy and streaming capabilities as before
+- No memory allocation overhead
+
+### 3. Backward Compatibility
+All existing APIs continue to work:
+```rust
+// Old API still works
+let (data, samples, size) = read_parquet_batch("data.parquet")?;
+let (data, samples, size) = read_arrow_ipc_batch("data.arrow")?;
+
+// ParquetBlockReader is now an alias to ParquetStreamingReader
+let mut reader = ParquetBlockReader::new("data.parquet", None)?;
+reader.read_chunk(&mut buffer)?;
+```
+
+### 4. Polymorphic Usage
+Readers can be used generically:
+```rust
+fn process_data<R: DataReader>(mut reader: R) -> Result<()> {
+    let (data, samples, size) = reader.read_batch()?;
+    // Process data...
+}
+
+// Works with any reader!
+process_data(ParquetReader::new("data.parquet", None)?)?;
+process_data(ArrowIPCReader::new("data.arrow")?)?;
+```
+
+## Usage Examples
+
+### Basic Reading
+
+```rust
+use qdp_core::reader::DataReader;
+use qdp_core::readers::ArrowIPCReader;
+
+let mut reader = ArrowIPCReader::new("quantum_states.arrow")?;
+let (data, num_samples, sample_size) = reader.read_batch()?;
+
+println!("Read {} samples of {} qubits",
+         num_samples, (sample_size as f64).log2() as usize);
+```
+
+### Streaming Large Files
+
+```rust
+use qdp_core::reader::StreamingDataReader;
+use qdp_core::readers::ParquetStreamingReader;
+
+let mut reader = ParquetStreamingReader::new("large_dataset.parquet", None)?;
+let mut buffer = vec![0.0; 1024 * 1024]; // 1M element buffer
+
+loop {
+    let written = reader.read_chunk(&mut buffer)?;
+    if written == 0 { break; }
+
+    // Process chunk
+    process_chunk(&buffer[..written])?;
+}
+```
+
+### Format Detection
+
+```rust
+fn read_quantum_data(path: &str) -> Result<(Vec<f64>, usize, usize)> {
+    use qdp_core::reader::DataReader;
+
+    if path.ends_with(".parquet") {
+        ParquetReader::new(path, None)?.read_batch()
+    } else if path.ends_with(".arrow") {
+        ArrowIPCReader::new(path)?.read_batch()
+    } else if path.ends_with(".npy") {
+        NumpyReader::new(path)?.read_batch()
+    } else if path.ends_with(".pt") || path.ends_with(".pth") {
+        TorchReader::new(path)?.read_batch()
+    } else {
+        Err(MahoutError::InvalidInput("Unsupported format".into()))
+    }
+}
+```
+
+## Adding New Formats
+
+See ADDING_INPUT_FORMATS.md (TODO) for detailed instructions.
+
+Quick overview:
+1. Create `readers/myformat.rs`
+2. Implement `DataReader` trait
+3. Add to `readers/mod.rs`
+4. Add tests
+5. (Optional) Add convenience functions
+
+## File Organization
+
+```
+qdp-core/src/
+├── reader.rs              # Trait definitions
+├── readers/
+│   ├── mod.rs            # Reader registry
+│   ├── parquet.rs        # Parquet implementation
+│   ├── arrow_ipc.rs      # Arrow IPC implementation
+│   ├── numpy.rs          # NumPy implementation
+│   └── torch.rs          # PyTorch (feature-gated)
+├── io.rs                 # Legacy API & helper functions
+└── lib.rs                # Main library
+
+examples/
+└── flexible_readers.rs   # Demo of architecture
+
+docs/
+├── readers/
+│   └── README.md         # This file
+└── ADDING_INPUT_FORMATS.md  # Extension guide
+```
+
+## Performance Considerations
+
+### Memory Efficiency
+- **Parquet Streaming**: Constant memory usage for any file size
+- **Zero-copy**: Direct buffer access where possible
+- **Pre-allocation**: Reserves capacity when total size is known
+
+### Speed
+- **Static dispatch**: No virtual function overhead
+- **Batch operations**: Minimizes function call overhead
+- **Efficient formats**: Columnar storage (Parquet/Arrow) for fast reading
+
+### Benchmarks
+The architecture maintains the same performance as before:
+- Parquet streaming: ~2GB/s throughput
+- Arrow IPC: ~4GB/s throughput (zero-copy)
+- Memory usage: O(buffer_size), not O(file_size)
+
+## Migration Guide
+
+### For Users
+No changes required! All existing code continues to work.
+
+### For Contributors
+If you were directly using internal reader structures:
+
+**Before:**
+```rust
+let reader = ParquetBlockReader::new(path, None)?;
+```
+
+**After:**
+```rust
+// Still works (it's a type alias)
+let reader = ParquetBlockReader::new(path, None)?;
+
+// Or use the new name
+let reader = ParquetStreamingReader::new(path, None)?;
+```
+
+## Future Enhancements
+
+Planned format support:
+- **NumPy streaming**: Chunked reads for large `.npy` files
+- **PyTorch streaming**: Streaming support for large tensors
+- **HDF5** (`.h5`): Scientific data storage
+- **JSON**: Human-readable format for small datasets
+- **CSV**: Simple tabular data
+
+## Questions?
+
+- See examples: `cargo run --example flexible_readers`
+- Read extension guide: ADDING_INPUT_FORMATS.md (TODO)
+- Check tests: `qdp-core/tests/*_io.rs`
diff --git a/docs/qdp/testing.md b/docs/qdp/testing.md
new file mode 100644
index 000000000..1c24ba783
--- /dev/null
+++ b/docs/qdp/testing.md
@@ -0,0 +1,54 @@
+# QDP Core Test Suite
+
+Unit tests for QDP core library covering input validation, API workflows, and memory safety.
+
+## Test Files
+
+### `validation.rs` - Input Validation
+
+- Invalid encoder strategy rejection
+- Qubit size validation (mismatch, zero, max limit 30)
+- Empty and zero-norm data rejection
+- Error type formatting
+- Non-Linux platform graceful failure
+
+### `api_workflow.rs` - API Workflow
+
+- Engine initialization
+- Amplitude encoding with DLPack pointer management
+
+### `memory_safety.rs` - Memory Safety
+
+- Memory leak detection (100 encode/free cycles)
+- Concurrent state vector management
+- DLPack tensor metadata validation
+
+### `examples/dataloader_throughput.rs` - DataLoader Batch Throughput
+
+- Simulates a QML training loop that streams batches of 64 vectors
+- Producer/consumer model with configurable prefetch to avoid GPU starvation
+- Reports vectors-per-second to verify QDP keeps the GPU busy
+- Run: `cargo run -p qdp-core --example dataloader_throughput --release`
+- Environment overrides: `BATCHES=<usize>` (default 200), `PREFETCH=<usize>` (default 16)
+
+### `common/mod.rs` - Test Utilities
+
+- `create_test_data(size)`: Generates normalized test data
+
+## Running Tests
+
+```bash
+# Run all tests
+cargo test --package qdp-core
+
+# Run specific test file
+cargo test --package qdp-core --test validation
+cargo test --package qdp-core --test api_workflow
+cargo test --package qdp-core --test memory_safety
+```
+
+## Requirements
+
+- Linux OS (tests skip on other platforms)
+- CUDA-capable GPU (tests skip if unavailable)
+- Rust toolchain with CUDA support
diff --git a/docs/qumat_gap_analysis_for_pqc.md b/docs/qumat-gap-analysis-for-pqc.md
similarity index 100%
copy from docs/qumat_gap_analysis_for_pqc.md
copy to docs/qumat-gap-analysis-for-pqc.md
diff --git a/website/qumat/core/api/index.md b/docs/qumat/core/api.md
similarity index 100%
copy from website/qumat/core/api/index.md
copy to docs/qumat/core/api.md
diff --git a/website/qumat/core/concepts/index.md b/docs/qumat/core/concepts.md
similarity index 100%
copy from website/qumat/core/concepts/index.md
copy to docs/qumat/core/concepts.md
diff --git a/website/qumat/core/examples/index.md b/docs/qumat/core/examples.md
similarity index 100%
copy from website/qumat/core/examples/index.md
copy to docs/qumat/core/examples.md
diff --git a/website/qumat/core/getting-started/index.md b/docs/qumat/core/getting-started.md
similarity index 100%
copy from website/qumat/core/getting-started/index.md
copy to docs/qumat/core/getting-started.md
diff --git a/docs/qumat/core/index.md b/docs/qumat/core/index.md
new file mode 100644
index 000000000..aab2771f6
--- /dev/null
+++ b/docs/qumat/core/index.md
@@ -0,0 +1,14 @@
+---
+title: Qumat Core - Overview
+---
+
+# Qumat Core
+
+Qumat Core provides a unified API for building quantum circuits across multiple backends.
+
+## Documentation
+
+- [Getting Started](./getting-started)
+- [Core Concepts](./concepts)
+- [API Reference](./api)
+- [Examples](./examples)
diff --git a/website/qumat/index.md b/docs/qumat/index.md
similarity index 77%
copy from website/qumat/index.md
copy to docs/qumat/index.md
index 50fc8509b..fe1f10220 100644
--- a/website/qumat/index.md
+++ b/docs/qumat/index.md
@@ -1,5 +1,4 @@
 ---
-layout: page
 title: Qumat - Quantum Computing with Mahout
 ---
 
@@ -13,10 +12,10 @@ Qumat is a high-level Python library for quantum computing that provides:
 
 ## Documentation
 
-- [Qumat Core](/qumat/core)
-- [QDP (Quantum Data Plane)](/qumat/qdp)
+- [Qumat Core](./core)
+- [QDP (Quantum Data Plane)](./qdp)
 
 ## Additional Resources
 
-- [Research Papers](/qumat/papers)
-- [Quantum Computing Primer](/qumat/quantum-computing-primer)
+- [Research Papers](./papers)
+- [Quantum Computing Primer](./quantum-computing-primer)
diff --git a/website/_papers/An-Efficient-Quantum-Factoring-Algorithm.md b/docs/qumat/papers/An-Efficient-Quantum-Factoring-Algorithm.md
similarity index 100%
copy from website/_papers/An-Efficient-Quantum-Factoring-Algorithm.md
copy to docs/qumat/papers/An-Efficient-Quantum-Factoring-Algorithm.md
diff --git a/website/_papers/Quantum-Kernel-Estimation-With-Neutral-Atoms-For-Supervised-Classification.md b/docs/qumat/papers/Quantum-Kernel-Estimation-With-Neutral-Atoms-For-Supervised-Classification.md
similarity index 100%
copy from website/_papers/Quantum-Kernel-Estimation-With-Neutral-Atoms-For-Supervised-Classification.md
copy to docs/qumat/papers/Quantum-Kernel-Estimation-With-Neutral-Atoms-For-Supervised-Classification.md
diff --git a/website/_papers/Quantum-machine-learning-beyond-kernel-methods.md b/docs/qumat/papers/Quantum-machine-learning-beyond-kernel-methods.md
similarity index 100%
copy from website/_papers/Quantum-machine-learning-beyond-kernel-methods.md
copy to docs/qumat/papers/Quantum-machine-learning-beyond-kernel-methods.md
diff --git a/website/_papers/Unleashing-the-Potential-of-LLMs-for-Quantum-Computing.md b/docs/qumat/papers/Unleashing-the-Potential-of-LLMs-for-Quantum-Computing.md
similarity index 100%
copy from website/_papers/Unleashing-the-Potential-of-LLMs-for-Quantum-Computing.md
copy to docs/qumat/papers/Unleashing-the-Potential-of-LLMs-for-Quantum-Computing.md
diff --git a/docs/qumat/papers/index.md b/docs/qumat/papers/index.md
new file mode 100644
index 000000000..5a7a39788
--- /dev/null
+++ b/docs/qumat/papers/index.md
@@ -0,0 +1,12 @@
+---
+title: Qumat Research Papers
+---
+
+# Research Papers
+
+Research papers and publications related to Qumat and quantum computing.
+
+- [An Efficient Quantum Factoring Algorithm](./An-Efficient-Quantum-Factoring-Algorithm)
+- [Quantum Kernel Estimation With Neutral Atoms For Supervised Classification](./Quantum-Kernel-Estimation-With-Neutral-Atoms-For-Supervised-Classification)
+- [Quantum Machine Learning Beyond Kernel Methods](./Quantum-machine-learning-beyond-kernel-methods)
+- [Unleashing the Potential of LLMs for Quantum Computing](./Unleashing-the-Potential-of-LLMs-for-Quantum-Computing)
diff --git a/website/qumat/qdp/api/index.md b/docs/qumat/qdp/api.md
similarity index 100%
copy from website/qumat/qdp/api/index.md
copy to docs/qumat/qdp/api.md
diff --git a/website/qumat/qdp/concepts/index.md b/docs/qumat/qdp/concepts.md
similarity index 100%
copy from website/qumat/qdp/concepts/index.md
copy to docs/qumat/qdp/concepts.md
diff --git a/website/qumat/qdp/examples/index.md b/docs/qumat/qdp/examples.md
similarity index 100%
copy from website/qumat/qdp/examples/index.md
copy to docs/qumat/qdp/examples.md
diff --git a/docs/qumat/qdp/getting-started.md b/docs/qumat/qdp/getting-started.md
new file mode 100644
index 000000000..4477ab933
--- /dev/null
+++ b/docs/qumat/qdp/getting-started.md
@@ -0,0 +1,8 @@
+---
+layout: page
+title: Getting Started with QDP
+---
+
+# Getting Started
+
+<!-- TODO: Add getting started guide for QDP -->
diff --git a/website/qumat/qdp/index.md b/docs/qumat/qdp/index.md
similarity index 50%
copy from website/qumat/qdp/index.md
copy to docs/qumat/qdp/index.md
index 1f73ea0cb..8b5803f7f 100644
--- a/website/qumat/qdp/index.md
+++ b/docs/qumat/qdp/index.md
@@ -1,5 +1,4 @@
 ---
-layout: page
 title: QDP - Quantum Data Plane
 ---
 
@@ -7,7 +6,7 @@ title: QDP - Quantum Data Plane
 
 QDP (Quantum Data Plane) is a high-performance GPU-accelerated library for encoding classical data into quantum states.
 
-- [Getting Started](/qumat/qdp/getting-started)
-- [Core Concepts](/qumat/qdp/concepts)
-- [API Reference](/qumat/qdp/api)
-- [Examples](/qumat/qdp/examples)
+- [Getting Started](./getting-started)
+- [Core Concepts](./concepts)
+- [API Reference](./api)
+- [Examples](./examples)
diff --git a/website/qumat/quantum-computing-primer/10_advanced_topics/index.md b/docs/qumat/quantum-computing-primer/advanced-topics.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/10_advanced_topics/index.md
copy to docs/qumat/quantum-computing-primer/advanced-topics.md
diff --git a/website/qumat/quantum-computing-primer/09_applications/index.md b/docs/qumat/quantum-computing-primer/applications.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/09_applications/index.md
copy to docs/qumat/quantum-computing-primer/applications.md
diff --git a/website/qumat/quantum-computing-primer/index.md b/docs/qumat/quantum-computing-primer/index.md
similarity index 66%
copy from website/qumat/quantum-computing-primer/index.md
copy to docs/qumat/quantum-computing-primer/index.md
index f601d2a74..1a676410e 100644
--- a/website/qumat/quantum-computing-primer/index.md
+++ b/docs/qumat/quantum-computing-primer/index.md
@@ -1,11 +1,10 @@
 ---
-layout: page
 title: Quantum Computing Primer
 ---
 
 # Quantum Computing Primer
 
-## [1. Introduction to Quantum Computing](01_introduction/)
+## [1. Introduction to Quantum Computing](./introduction)
 - **1.1 What is Quantum Computing?**
 - **1.2 Why Quantum Computing?**
 
@@ -13,38 +12,38 @@ title: Quantum Computing Primer
 - **2.1 Installing `qumat` (TODO)**
 - **2.2 Overview of `qumat` (TODO)**
 
-## [3. Quantum Bits (Qubits)](03_qubits/)
+## [3. Quantum Bits (Qubits)](./qubits)
 - **3.1 Classical Bits vs. Qubits**
 - **3.2 Representing Qubits**
 - **3.3 Creating Qubits with `qumat`**
 
-## [4. Quantum Gates](04_quantum_gates/)
+## [4. Quantum Gates](./quantum-gates)
 - **4.1 Single-Qubit Gates**
 - **4.2 Multi-Qubit Gates**
 - **4.3 Applying Gates with `qumat`**
 
-## [5. Quantum Circuits](05_quantum_circuits/)
+## [5. Quantum Circuits](./quantum-circuits)
 - **5.1 Building Quantum Circuits**
 - **5.2 Visualizing Circuits**
 
-## [6. Quantum Entanglement](06_quantum_entanglement/)
+## [6. Quantum Entanglement](./quantum-entanglement)
 - **6.1 Understanding Entanglement**
 - **6.2 Entanglement with `qumat`**
 
-## [7. Quantum Algorithms](07_quantum_algorithms/)
+## [7. Quantum Algorithms](./quantum-algorithms)
 - **7.1 Deutsch-Jozsa Algorithm**
 - **7.2 Grover's Algorithm**
 
-## [8. Quantum Error Correction](08_quantum_error_correction/)
+## [8. Quantum Error Correction](./quantum-error-correction)
 - **8.1 Introduction to Quantum Error Correction**
 - **8.2 Implementing Error Correction with `qumat`**
 
-## [9. Applications of Quantum Computing](09_applications/)
+## [9. Applications of Quantum Computing](./applications)
 - **9.1 Quantum Cryptography**
 - **9.2 Quantum Simulation**
 - **9.3 Quantum Machine Learning**
 
-## [10. Advanced Topics](10_advanced_topics/)
+## [10. Advanced Topics](./advanced-topics)
 - **10.1 Quantum Fourier Transform**
 - **10.2 Quantum Phase Estimation**
 - **10.3 Quantum Annealing**
diff --git a/website/qumat/quantum-computing-primer/01_introduction/index.md b/docs/qumat/quantum-computing-primer/introduction.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/01_introduction/index.md
copy to docs/qumat/quantum-computing-primer/introduction.md
diff --git a/website/qumat/quantum-computing-primer/07_quantum_algorithms/index.md b/docs/qumat/quantum-computing-primer/quantum-algorithms.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/07_quantum_algorithms/index.md
copy to docs/qumat/quantum-computing-primer/quantum-algorithms.md
diff --git a/website/qumat/quantum-computing-primer/05_quantum_circuits/index.md b/docs/qumat/quantum-computing-primer/quantum-circuits.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/05_quantum_circuits/index.md
copy to docs/qumat/quantum-computing-primer/quantum-circuits.md
diff --git a/website/qumat/quantum-computing-primer/06_quantum_entanglement/index.md b/docs/qumat/quantum-computing-primer/quantum-entanglement.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/06_quantum_entanglement/index.md
copy to docs/qumat/quantum-computing-primer/quantum-entanglement.md
diff --git a/website/qumat/quantum-computing-primer/08_quantum_error_correction/index.md b/docs/qumat/quantum-computing-primer/quantum-error-correction.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/08_quantum_error_correction/index.md
copy to docs/qumat/quantum-computing-primer/quantum-error-correction.md
diff --git a/website/qumat/quantum-computing-primer/04_quantum_gates/index.md b/docs/qumat/quantum-computing-primer/quantum-gates.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/04_quantum_gates/index.md
copy to docs/qumat/quantum-computing-primer/quantum-gates.md
diff --git a/website/qumat/quantum-computing-primer/03_qubits/index.md b/docs/qumat/quantum-computing-primer/qubits.md
similarity index 100%
copy from website/qumat/quantum-computing-primer/03_qubits/index.md
copy to docs/qumat/quantum-computing-primer/qubits.md
diff --git a/website/.bundle/config b/website/.bundle/config
deleted file mode 100644
index ae2bf800f..000000000
--- a/website/.bundle/config
+++ /dev/null
@@ -1,2 +0,0 @@
----
-BUNDLE_PATH: "~/.rvm/gems"
diff --git a/website/.gitignore b/website/.gitignore
new file mode 100644
index 000000000..b2d6de306
--- /dev/null
+++ b/website/.gitignore
@@ -0,0 +1,20 @@
+# Dependencies
+/node_modules
+
+# Production
+/build
+
+# Generated files
+.docusaurus
+.cache-loader
+
+# Misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
diff --git a/website/.htaccess b/website/.htaccess
deleted file mode 100644
index 98b7a28a9..000000000
--- a/website/.htaccess
+++ /dev/null
@@ -1,38 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.
-
-# Enable custom error pages
-ErrorDocument 404 /404.html
-ErrorDocument 410 /404.html
-
-# Legacy documentation paths
-# These paths were removed in January 2026 when Mahout transitioned to Qumat
-
-# Legacy MapReduce algorithm documentation
-RedirectMatch 410 ^/users/(.*)$
-RedirectMatch 410 ^/documentation/users/(.*)$
-RedirectMatch 410 ^/documentation/tutorials/(.*)$
-
-# Legacy classification docs
-RedirectMatch 410 ^/users/classification/(.*)$
-
-# Legacy clustering docs
-RedirectMatch 410 ^/users/clustering/(.*)$
-
-# Legacy recommender docs
-RedirectMatch 410 ^/users/recommender/(.*)$
-
-# Legacy Spark/Flink bindings
-RedirectMatch 410 ^/users/sparkbindings/(.*)$
-RedirectMatch 410 ^/users/flinkbindings/(.*)$
-
-# Legacy basics/quickstart
-RedirectMatch 410 ^/users/basics/(.*)$
-
-# Old release notes
-RedirectMatch 410 ^/release-notes/(.*)$
-
-# Redirect old qumat documentation path to new structure
-RedirectMatch 301 ^/documentation/qumat/?$ /qumat/
-RedirectMatch 301 ^/quantum-computing-primer/?$ /qumat/quantum-computing-primer/
-RedirectMatch 301 ^/quantum-computing-primer/(.*)$ /qumat/quantum-computing-primer/$1
diff --git a/website/404.html b/website/404.html
deleted file mode 100644
index 631668f6b..000000000
--- a/website/404.html
+++ /dev/null
@@ -1,58 +0,0 @@
----
-layout: page
-title: Page Not Found
-permalink: /404.html
----
-
-
-<div style="background-color: #fff3cd; color: #856404; border: 1px solid #ffeeba; padding: 20px; border-radius: 5px; margin-bottom: 30px;">
-  <strong>Looking for classic Mahout documentation?</strong>
-  <p style="margin-bottom: 0; margin-top: 10px;">
-    Apache Mahout has evolved significantly over its 15+ year history. The legacy MapReduce and Samsara
-    documentation you may be looking for has been retired. Mahout now focuses on
-    <strong>Qumat</strong>, our quantum computing library.
-  </p>
-</div>
-
-<div style="text-align: center; padding: 40px 20px;">
-  <h1 style="font-size: 4rem; color: #dc3545; margin-bottom: 0;">404</h1>
-  <h2 style="color: #6c757d;">Page Not Found</h2>
-</div>
-
-<h3>Current Documentation</h3>
-
-<p>Explore the current Apache Mahout project:</p>
-
-<ul>
-  <li><a href="/qumat/">Qumat Overview</a> - High-level quantum computing library</li>
-  <li><a href="/qumat/core/">Qumat Core</a> - Build quantum circuits with a unified API for Qiskit, Cirq, and Amazon Braket</li>
-  <li><a href="/qumat/qdp/">QDP (Quantum Data Plane)</a> - GPU-accelerated quantum data encoding</li>
-  <li><a href="/qumat/quantum-computing-primer/">Quantum Computing Primer</a> - Learn quantum computing fundamentals</li>
-</ul>
-
-<h3>Looking for Historical Documentation?</h3>
-
-<p>
-  If you need to reference legacy Mahout documentation (MapReduce algorithms, classic machine learning,
-  Spark/Flink bindings, Samsara), you can find archived versions on the
-  <a href="https://web.archive.org/web/*/mahout.apache.org/*" target="_blank" rel="noopener">Internet Archive Wayback Machine</a>.
-</p>
-
-<p>Archived documentation:</p>
-<ul>
-  <li><a href="https://web.archive.org/web/20190827090545/http://mahout.apache.org/users/basics/quickstart.html" target="_blank" rel="noopener">Quick Start Guide</a></li>
-  <li><a href="https://web.archive.org/web/20180916081158/http://mahout.apache.org/users/clustering/clustering-of-synthetic-control-data.html" target="_blank" rel="noopener">Clustering Documentation</a></li>
-  <li><a href="https://web.archive.org/web/20200220174941/http://mahout.apache.org/users/classification/bayesian.html" target="_blank" rel="noopener">Classification - Bayesian</a></li>
-  <li><a href="https://web.archive.org/web/20200208114131/http://mahout.apache.org/users/recommender/recommender-documentation.html" target="_blank" rel="noopener">Recommender Documentation</a></li>
-</ul>
-
-<h3>Need Help?</h3>
-
-<p>
-  <a href="https://github.com/apache/mahout/issues">Open an issue on GitHub</a> or join the
-  <a href="mailto:dev@mahout.apache.org">dev mailing list</a> if you have questions.
-</p>
-
-<p style="text-align: center; margin-top: 40px;">
-  <a href="/" class="btn btn-primary">Return to Homepage</a>
-</p>
diff --git a/website/Gemfile b/website/Gemfile
deleted file mode 100644
index 98743eede..000000000
--- a/website/Gemfile
+++ /dev/null
@@ -1,54 +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.
-#
-
-source "https://rubygems.org"
-
-# Hello! This is where you manage which Jekyll version is used to run.
-# When you want to use a different version, change it below, save the
-# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
-#
-#     bundle exec jekyll serve
-#
-# This will help ensure the proper Jekyll version is running.
-# Happy Jekylling!
-gem "logger"
-gem "csv"
-gem "base64"
-gem "webrick"  # Required for Ruby 3.4.0+
-gem "jekyll", "4.3.2"
-gem 'jekyll-latex'
-gem "jekyll-redirect-from"
-
-
-# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
-# uncomment the line below. To upgrade, run `bundle update github-pages`.
-# gem "github-pages", group: :jekyll_plugins
-
-# If you have any plugins, put them here!
-group :jekyll_plugins do
-   gem "jekyll-feed", "~> 0.6"
-end
-
-# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
-gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
-
-require 'rbconfig'
-   if RbConfig::CONFIG['target_os'] =~ /darwin(1[0-3])/i
-   gem 'rb-fsevent', '<= 0.9.4'
-end
diff --git a/website/README.md b/website/README.md
index 3f423b046..ba7caa00e 100644
--- a/website/README.md
+++ b/website/README.md
@@ -1,80 +1,289 @@
-<!--
- 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
+# Apache Mahout Website
 
-     http://www.apache.org/licenses/LICENSE-2.0
+This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator.
 
- 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.
--->
+## Quick Start
 
-# The below are the steps to Setup the Apache Mahout Project Locally
+```bash
+cd website-new
+npm install
+npm run start
+```
+
+This starts a local development server at `http://localhost:3000` with hot reload.
+
+## Architecture
+
+### Documentation Source of Truth
 
-## 0. Fork the repository
+**`/docs/`** (at repository root) is the **source of truth** for ALL documentation.
+
+```
+/docs/                          ← SOURCE OF TRUTH (edit here!)
+├── index.md                    # Main QuMat overview
+├── qumat/                      # Qumat documentation
+│   ├── core/                   # Qumat Core docs
+│   ├── qdp/                    # QDP docs
+│   ├── quantum-computing-primer/
+│   └── papers/
+├── qdp/                        # QDP package internals
+├── community/                  # Community pages
+├── about/                      # About pages
+├── download/                   # Download pages
+├── api.md, basic-gates.md...   # API reference docs
+└── adr/                        # Architecture decisions
+
+/website-new/docs/              ← BUILD ARTIFACT (auto-synced, don't edit!)
+├── .gitignore                  # Only tracked file
+└── [everything synced from /docs/]
+```
 
-Fork the repository to your own github account.
+### Sync Workflow
 
-## 1. Clone the repository
+The sync script copies `/docs/` to `website-new/docs/` at build time:
 
 ```bash
-git clone https://github.com/username/mahout.git
-cd mahout
+npm run sync      # Manual sync
+npm run start     # Auto-syncs before starting dev server
+npm run build     # Auto-syncs before building
 ```
 
-Replace username with your github username.
+**Important:**
+- Edit ALL documentation in `/docs/`, NOT in `website-new/docs/`
+- `website-new/docs/` is gitignored (except `.gitignore` itself)
+- Changes in `website-new/docs/` will be overwritten on next sync
 
-## 2. Install Jekyll Locally
+## Adding New Documentation
 
-### Prerequisites
+### 1. Add a New Doc Page
 
-- Ruby Version 2.7.0 or higher
-- RubyGems
-- GCC and Make
+Create a markdown file in `/docs/`:
 
-### After installing the above pre-requisites, run the following in Terminal
+```markdown
+---
+title: My New Page
+---
 
-```terminal
-gem install jekyll bundler
+# My New Page
+
+Content here...
 ```
 
-## 3. Serve the website locally
+### 2. Add to Sidebar
+
+Edit `website-new/sidebars.ts`:
+
+```typescript
+const sidebars: SidebarsConfig = {
+  docsSidebar: [
+    // ... existing items
+    {
+      type: 'category',
+      label: 'My Section',
+      items: [
+        'my-new-page',           // matches /docs/my-new-page.md
+        'folder/another-page',   // matches /docs/folder/another-page.md
+      ],
+    },
+  ],
+};
+```
 
-### Once the jekyll is installed, navigate to the website folder of the mahout folder that is cloned in your system
+### 3. Rebuild
 
 ```bash
-cd website
+npm run sync   # Sync changes from /docs/
+npm run start  # Start dev server to preview
+```
+
+## File Naming Convention
+
+Use **kebab-case** for all documentation files:
+
 ```
+✅ getting-started.md
+✅ quantum-gates.md
+✅ basic-gates.md
+
+❌ getting_started.md
+❌ GettingStarted.md
+```
+
+This creates clean URLs like `/docs/getting-started`.
+
+## Frontmatter
+
+Every doc should have frontmatter:
+
+```markdown
+---
+title: Page Title              # Required: displayed in browser tab
+sidebar_label: Short Label     # Optional: shorter name for sidebar
+sidebar_position: 1            # Optional: order in auto-generated sidebars
+---
+```
+
+## Adding Images
+
+1. Place images in `/docs/assets/` (for code docs) or `website-new/static/img/` (for website)
+2. Reference in markdown:
+
+```markdown
+![Alt text](./assets/my-image.png)        # Relative path (in /docs/)
+![Alt text](/img/my-image.png)            # Absolute path (in static/)
+```
+
+## Math/LaTeX
+
+KaTeX is enabled for math rendering:
+
+```markdown
+Inline math: $E = mc^2$
+
+Block math:
+$$
+\ket{\psi} = \alpha\ket{0} + \beta\ket{1}
+$$
+```
+
+## Code Blocks
 
-### Run the following command while in website directory
+Syntax highlighting is available for: Python, Java, Scala, Rust, Bash, and more.
+
+````markdown
+```python
+from qumat import QumatCircuit
+
+circuit = QumatCircuit(2)
+circuit.h(0)
+```
+````
+
+## Versioning
+
+### Current Versions
+
+- **0.5-dev** - Current development version (synced from `/docs/`)
+- **0.4** - Stable release snapshot
+
+### Creating a New Version
+
+When releasing, snapshot the current docs:
 
 ```bash
-bundle exec jekyll serve
+npm run docusaurus docs:version 0.5
 ```
 
-### After running this, you would see the project locally setup at <http://localhost:4000/>
+This creates:
+- `versioned_docs/version-0.5/` - Frozen snapshot
+- Updates `versions.json`
+
+### Version Configuration
 
-## 4. Trouble Shooting
+Edit `docusaurus.config.ts`:
 
-### Note: If you find any errors running the above command, make sure that jekyll is upto date and ruby is installed on your system
+```typescript
+docs: {
+  lastVersion: 'current',
+  versions: {
+    current: {
+      label: '0.6-dev',
+      path: '',
+    },
+    '0.5': {
+      label: '0.5',
+      path: '0.5',
+    },
+  },
+}
+```
+
+## Blog Posts
+
+Blog posts live in `website-new/blog/`:
+
+```markdown
+---
+title: My Blog Post
+date: 2026-01-22
+tags: [news, release]
+---
+
+Content here...
+
+<!--truncate-->
+
+More content after the fold...
+```
 
-### To install ruby in your system, run the following command in terminal
+## Building for Production
 
 ```bash
-brew install ruby
+npm run build    # Creates production build in /build
+npm run serve    # Serve production build locally
 ```
 
-### How to post minutes on the home page
+## Deployment
+
+GitHub Actions automatically deploys to `asf-site` branch when changes are pushed to `main`.
+
+Triggers:
+- Changes to `website-new/**`
+- Changes to `docs/**`
+- Changes to `qdp/docs/**`
+
+## Troubleshooting
+
+### Broken Links
+
+The build will warn about broken links. Fix them in the source files (`/docs/`).
+
+### Sidebar Not Updating
+
+1. Run `npm run sync` to re-sync from `/docs/`
+2. Check `sidebars.ts` for correct document IDs
+3. Document IDs are based on file path without `.md` extension
+
+### Doc ID Format
+
+Document IDs are derived from file paths:
+- `/docs/getting-started.md` → `getting-started`
+- `/docs/qumat/core/api.md` → `qumat/core/api`
+- Numeric prefixes are stripped: `001-migration.md` → `migration`
+
+## Project Structure
+
+```
+website-new/
+├── docusaurus.config.ts    # Main configuration
+├── sidebars.ts             # Sidebar navigation
+├── package.json
+├── scripts/
+│   └── sync-docs.js        # Documentation sync script
+├── docs/                   # Synced docs + website-only content
+├── versioned_docs/         # Version snapshots
+├── blog/                   # Blog posts
+├── src/
+│   ├── components/         # React components
+│   ├── css/custom.css      # Theme customization
+│   └── pages/              # Custom pages (homepage)
+└── static/                 # Static assets (images, etc.)
+```
+
+## Useful Commands
+
+| Command | Description |
+|---------|-------------|
+| `npm run start` | Start dev server with hot reload |
+| `npm run build` | Build production site |
+| `npm run serve` | Serve production build locally |
+| `npm run sync` | Sync docs from /docs/ |
+| `npm run docusaurus docs:version X.Y` | Create version snapshot |
+| `npm run clear` | Clear Docusaurus cache |
+
+## Resources
 
-1. Make a new GitHub Discussion like <https://github.com/apache/mahout/discussions/541>
-2. Copy the latest Minutes in _posts to a new file, e.g., `cp 2025-05-16-Meeting-Minutes.md 2025-06-13-Meeting-Minutes.md`
-3. Edit the new Minutes to reflect the new Discussion link (and update the datestamp and attendees)
-4. Add and commit, make a PR
-5. The site will automatically build
-6. Notify Slack and Twitter
+- [Docusaurus Documentation](https://docusaurus.io/docs)
+- [Markdown Features](https://docusaurus.io/docs/markdown-features)
+- [Sidebar Configuration](https://docusaurus.io/docs/sidebar)
+- [Versioning](https://docusaurus.io/docs/versioning)
diff --git a/website/_config.yml b/website/_config.yml
deleted file mode 100644
index 575d2e4e8..000000000
--- a/website/_config.yml
+++ /dev/null
@@ -1,65 +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.
-#
-
-title : Apache Mahout
-description: Distributed Linear Algebra
-
-mahout-version: 0.4
-
-author :
-  name : The Apache Software Foundation
-  email : dev@mahout.apache.org
-  github : apache
-  twitter : ApacheMahout
-
-url: http://mahout.apache.org/
-
-# Serving
-detach:   false
-port:     4000
-host:     127.0.0.1
-baseurl:  ""
-
-
-# Build settings
-markdown: kramdown
-kramdown:
-  math_engine: mathjax
-  syntax_highlighter: rouge
-plugins:
-  - jekyll-feed
-  - jekyll-latex
-  - jekyll-redirect-from
-
-# Exclude from processing.
-# The following items will not be processed, by default. Create a custom list
-# to override the default setting.
-exclude:
-  - Gemfile
-  - Gemfile.lock
-#   - node_modules
-#   - vendor/bundle/
-#   - vendor/cache/
-#   - vendor/gems/
-#   - vendor/ruby/
-
-collections:
-  papers:
-    output: true
-    permalink: /qumat/papers/:name/
diff --git a/website/_includes/analytics.html b/website/_includes/analytics.html
deleted file mode 100644
index 624e02aef..000000000
--- a/website/_includes/analytics.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- Matomo -->
-<script>
-  var _paq = window._paq = window._paq || [];
-  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
-  _paq.push(["setDoNotTrack", true]);
-  _paq.push(["disableCookies"]);
-  _paq.push(['trackPageView']);
-  _paq.push(['enableLinkTracking']);
-  (function() {
-    var u="https://analytics.apache.org/";
-    _paq.push(['setTrackerUrl', u+'matomo.php']);
-    _paq.push(['setSiteId', '70']);
-    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
-    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
-  })();
-</script>
-<!-- End Matomo Code -->
diff --git a/website/_includes/doc-navbar.html b/website/_includes/doc-navbar.html
deleted file mode 100644
index bf7bcfa7b..000000000
--- a/website/_includes/doc-navbar.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<nav class="navbar navbar-expand-lg navbar-light bg-light navbar-mahout">
-
-    <div class="container">
-
-        <a class="navbar-brand" href="/">
-            <img src="/assets/mahout-logo-blue.svg" alt="">
-        </a>
-
-        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
-            <span class="navbar-toggler-icon"></span>
-        </button>
-
-        <div class="collapse navbar-collapse" id="navbarSupportedContent">
-
-            <div class="navbar-nav ml-auto">
-
-                <!-- Quick Start -->
-                <li class="nav-item">
-                    <a class="nav-link" href="/docs/latest" >Overview</a>
-                </li>
-
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Key Concepts</a>
-                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
-                        <a class="dropdown-item"  href="/docs/latest/index.html">Mahout Overview</a>
-                        <div class="dropdown-divider"></div>
-                        <h6 class="dropdown-header">Scala DSL</h6>
-                        <a class="dropdown-item"  href="/docs/latest/mahout-samsara/in-core-reference.html">In-core Reference</a>
-                        <a class="dropdown-item"  href="/docs/latest/mahout-samsara/out-of-core-reference.html">Out-of-core Reference</a>
-                        <a class="dropdown-item"  href="/docs/latest/mahout-samsara/faq.html">Samsara FAQ</a>
-                        <div class="dropdown-divider"></div>
-                        <h6 class="dropdown-header">Distributed Engine Bindings</h6>
-                        <a class="dropdown-item"  href="/docs/latest/distributed/spark-bindings/">Spark Bindings</a>
-                        <a class="dropdown-item"  href="/docs/latest/distributed/flink-bindings.html">Flink Bindings</a>
-                        <a class="dropdown-item"  href="/docs/latest/distributed/flink-bindings.html">H20 Bindings</a>
-                        <!--<div class="dropdown-divider"></div>
-                        <h6 class="dropdown-header">Native Solvers</h6>
-                        <a class="dropdown-item"  href="/docs/latest/native-solvers/viennacl.html">ViennaCL</a></li>
-                        <a class="dropdown-item"  href="/docs/latest/native-solvers/viennacl-omp.html">ViennaCL-OMP</a></li>
-                        <a class="dropdown-item"  href="/docs/latest/native-solvers/cuda.html">CUDA</a></li>-->
-                    </div>
-                </li>
-
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Tutorial</a>
-                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
-                        <div class="dropdown-divider"></div>
-                        <h6 class="dropdown-header">Recommenders</h6>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/cco-lastfm">CCO Example with Last.FM Data</a>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/intro-cooccurrence-spark">Introduction to Cooccurrence in Spark</a>
-                        <div class="dropdown-divider"></div>
-                        <h6 class="dropdown-header">Mahout Samsara</h6>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/samsara/play-with-shell.html">Playing with Samsara in Spark Shell</a>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/samsara/playing-with-samsara-flink-batch.html">Playing with Samsara in Flink Batch</a>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/samsara/classify-a-doc-from-the-shell.html">Text Classification (Shell)</a>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/samsara/spark-naive-bayes.html">Spark Naive Bayes</a>
-                        <div class="dropdown-divider"></div>
-                        <h6 class="dropdown-header">Misc</h6>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/misc/getting-started-with-zeppelin">Mahout in Apache Zeppelin (Quickstart)</a>
-<!--                        <a class="dropdown-item"  href="/docs/latest/tutorials/misc/mahout-in-zeppelin">Mahout in Apache Zeppelin (Roll your own)</a>-->
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/misc/contributing-algos">How To Contribute a New Algorithm</a>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/misc/how-to-build-an-app.html">How To Build An App</a>
-                        <div class="dropdown-divider"></div>
-                        <h6 class="dropdown-header">Deprecated</h6>
-                        <a class="dropdown-item"  href="/docs/latest/tutorials/map-reduce">MapReduce</a>
-                    </div>
-                </li>
-
-
-                <!-- Algorithms (Samsara / MR) -->
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Algorithms</a>
-                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
-                        <a class="dropdown-item"  href="/docs/latest/algorithms/linear-algebra">Distributed Linear Algebra</a>
-                        <a class="dropdown-item"  href="/docs/latest/algorithms/preprocessors">Preprocessors</a>
-                        <a class="dropdown-item"  href="/docs/latest/algorithms/regression">Regression</a>
-                        <a class="dropdown-item"  href="/docs/latest/algorithms/clustering">Clustering</a>
-                        <a class="dropdown-item"  href="/docs/latest/algorithms/recommenders">Recommenders</a>
-                        <div class="dropdown-divider"></div>
-                        <h6 class="dropdown-header">Deprecated</h6>
-                        <a class="dropdown-item"  href="/docs/latest/algorithms/map-reduce">MapReduce <i>(deprecated)</i></a>
-                    </div>
-                        <!--<a class="dropdown-item"  href="/docs/latest/algorithms/recommenders/recommender-overview.html">Reccomender Overview</a></li> Do we still need? seems like short version of next post-->
-                        <!--
-                        <a class="dropdown-item"  href="/docs/latest/algorithms/recommenders/intro-cooccurrence-spark.html">Intro to Coocurrence With Spark</a></li>
-                        <li role="separator" class="divider"></li>
-                        <li><span>&nbsp;&nbsp;<a href="/docs/latest/algorithms/map-reduce"><b>MapReduce</b> (deprecated)</a><span></li>
-
-
-                     -->
-                </li>
-
-                <!-- Scala /docs -->
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">API /docs</a>
-                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
-                        <a class="dropdown-item"  href="/docs/0.13.0/api/docs/">0.13.0</a>
-                    </div>
-                </li>
-
-                <!-- Apache -->
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Apache</a>
-                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
-                        <a class="dropdown-item"  href="http://www.apache.org/foundation/how-it-works.html">Apache Software Foundation</a>
-                        <a class="dropdown-item"  href="http://www.apache.org/licenses/">Apache License</a>
-                        <a class="dropdown-item"  href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
-                        <a class="dropdown-item"  href="http://www.apache.org/foundation/thanks.html">Thanks</a>
-                    </div>
-                </li>
-
-            </ul>
-
-                <!--<form class="navbar-form navbar-left">-->
-                    <!--<div class="form-group">-->
-                        <!--<input type="text" class="form-control" placeholder="Search">-->
-                    <!--</div>-->
-                    <!--<button type="submit" class="btn btn-default">Submit</button>-->
-                <!--</form>-->
-                <!--<ul class="nav navbar-nav navbar-right">-->
-                    <!--<a class="dropdown-item"  href="http://github.com/apache/mahout">Github</a></li>-->
-
-
-
-                <!--</ul>-->
-        </div><!-- /.navbar-collapse -->
-    </div>
-</nav>
diff --git a/website/_includes/footer.html b/website/_includes/footer.html
deleted file mode 100644
index f5926559a..000000000
--- a/website/_includes/footer.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<footer class="footer bg-light">
-    <div class="container text-center small">
-        Copyright &copy; 2014-{{ site.time | date: '%Y' }} <a href="http://www.apache.org/">The Apache Software Foundation</a>, Licensed under the Apache License, Version 2.0.
-    </div>
-</footer>
diff --git a/website/_includes/head.html b/website/_includes/head.html
deleted file mode 100644
index f0a0a792a..000000000
--- a/website/_includes/head.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<head>
-  <meta charset="utf-8">
-  <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <meta name="viewport" content="width=device-width, initial-scale=1">
-
-  <title>
-    {% if page.title %}{{ page.title | escape }}
-    {% else %}{{ site.title | escape }}
-    {% endif %}
-  </title>
-
-  <meta name="description" content="{{ page.excerpt | default: site.description | strip_html | normalize_whitespace | truncate: 160 | escape }}">
-
-  <link rel="stylesheet" href="{{'/assets/css/main.css' | relative_url }}">
-  <link rel="stylesheet" href="{{'/assets/css/github-markdown.css' | relative_url }}">
-
-  <!-- Font Awesome -->
-  <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
-
-  <!-- Google Fonts -->
-  <link href="https://fonts.googleapis.com/css?family=Maven+Pro:400,500" rel="stylesheet">
-  <link href="https://fonts.googleapis.com/css?family=Muli:400,400i,700,700i" rel="stylesheet">
-
-  <link rel="canonical" href="{{ page.url | replace:'index.html','' | absolute_url }}">
-  <link rel="alternate" type="application/rss+xml" title="{{ site.title | escape }}" href="{{'/feed.xml' | relative_url }}">
-
-  <!-- MathJax 3 Configuration (self-hosted to comply with CSP) -->
-  <script>
-    MathJax = {
-      tex: {
-        inlineMath: [['$', '$'], ['\\(', '\\)']],
-        displayMath: [['$$', '$$'], ['\\[', '\\]']],
-        processEscapes: true,
-        tags: 'ams'
-      },
-      options: {
-        skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre']
-      }
-    };
-  </script>
-  <script type="text/javascript" src="/assets/vendor/mathjax/tex-chtml.js" async></script>
-</head>
diff --git a/website/_includes/navbar.html b/website/_includes/navbar.html
deleted file mode 100644
index 1a2cf4126..000000000
--- a/website/_includes/navbar.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<nav class="navbar navbar-expand-lg navbar-light bg-light navbar-mahout">
-
-    <div class="container">
-
-        <a class="navbar-brand" href="/">
-          <img src="/assets/mahout-logo-blue.svg" alt="">
-        </a>
-
-        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
-            <span class="navbar-toggler-icon"></span>
-        </button>
-
-        <div class="collapse navbar-collapse" id="navbarSupportedContent">
-
-            <ul class="navbar-nav ml-auto">
-
-                <!-- About -->
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle"
-                       href="" id="navbarDropdownMenuLink-about"
-                       data-toggle="dropdown"
-                       aria-haspopup="true"
-                       aria-expanded="false">About</a>
-                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
-                        <a class="dropdown-item"
-                           href="https://www.apache.org/foundation/how-it-works.html">Overview of the Apache Software Foundation</a>
-                        <a class="dropdown-item"
-                           href="/about/how-to-contribute.html">How to Contribute</a>
-                    </div>
-                </li>
-
-                <!-- Qumat -->
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle"
-                       href="" id="navbarDropdownMenuLink-qumat"
-                       data-toggle="dropdown"
-                       aria-haspopup="true"
-                       aria-expanded="false">Qumat</a>
-                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
-                        <a class="dropdown-item"
-                           href="/qumat">Overview</a>
-                        <a class="dropdown-item"
-                           href="/qumat/core">Qumat Core</a>
-                        <a class="dropdown-item"
-                           href="/qumat/qdp">QDP (Quantum Data Plane)</a>
-                        <a class="dropdown-item"
-                           href="/qumat/quantum-computing-primer">Quantum Computing Primer</a>
-                        <a class="dropdown-item"
-                           href="/qumat/papers">Papers</a>
-                    </div>
-                </li>
-
-                <!-- Download -->
-                <li class="nav-item">
-                    <a class="nav-link"
-                       href="/download/downloads.html">Download</a>
-                </li>
-
-                <!-- Community -->
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle"
-                       href="" id="navbarDropdownMenuLink-community"
-                       data-toggle="dropdown"
-                       aria-haspopup="true"
-                       aria-expanded="false">Community</a>
-                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
-
-                        <a class="dropdown-item"
-                           href="/community/">Overview</a>
-                        <a class="dropdown-item"
-                           href="/community/who-we-are.html">Who We Are</a>
-                        <a class="dropdown-item"
-                           href="/community/mailing-lists.html">Mailing Lists</a>
-                        <a class="dropdown-item"
-                           href="https://issues.apache.org/jira/browse/MAHOUT">Issue Tracker</a>
-                        <a class="dropdown-item"
-                           href="/community/coc.html">Code of Conduct</a>
-                    </div>
-                </li>
-
-                <!-- News -->
-                <li class="nav-item">
-                    <a class="nav-link"
-                       href="/news.html">News</a>
-                </li>
-
-                <!-- GitHub -->
-                <li class="nav-item">
-                    <a class="nav-link" href="http://github.com/apache/mahout"><i class="fa fa-github"></i></a>
-                </li>
-
-            </ul>
-
-            <!-- <form class="form-inline my-2 my-lg-0">
-            <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
-            <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
-        </form> -->
-
-        </div>
-
-    </div>
-
-</nav>
diff --git a/website/_includes/posts/post-preview.html b/website/_includes/posts/post-preview.html
deleted file mode 100644
index 62fc4d8ce..000000000
--- a/website/_includes/posts/post-preview.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<div class="card card-post-preview mb-4">
-  <div class="card-body">
-    <div class="row no-gutters">
-      <div class="col-3 d-none d-md-flex my-auto card-post-img">
-        {% if post.image %}
-          <img class="rounded-circle img-fluid d-flex mx-auto" src="{{ post.image }}">
-        {% else %}
-          <img class="rounded-circle img-fluid d-flex mx-auto" src="/assets/mahout-logo-blue.svg">
-        {% endif %}
-      </div>
-      <div class="col-12 col-md-9 card-post-text">
-        <div class="clearfix mb-3">
-          <ul class="list-inline float-md-left mb-md-0">
-            {% if post %}
-              {% assign categories = post.categories %}
-            {% else %}
-              {% assign categories = page.categories %}
-            {% endif %}
-            {% for category in categories %}
-              <li class="list-inline-item">
-                <a class="small text-uppercase" href="#">{{category}}</a>
-              </li>
-              {% unless forloop.last %}&nbsp;{% endunless %}
-            {% endfor %}
-          </ul>
-          <div class="float-md-right small text-muted">{{ post.date | date: '%B %d, %Y' }}</div>
-        </div>
-        <h3 class="card-title"><a href="{{ post.url }}">{{ post.title }}</a></h3>
-        <p>{{ post.excerpt | strip_html | truncatewords: 30 }}</p>
-        <a href="{{ post.url }}" class="btn btn-primary btn-sm">Read Post &rarr;</a>
-      </div>
-    </div>
-  </div>
-</div>
diff --git a/website/_includes/sidebar.html b/website/_includes/sidebar.html
deleted file mode 100644
index 834c8e9fe..000000000
--- a/website/_includes/sidebar.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!-- Qumat Release Banner -->
-<div class="card mb-4 sidebar">
-    <div class="card-header">
-        🚀 Qumat 0.4 Released!
-    </div>
-    <div class="card-body">
-        <p class="mb-2">Mahout's new quantum computing layer for building ML
-            circuits on simulators and real quantum hardware.</p>
-        <a href="/download/downloads.html">Download Qumat 0.4 →</a>
-    </div>
-</div>
-
-<!-- Apache Software Foundation Links -->
-<div class="card mb-4 sidebar">
-    <div class="card-header">
-        Apache Software Foundation
-    </div>
-    <div class="card-body">
-        <ul class="list-unstyled mb-0">
-            <li>
-                <a
-                    href="https://www.apache.org/foundation/how-it-works.html">Apache
-                    Software Foundation</a>
-            </li>
-            <li>
-                <a href="http://www.apache.org/licenses/">Apache License</a>
-            </li>
-            <li>
-                <a
-                    href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
-            </li>
-            <li>
-                <a
-                    href="http://www.apache.org/foundation/thanks.html">Thanks</a>
-            </li>
-        </ul>
-    </div>
-</div>
-
-<!-- Talks Widget -->
-<div class="card mb-4 sidebar">
-    <div class="card-header">
-        Talks
-    </div>
-    <div class="card-body">
-        <ul class="list mb-0">
-            <li>
-                FOSDEM 2025, Brussels Belgium - <a
-                    href="https://mirrors.dotsrc.org/fosdem/2025/k4401/fosdem-2025-5298-introducing-qumat-an-apache-mahout-joint-.av1.webm"
-                    target="_blank">Introducing Qumat!</a>
-                [<a
-                    href="https://fosdem.org/2025/schedule/event/fosdem-2025-5298-introducing-qumat-an-apache-mahout-joint-/"
-                    target="_blank">More Info</a>]
-                [<a
-                    href="https://fosdem.org/2025/events/attachments/fosdem-2025-5298-introducing-qumat-an-apache-mahout-joint-/slides/236541/Introdudi_JgkXqqT.pdf"
-                    target="_blank">Slides</a>]
-            </li>
-            <li>
-                FOSSY 2024, Portland Oregon - <a
-                    href="https://www.youtube.com/watch?v=tgFaUL1wYhY"
-                    target="_blank">
-                    QuMat: Apache Mahout's Quantum Computing Interface
-                </a>
-                [<a
-                    href="https://www.slideshare.net/slideshow/qumat_-apache-mahout-s-quantum-computing-interface-pptx/272300949"
-                    target="_blank">Slides</a>]
-            </li>
-        </ul>
-    </div>
-</div>
diff --git a/website/_layouts/default.html b/website/_layouts/default.html
deleted file mode 100644
index 1d5d03c07..000000000
--- a/website/_layouts/default.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ page.lang | default: site.lang | default: " en " }}">
-
-{% include head.html %}
-{% include analytics.html %}
-<body>
-
-  {% include navbar.html %}
-
-  {{ content }}
-  {% include footer.html %}
-  <script src="/assets/vendor/jquery/jquery-slim.min.js"></script>
-  <script src="/assets/vendor/popper/popper.min.js"></script>
-  <script src="/assets/vendor/bootstrap/js/bootstrap.min.js"></script>
-  <script src="/assets/header.js"></script>
-</body>
-</html>
diff --git a/website/_layouts/deprecated-docs.html b/website/_layouts/deprecated-docs.html
deleted file mode 100644
index 3d46cda4c..000000000
--- a/website/_layouts/deprecated-docs.html
+++ /dev/null
@@ -1,13 +0,0 @@
----
-layout: doc-default
----
-<div style="background-color: #fff3cd; color: #856404; border: 1px solid #ffeeba; padding: 15px; border-radius: 5px; margin-bottom: 20px;"> <strong>⚠️ Deprecation Notice:</strong> This component (<em>MapReduce/Samsara</em>) is no longer actively maintained. It remains accessible for historical reference but is not recommended for new development. Please check out <a href="https://mahout.apache.org/quantum-computing-primer/" style="color: #0c5460; text-decoration: underline;">Qumat - Maho [...]
-<div class="container mt-5 pb-4">
-
-  <div class="row">
-    <div class="col-lg-8 markdown-body">
-      {{ content }}
-    </div>
-  </div>
-
-</div>
diff --git a/website/_layouts/doc-default.html b/website/_layouts/doc-default.html
deleted file mode 100644
index 33b1e0052..000000000
--- a/website/_layouts/doc-default.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ page.lang | default: site.lang | default: " en " }}">
-
-{% include head.html %}
-
-<body>
-
-  {% include doc-navbar.html %}
-
-  {{ content }}
-
-  {% include footer.html %}
-
-  <script src="/assets/vendor/jquery/jquery-slim.min.js"></script>
-  <script src="/assets/vendor/popper/popper.min.js"></script>
-  <script src="/assets/vendor/bootstrap/js/bootstrap.min.js"></script>
-  <script src="/assets/header.js"></script>
-</body>
-
-</html>
diff --git a/website/_layouts/doc-page.html b/website/_layouts/doc-page.html
deleted file mode 100644
index c2e883f3c..000000000
--- a/website/_layouts/doc-page.html
+++ /dev/null
@@ -1,15 +0,0 @@
----
-layout: doc-default
----
-<div class="container mt-5 pb-4">
-
-  <div class="row">
-
-    <div class="col-lg-8 markdown-body">
-      {{ content }}
-    </div>
-
-
-  </div>
-
-</div>
diff --git a/website/_layouts/home.html b/website/_layouts/home.html
deleted file mode 100644
index 756b46638..000000000
--- a/website/_layouts/home.html
+++ /dev/null
@@ -1,36 +0,0 @@
----
-layout: default
----
-<div>
-  <header class="mahout-header">
-    <div class="mahout-header-upper">
-      <div class="container mt-auto">
-        <div class="row">
-          <div class="col-12">
-            <img src="/assets/mahout-logo-white.svg" alt="Apache Mahout">
-            <img class="asf-logo float-right" src="/assets/asf_new_logo.svg" alt="Apache Software Foundation">
-          </div>
-        </div>
-      </div>
-    </div>
-    <div class="mahout-header-lower">
-      <div class="container position-relative mb-auto">
-        <h2 class="mb-4">For Creating Scalable Performant Machine Learning Applications</h2>
-        <a class="btn btn-lg btn-light btn-download mb-3" href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=mahout/{{ site.mahout-version }}/mahout-qumat-{{ site.mahout-version }}.zip"><i class="fa fa-download"></i> Download Mahout Qumat</a>
-        <div class="small text-white mx-auto">Currently v{{ site.mahout-version }}</div>
-      </div>
-    </div>
-    <canvas id="waves" style="position: absolute; z-index: 0;"></canvas>
-  </header>
-
-  <div class="container mt-5 pb-4">
-    <div class="row">
-      <div class="col-lg-8 markdown-body">
-        {{ content }}
-      </div>
-      <div class="col-lg-4">
-        {% include sidebar.html %}
-      </div>
-    </div>
-  </div>
-</div>
diff --git a/website/_layouts/page.html b/website/_layouts/page.html
deleted file mode 100644
index dac882c87..000000000
--- a/website/_layouts/page.html
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: default
----
-<div class="container mt-5 pb-4">
-
-  <div class="row">
-
-    <div class="col-lg-8 markdown-body">
-      {{ content }}
-    </div>
-
-    <div class="col-lg-4">
-      {% include sidebar.html %}
-    </div>
-
-  </div>
-
-</div>
diff --git a/website/_layouts/post.html b/website/_layouts/post.html
deleted file mode 100644
index 280f24a29..000000000
--- a/website/_layouts/post.html
+++ /dev/null
@@ -1,27 +0,0 @@
----
-layout: default
----
-<div class="container mt-5 pb-4">
-
-  <article class="post" itemscope="itemscope" itemtype="http://schema.org/BlogPosting">
-
-    <header class="post-header">
-      <h1 class="post-title" itemprop="name headline">{{ page.title | escape }}</h1>
-      <p class="post-meta">
-        <time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
-          {{ page.date }}
-        </time>
-        {% if page.author %}
-          •
-          <span itemprop="author" itemscope="itemscope" itemtype="http://schema.org/Person"><span itemprop="name">{{ page.author }}</span></span>
-        {% endif %}
-      </p>
-    </header>
-
-    <div class="post-content markdown-body" itemprop="articleBody">
-      {{ content }}
-    </div>
-
-  </article>
-
-</div>
diff --git a/website/_posts/2020-10-10-version-14-1 b/website/_posts/2020-10-10-version-14-1
deleted file mode 100644
index 6e4b4aad9..000000000
--- a/website/_posts/2020-10-10-version-14-1
+++ /dev/null
@@ -1,11 +0,0 @@
----
-layout: post
-title: Version 14.1 Released
-date:   2020-10-10 01:01:01 -0600
-category: news
----
-
-
-### Version 14.1 is Released
-
-Oh happy day! We have _finally_ dropped 14.1, with binaries. Lots of exciting things coming to Mahout now that we can build, great thanks to everyone who helped get us here and to all the speakers at MahoutCon
diff --git a/website/_sass/mahout.scss b/website/_sass/mahout.scss
deleted file mode 100644
index e10859df9..000000000
--- a/website/_sass/mahout.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-@charset "utf-8";
-/**
- * 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.
- */
-
-// Override Bootstrap Variables
-
-$blue: #00bcd4;
-
-// Import bootstrap-sass
-@import "../assets/vendor/bootstrap/scss/bootstrap.scss";
-
-// Custom Variables
-
-// Set this to the footer height - used for sticky footer
-$footer-height: 60px;
-
-// Import partials.
-@import
-  "mahout/mixins",
-  "mahout/base",
-  "mahout/navbar",
-  "mahout/heading",
-  "mahout/posts",
-  "mahout/syntax-highlighting"
-;
diff --git a/website/_sass/mahout/_base.scss b/website/_sass/mahout/_base.scss
deleted file mode 100644
index b1c250437..000000000
--- a/website/_sass/mahout/_base.scss
+++ /dev/null
@@ -1,70 +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.
- */
-/* Sticky footer styles
--------------------------------------------------- */
-
-html {
-    position: relative;
-    min-height: 100%;
-}
-
-body {
-    // Set this to footer height
-    margin-bottom: $footer-height;
-    @include font-body;
-}
-
-// Typography
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  @include font-heading;
-}
-
-.section-heading {
-  font-size: 1rem;
-  border-bottom: 1px solid $gray-200;
-  padding-bottom: 0.5rem;
-  margin-bottom: 1rem;
-}
-
-.card {
-  border-color: $gray-200;
-  box-shadow: 0 0.2rem 0.5rem $gray-200;
-  .card-header,
-  .card-footer {
-    background-color: $gray-100;
-    border-color: $gray-200;
-  }
-}
-
-.footer {
-    position: absolute;
-    bottom: 0;
-    width: 100%;
-    // Set this to footer height
-    height: $footer-height;
-    line-height: $footer-height;
-}
-
-// fix thing where sidebar links aren't reachable
-.sidebar .nav li:first-child {
-  z-index: 9999;
-}
diff --git a/website/_sass/mahout/_heading.scss b/website/_sass/mahout/_heading.scss
deleted file mode 100644
index 9afc72e55..000000000
--- a/website/_sass/mahout/_heading.scss
+++ /dev/null
@@ -1,79 +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.
- */
-header.mahout-header {
-  height: 500px;
-  position: relative;
-  background: url('https://www.transparenttextures.com/patterns/cubes.png'), -moz-linear-gradient(45deg, $blue 0%, darken($blue, 15%) 100%);
-  background: url('https://www.transparenttextures.com/patterns/cubes.png'), -webkit-linear-gradient(45deg, $blue 0%, darken($blue, 15%) 100%);
-  background: url('https://www.transparenttextures.com/patterns/cubes.png'), linear-gradient(45deg, $blue 0%, darken($blue, 15%) 100%);
-  background-color: $blue;
-  background-repeat: repeat;
-  canvas {
-    position: absolute;
-    z-index: 1;
-  }
-  .mahout-header-lower,
-  .mahout-header-upper {
-    z-index: 2;
-    display: flex;
-    position: absolute;
-    height: 50%;
-    left: 0;
-    width: 100%;
-  }
-  .mahout-header-upper {
-    top: 0;
-    img {
-      margin-bottom: 2rem;
-      width: 100%;
-      max-width: 800px;
-    }
-    .asf-logo {
-      height: 75px;
-      width: 150px;
-    }
-  }
-  .mahout-header-lower {
-    bottom: 0;
-    h2 {
-      color: white;
-      font-size: 2rem;
-      max-width: 500px;
-      display: flex;
-      margin-top: 2rem;
-      font-weight: 400;
-    }
-    .btn-download {
-      padding: 1rem 2rem;
-      background-color: $white;
-      border-color: $white;
-      color: darken($blue, 7.5%);
-      box-shadow: 0 0.1rem 0.5rem fade-out($gray-900, 0.8);
-      &:hover {
-        background-color: $gray-100;
-        border-color: $gray-100;
-        color: $body-color;
-      }
-    }
-  }
-}
-
-@media (max-width: 576px) {
-  .btn-download {
-    margin-bottom: 0.25rem !important;
-  }
-}
diff --git a/website/_sass/mahout/_mixins.scss b/website/_sass/mahout/_mixins.scss
deleted file mode 100644
index b84129dd2..000000000
--- a/website/_sass/mahout/_mixins.scss
+++ /dev/null
@@ -1,24 +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.
- */
-@mixin font-heading {
-  font-family: 'Maven Pro', Arial, sans-serif;
-  font-weight: 500;
-}
-
-@mixin font-body {
-  font-family: 'Muli', Arial, sans-serif;
-}
diff --git a/website/_sass/mahout/_navbar.scss b/website/_sass/mahout/_navbar.scss
deleted file mode 100644
index 1ad721ac2..000000000
--- a/website/_sass/mahout/_navbar.scss
+++ /dev/null
@@ -1,68 +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.
- */
-.navbar-mahout {
-  .navbar-brand {
-    img {
-      height: 2.5rem;
-    }
-  }
-  border-bottom: 1px solid $gray-200;
-  .navbar-nav > .nav-item {
-    margin-left: 0.5rem;
-    margin-right: 0.5rem;
-  }
-  .navbar-nav > .nav-item > .nav-link {
-    @include font-heading;
-    text-transform: uppercase;
-    letter-spacing: .15rem;
-    font-size: 80%;
-    color: $body-color;
-    i {
-      font-size: 1rem;
-    }
-    &:hover {
-      color: $blue;
-    }
-  }
-
-  // Dropdown menu styles
-  .dropdown-menu {
-    border: 1px solid rgba(0, 0, 0, 0.1);
-    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
-    border-radius: 0.25rem;
-    padding: 0.5rem 0;
-    margin-top: 0.5rem;
-
-    .dropdown-item {
-      padding: 0.5rem 1.5rem;
-      font-size: 0.9rem;
-      color: $body-color;
-      transition: all 0.2s ease;
-
-      &:hover {
-        background-color: rgba($blue, 0.1);
-        color: $blue;
-        padding-left: 1.75rem;
-      }
-
-      &:active {
-        background-color: rgba($blue, 0.2);
-        color: $blue;
-      }
-    }
-  }
-}
diff --git a/website/_sass/mahout/_posts.scss b/website/_sass/mahout/_posts.scss
deleted file mode 100644
index 6a11c7067..000000000
--- a/website/_sass/mahout/_posts.scss
+++ /dev/null
@@ -1,35 +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.
- */
-.card-post-preview {
-  .card-body {
-    padding: 0;
-    .card-title a {
-      color: $body-color;
-      &:hover {
-        color: $blue;
-        text-decoration: none;
-      }
-    }
-    .card-post-img,
-    .card-post-text {
-      padding: 1.25rem;
-    }
-    .card-post-text {
-      border-left: 1px solid $gray-300;
-    }
-  }
-}
diff --git a/website/_sass/mahout/_syntax-highlighting.scss b/website/_sass/mahout/_syntax-highlighting.scss
deleted file mode 100644
index ed056fbb3..000000000
--- a/website/_sass/mahout/_syntax-highlighting.scss
+++ /dev/null
@@ -1,86 +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.
- */
-/**
- * Syntax highlighting styles
- */
-.highlight {
-  background: #fff;
-
-  .highlighter-rouge & {
-    background: #eef;
-  }
-
-  .c     { color: #998; font-style: italic } // Comment
-  .err   { color: #a61717; background-color: #e3d2d2 } // Error
-  .k     { font-weight: bold } // Keyword
-  .o     { font-weight: bold } // Operator
-  .cm    { color: #998; font-style: italic } // Comment.Multiline
-  .cp    { color: #999; font-weight: bold } // Comment.Preproc
-  .c1    { color: #998; font-style: italic } // Comment.Single
-  .cs    { color: #999; font-weight: bold; font-style: italic } // Comment.Special
-  .gd    { color: #000; background-color: #fdd } // Generic.Deleted
-  .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
-  .ge    { font-style: italic } // Generic.Emph
-  .gr    { color: #a00 } // Generic.Error
-  .gh    { color: #999 } // Generic.Heading
-  .gi    { color: #000; background-color: #dfd } // Generic.Inserted
-  .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
-  .go    { color: #888 } // Generic.Output
-  .gp    { color: #555 } // Generic.Prompt
-  .gs    { font-weight: bold } // Generic.Strong
-  .gu    { color: #aaa } // Generic.Subheading
-  .gt    { color: #a00 } // Generic.Traceback
-  .kc    { font-weight: bold } // Keyword.Constant
-  .kd    { font-weight: bold } // Keyword.Declaration
-  .kp    { font-weight: bold } // Keyword.Pseudo
-  .kr    { font-weight: bold } // Keyword.Reserved
-  .kt    { color: #458; font-weight: bold } // Keyword.Type
-  .m     { color: #099 } // Literal.Number
-  .s     { color: #d14 } // Literal.String
-  .na    { color: #008080 } // Name.Attribute
-  .nb    { color: #0086B3 } // Name.Builtin
-  .nc    { color: #458; font-weight: bold } // Name.Class
-  .no    { color: #008080 } // Name.Constant
-  .ni    { color: #800080 } // Name.Entity
-  .ne    { color: #900; font-weight: bold } // Name.Exception
-  .nf    { color: #900; font-weight: bold } // Name.Function
-  .nn    { color: #555 } // Name.Namespace
-  .nt    { color: #000080 } // Name.Tag
-  .nv    { color: #008080 } // Name.Variable
-  .ow    { font-weight: bold } // Operator.Word
-  .w     { color: #bbb } // Text.Whitespace
-  .mf    { color: #099 } // Literal.Number.Float
-  .mh    { color: #099 } // Literal.Number.Hex
-  .mi    { color: #099 } // Literal.Number.Integer
-  .mo    { color: #099 } // Literal.Number.Oct
-  .sb    { color: #d14 } // Literal.String.Backtick
-  .sc    { color: #d14 } // Literal.String.Char
-  .sd    { color: #d14 } // Literal.String.Doc
-  .s2    { color: #d14 } // Literal.String.Double
-  .se    { color: #d14 } // Literal.String.Escape
-  .sh    { color: #d14 } // Literal.String.Heredoc
-  .si    { color: #d14 } // Literal.String.Interpol
-  .sx    { color: #d14 } // Literal.String.Other
-  .sr    { color: #009926 } // Literal.String.Regex
-  .s1    { color: #d14 } // Literal.String.Single
-  .ss    { color: #990073 } // Literal.String.Symbol
-  .bp    { color: #999 } // Name.Builtin.Pseudo
-  .vc    { color: #008080 } // Name.Variable.Class
-  .vg    { color: #008080 } // Name.Variable.Global
-  .vi    { color: #008080 } // Name.Variable.Instance
-  .il    { color: #099 } // Literal.Number.Integer.Long
-}
diff --git a/website/assets/css/github-markdown.css b/website/assets/css/github-markdown.css
deleted file mode 100644
index 7b8ef3e0e..000000000
--- a/website/assets/css/github-markdown.css
+++ /dev/null
@@ -1,1104 +0,0 @@
-/* light */
-.markdown-body {
-  color-scheme: light;
-  -ms-text-size-adjust: 100%;
-  -webkit-text-size-adjust: 100%;
-  margin: 0;
-  color: #1f2328;
-  background-color: #ffffff;
-  font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";
-  font-size: 16px;
-  line-height: 1.5;
-  word-wrap: break-word;
-}
-
-.markdown-body .octicon {
-  display: inline-block;
-  fill: currentColor;
-  vertical-align: text-bottom;
-}
-
-.markdown-body h1:hover .anchor .octicon-link:before,
-.markdown-body h2:hover .anchor .octicon-link:before,
-.markdown-body h3:hover .anchor .octicon-link:before,
-.markdown-body h4:hover .anchor .octicon-link:before,
-.markdown-body h5:hover .anchor .octicon-link:before,
-.markdown-body h6:hover .anchor .octicon-link:before {
-  width: 16px;
-  height: 16px;
-  content: ' ';
-  display: inline-block;
-  background-color: currentColor;
-  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l [...]
-  mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1. [...]
-}
-
-.markdown-body details,
-.markdown-body figcaption,
-.markdown-body figure {
-  display: block;
-}
-
-.markdown-body summary {
-  display: list-item;
-}
-
-.markdown-body [hidden] {
-  display: none !important;
-}
-
-.markdown-body a {
-  background-color: transparent;
-  color: #0969da;
-  text-decoration: none;
-}
-
-.markdown-body abbr[title] {
-  border-bottom: none;
-  -webkit-text-decoration: underline dotted;
-  text-decoration: underline dotted;
-}
-
-.markdown-body b,
-.markdown-body strong {
-  font-weight: 600;
-}
-
-.markdown-body dfn {
-  font-style: italic;
-}
-
-.markdown-body h1 {
-  margin: .67em 0;
-  font-weight: 600;
-  padding-bottom: .3em;
-  font-size: 2em;
-  border-bottom: 1px solid #d1d9e0b3;
-}
-
-.markdown-body mark {
-  background-color: #fff8c5;
-  color: #1f2328;
-}
-
-.markdown-body small {
-  font-size: 90%;
-}
-
-.markdown-body sub,
-.markdown-body sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-
-.markdown-body sub {
-  bottom: -0.25em;
-}
-
-.markdown-body sup {
-  top: -0.5em;
-}
-
-.markdown-body img {
-  border-style: none;
-  max-width: 100%;
-  box-sizing: content-box;
-}
-
-.markdown-body code,
-.markdown-body kbd,
-.markdown-body pre,
-.markdown-body samp {
-  font-family: monospace;
-  font-size: 1em;
-}
-
-.markdown-body figure {
-  margin: 1em 2.5rem;
-}
-
-.markdown-body hr {
-  box-sizing: content-box;
-  overflow: hidden;
-  background: transparent;
-  border-bottom: 1px solid #d1d9e0b3;
-  height: .25em;
-  padding: 0;
-  margin: 1.5rem 0;
-  background-color: #d1d9e0;
-  border: 0;
-}
-
-.markdown-body input {
-  font: inherit;
-  margin: 0;
-  overflow: visible;
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-
-.markdown-body [type=button],
-.markdown-body [type=reset],
-.markdown-body [type=submit] {
-  -webkit-appearance: button;
-  appearance: button;
-}
-
-.markdown-body [type=checkbox],
-.markdown-body [type=radio] {
-  box-sizing: border-box;
-  padding: 0;
-}
-
-.markdown-body [type=number]::-webkit-inner-spin-button,
-.markdown-body [type=number]::-webkit-outer-spin-button {
-  height: auto;
-}
-
-.markdown-body [type=search]::-webkit-search-cancel-button,
-.markdown-body [type=search]::-webkit-search-decoration {
-  -webkit-appearance: none;
-  appearance: none;
-}
-
-.markdown-body ::-webkit-input-placeholder {
-  color: inherit;
-  opacity: .54;
-}
-
-.markdown-body ::-webkit-file-upload-button {
-  -webkit-appearance: button;
-  appearance: button;
-  font: inherit;
-}
-
-.markdown-body a:hover {
-  text-decoration: underline;
-}
-
-.markdown-body ::placeholder {
-  color: #59636e;
-  opacity: 1;
-}
-
-.markdown-body hr::before {
-  display: table;
-  content: "";
-}
-
-.markdown-body hr::after {
-  display: table;
-  clear: both;
-  content: "";
-}
-
-.markdown-body table {
-  border-spacing: 0;
-  border-collapse: collapse;
-  display: block;
-  width: max-content;
-  max-width: 100%;
-  overflow: auto;
-  font-variant: tabular-nums;
-}
-
-.markdown-body td,
-.markdown-body th {
-  padding: 0;
-}
-
-.markdown-body details summary {
-  cursor: pointer;
-}
-
-.markdown-body a:focus,
-.markdown-body [role=button]:focus,
-.markdown-body input[type=radio]:focus,
-.markdown-body input[type=checkbox]:focus {
-  outline: 2px solid #0969da;
-  outline-offset: -2px;
-  box-shadow: none;
-}
-
-.markdown-body a:focus:not(:focus-visible),
-.markdown-body [role=button]:focus:not(:focus-visible),
-.markdown-body input[type=radio]:focus:not(:focus-visible),
-.markdown-body input[type=checkbox]:focus:not(:focus-visible) {
-  outline: solid 1px transparent;
-}
-
-.markdown-body a:focus-visible,
-.markdown-body [role=button]:focus-visible,
-.markdown-body input[type=radio]:focus-visible,
-.markdown-body input[type=checkbox]:focus-visible {
-  outline: 2px solid #0969da;
-  outline-offset: -2px;
-  box-shadow: none;
-}
-
-.markdown-body a:not([class]):focus,
-.markdown-body a:not([class]):focus-visible,
-.markdown-body input[type=radio]:focus,
-.markdown-body input[type=radio]:focus-visible,
-.markdown-body input[type=checkbox]:focus,
-.markdown-body input[type=checkbox]:focus-visible {
-  outline-offset: 0;
-}
-
-.markdown-body kbd {
-  display: inline-block;
-  padding: 0.25rem;
-  font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
-  line-height: 10px;
-  color: #1f2328;
-  vertical-align: middle;
-  background-color: #f6f8fa;
-  border: solid 1px #d1d9e0b3;
-  border-bottom-color: #d1d9e0b3;
-  border-radius: 6px;
-  box-shadow: inset 0 -1px 0 #d1d9e0b3;
-}
-
-.markdown-body h1,
-.markdown-body h2,
-.markdown-body h3,
-.markdown-body h4,
-.markdown-body h5,
-.markdown-body h6 {
-  margin-top: 1.5rem;
-  margin-bottom: 1rem;
-  font-weight: 600;
-  line-height: 1.25;
-}
-
-.markdown-body h2 {
-  font-weight: 600;
-  padding-bottom: .3em;
-  font-size: 1.5em;
-  border-bottom: 1px solid #d1d9e0b3;
-}
-
-.markdown-body h3 {
-  font-weight: 600;
-  font-size: 1.25em;
-}
-
-.markdown-body h4 {
-  font-weight: 600;
-  font-size: 1em;
-}
-
-.markdown-body h5 {
-  font-weight: 600;
-  font-size: .875em;
-}
-
-.markdown-body h6 {
-  font-weight: 600;
-  font-size: .85em;
-  color: #59636e;
-}
-
-.markdown-body p {
-  margin-top: 0;
-  margin-bottom: 10px;
-}
-
-.markdown-body blockquote {
-  margin: 0;
-  padding: 0 1em;
-  color: #59636e;
-  border-left: .25em solid #d1d9e0;
-}
-
-.markdown-body ul,
-.markdown-body ol {
-  margin-top: 0;
-  margin-bottom: 0;
-  padding-left: 2em;
-}
-
-.markdown-body ol ol,
-.markdown-body ul ol {
-  list-style-type: lower-roman;
-}
-
-.markdown-body ul ul ol,
-.markdown-body ul ol ol,
-.markdown-body ol ul ol,
-.markdown-body ol ol ol {
-  list-style-type: lower-alpha;
-}
-
-.markdown-body dd {
-  margin-left: 0;
-}
-
-.markdown-body tt,
-.markdown-body code,
-.markdown-body samp {
-  font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
-  font-size: 12px;
-}
-
-.markdown-body pre {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
-  font-size: 12px;
-  word-wrap: normal;
-}
-
-.markdown-body .octicon {
-  display: inline-block;
-  overflow: visible !important;
-  vertical-align: text-bottom;
-  fill: currentColor;
-}
-
-.markdown-body input::-webkit-outer-spin-button,
-.markdown-body input::-webkit-inner-spin-button {
-  margin: 0;
-  appearance: none;
-}
-
-.markdown-body .mr-2 {
-  margin-right: 0.5rem !important;
-}
-
-.markdown-body::before {
-  display: table;
-  content: "";
-}
-
-.markdown-body::after {
-  display: table;
-  clear: both;
-  content: "";
-}
-
-.markdown-body>*:first-child {
-  margin-top: 0 !important;
-}
-
-.markdown-body>*:last-child {
-  margin-bottom: 0 !important;
-}
-
-.markdown-body a:not([href]) {
-  color: inherit;
-  text-decoration: none;
-}
-
-.markdown-body .absent {
-  color: #d1242f;
-}
-
-.markdown-body .anchor {
-  float: left;
-  padding-right: 0.25rem;
-  margin-left: -20px;
-  line-height: 1;
-}
-
-.markdown-body .anchor:focus {
-  outline: none;
-}
-
-.markdown-body p,
-.markdown-body blockquote,
-.markdown-body ul,
-.markdown-body ol,
-.markdown-body dl,
-.markdown-body table,
-.markdown-body pre,
-.markdown-body details {
-  margin-top: 0;
-  margin-bottom: 1rem;
-}
-
-.markdown-body blockquote>:first-child {
-  margin-top: 0;
-}
-
-.markdown-body blockquote>:last-child {
-  margin-bottom: 0;
-}
-
-.markdown-body h1 .octicon-link,
-.markdown-body h2 .octicon-link,
-.markdown-body h3 .octicon-link,
-.markdown-body h4 .octicon-link,
-.markdown-body h5 .octicon-link,
-.markdown-body h6 .octicon-link {
-  color: #1f2328;
-  vertical-align: middle;
-  visibility: hidden;
-}
-
-.markdown-body h1:hover .anchor,
-.markdown-body h2:hover .anchor,
-.markdown-body h3:hover .anchor,
-.markdown-body h4:hover .anchor,
-.markdown-body h5:hover .anchor,
-.markdown-body h6:hover .anchor {
-  text-decoration: none;
-}
-
-.markdown-body h1:hover .anchor .octicon-link,
-.markdown-body h2:hover .anchor .octicon-link,
-.markdown-body h3:hover .anchor .octicon-link,
-.markdown-body h4:hover .anchor .octicon-link,
-.markdown-body h5:hover .anchor .octicon-link,
-.markdown-body h6:hover .anchor .octicon-link {
-  visibility: visible;
-}
-
-.markdown-body h1 tt,
-.markdown-body h1 code,
-.markdown-body h2 tt,
-.markdown-body h2 code,
-.markdown-body h3 tt,
-.markdown-body h3 code,
-.markdown-body h4 tt,
-.markdown-body h4 code,
-.markdown-body h5 tt,
-.markdown-body h5 code,
-.markdown-body h6 tt,
-.markdown-body h6 code {
-  padding: 0 .2em;
-  font-size: inherit;
-}
-
-.markdown-body summary h1,
-.markdown-body summary h2,
-.markdown-body summary h3,
-.markdown-body summary h4,
-.markdown-body summary h5,
-.markdown-body summary h6 {
-  display: inline-block;
-}
-
-.markdown-body summary h1 .anchor,
-.markdown-body summary h2 .anchor,
-.markdown-body summary h3 .anchor,
-.markdown-body summary h4 .anchor,
-.markdown-body summary h5 .anchor,
-.markdown-body summary h6 .anchor {
-  margin-left: -40px;
-}
-
-.markdown-body summary h1,
-.markdown-body summary h2 {
-  padding-bottom: 0;
-  border-bottom: 0;
-}
-
-.markdown-body ul.no-list,
-.markdown-body ol.no-list {
-  padding: 0;
-  list-style-type: none;
-}
-
-.markdown-body ol[type="a s"] {
-  list-style-type: lower-alpha;
-}
-
-.markdown-body ol[type="A s"] {
-  list-style-type: upper-alpha;
-}
-
-.markdown-body ol[type="i s"] {
-  list-style-type: lower-roman;
-}
-
-.markdown-body ol[type="I s"] {
-  list-style-type: upper-roman;
-}
-
-.markdown-body ol[type="1"] {
-  list-style-type: decimal;
-}
-
-.markdown-body div>ol:not([type]) {
-  list-style-type: decimal;
-}
-
-.markdown-body ul ul,
-.markdown-body ul ol,
-.markdown-body ol ol,
-.markdown-body ol ul {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-.markdown-body li>p {
-  margin-top: 1rem;
-}
-
-.markdown-body li+li {
-  margin-top: .25em;
-}
-
-.markdown-body dl {
-  padding: 0;
-}
-
-.markdown-body dl dt {
-  padding: 0;
-  margin-top: 1rem;
-  font-size: 1em;
-  font-style: italic;
-  font-weight: 600;
-}
-
-.markdown-body dl dd {
-  padding: 0 1rem;
-  margin-bottom: 1rem;
-}
-
-.markdown-body table th {
-  font-weight: 600;
-}
-
-.markdown-body table th,
-.markdown-body table td {
-  padding: 6px 13px;
-  border: 1px solid #d1d9e0;
-}
-
-.markdown-body table td>:last-child {
-  margin-bottom: 0;
-}
-
-.markdown-body table tr {
-  background-color: #ffffff;
-  border-top: 1px solid #d1d9e0b3;
-}
-
-.markdown-body table tr:nth-child(2n) {
-  background-color: #f6f8fa;
-}
-
-.markdown-body table img {
-  background-color: transparent;
-}
-
-.markdown-body img[align=right] {
-  padding-left: 20px;
-}
-
-.markdown-body img[align=left] {
-  padding-right: 20px;
-}
-
-.markdown-body .emoji {
-  max-width: none;
-  vertical-align: text-top;
-  background-color: transparent;
-}
-
-.markdown-body span.frame {
-  display: block;
-  overflow: hidden;
-}
-
-.markdown-body span.frame>span {
-  display: block;
-  float: left;
-  width: auto;
-  padding: 7px;
-  margin: 13px 0 0;
-  overflow: hidden;
-  border: 1px solid #d1d9e0;
-}
-
-.markdown-body span.frame span img {
-  display: block;
-  float: left;
-}
-
-.markdown-body span.frame span span {
-  display: block;
-  padding: 5px 0 0;
-  clear: both;
-  color: #1f2328;
-}
-
-.markdown-body span.align-center {
-  display: block;
-  overflow: hidden;
-  clear: both;
-}
-
-.markdown-body span.align-center>span {
-  display: block;
-  margin: 13px auto 0;
-  overflow: hidden;
-  text-align: center;
-}
-
-.markdown-body span.align-center span img {
-  margin: 0 auto;
-  text-align: center;
-}
-
-.markdown-body span.align-right {
-  display: block;
-  overflow: hidden;
-  clear: both;
-}
-
-.markdown-body span.align-right>span {
-  display: block;
-  margin: 13px 0 0;
-  overflow: hidden;
-  text-align: right;
-}
-
-.markdown-body span.align-right span img {
-  margin: 0;
-  text-align: right;
-}
-
-.markdown-body span.float-left {
-  display: block;
-  float: left;
-  margin-right: 13px;
-  overflow: hidden;
-}
-
-.markdown-body span.float-left span {
-  margin: 13px 0 0;
-}
-
-.markdown-body span.float-right {
-  display: block;
-  float: right;
-  margin-left: 13px;
-  overflow: hidden;
-}
-
-.markdown-body span.float-right>span {
-  display: block;
-  margin: 13px auto 0;
-  overflow: hidden;
-  text-align: right;
-}
-
-.markdown-body code,
-.markdown-body tt {
-  padding: .2em .4em;
-  margin: 0;
-  font-size: 85%;
-  white-space: break-spaces;
-  background-color: #818b981f;
-  border-radius: 6px;
-}
-
-.markdown-body code br,
-.markdown-body tt br {
-  display: none;
-}
-
-.markdown-body del code {
-  text-decoration: inherit;
-}
-
-.markdown-body samp {
-  font-size: 85%;
-}
-
-.markdown-body pre code {
-  font-size: 100%;
-}
-
-.markdown-body pre>code {
-  padding: 0;
-  margin: 0;
-  word-break: normal;
-  white-space: pre;
-  background: transparent;
-  border: 0;
-}
-
-.markdown-body .highlight {
-  margin-bottom: 1rem;
-}
-
-.markdown-body .highlight pre {
-  margin-bottom: 0;
-  word-break: normal;
-}
-
-.markdown-body .highlight pre,
-.markdown-body pre {
-  padding: 1rem;
-  overflow: auto;
-  font-size: 85%;
-  line-height: 1.45;
-  color: #1f2328;
-  background-color: #f6f8fa;
-  border-radius: 6px;
-}
-
-.markdown-body pre code,
-.markdown-body pre tt {
-  display: inline;
-  max-width: auto;
-  padding: 0;
-  margin: 0;
-  overflow: visible;
-  line-height: inherit;
-  word-wrap: normal;
-  background-color: transparent;
-  border: 0;
-}
-
-.markdown-body .csv-data td,
-.markdown-body .csv-data th {
-  padding: 5px;
-  overflow: hidden;
-  font-size: 12px;
-  line-height: 1;
-  text-align: left;
-  white-space: nowrap;
-}
-
-.markdown-body .csv-data .blob-num {
-  padding: 10px 0.5rem 9px;
-  text-align: right;
-  background: #ffffff;
-  border: 0;
-}
-
-.markdown-body .csv-data tr {
-  border-top: 0;
-}
-
-.markdown-body .csv-data th {
-  font-weight: 600;
-  background: #f6f8fa;
-  border-top: 0;
-}
-
-.markdown-body [data-footnote-ref]::before {
-  content: "[";
-}
-
-.markdown-body [data-footnote-ref]::after {
-  content: "]";
-}
-
-.markdown-body .footnotes {
-  font-size: 12px;
-  color: #59636e;
-  border-top: 1px solid #d1d9e0;
-}
-
-.markdown-body .footnotes ol {
-  padding-left: 1rem;
-}
-
-.markdown-body .footnotes ol ul {
-  display: inline-block;
-  padding-left: 1rem;
-  margin-top: 1rem;
-}
-
-.markdown-body .footnotes li {
-  position: relative;
-}
-
-.markdown-body .footnotes li:target::before {
-  position: absolute;
-  top: calc(0.5rem*-1);
-  right: calc(0.5rem*-1);
-  bottom: calc(0.5rem*-1);
-  left: calc(1.5rem*-1);
-  pointer-events: none;
-  content: "";
-  border: 2px solid #0969da;
-  border-radius: 6px;
-}
-
-.markdown-body .footnotes li:target {
-  color: #1f2328;
-}
-
-.markdown-body .footnotes .data-footnote-backref g-emoji {
-  font-family: monospace;
-}
-
-.markdown-body body:has(:modal) {
-  padding-right: var(--dialog-scrollgutter) !important;
-}
-
-.markdown-body .pl-c {
-  color: #59636e;
-}
-
-.markdown-body .pl-c1,
-.markdown-body .pl-s .pl-v {
-  color: #0550ae;
-}
-
-.markdown-body .pl-e,
-.markdown-body .pl-en {
-  color: #6639ba;
-}
-
-.markdown-body .pl-smi,
-.markdown-body .pl-s .pl-s1 {
-  color: #1f2328;
-}
-
-.markdown-body .pl-ent {
-  color: #0550ae;
-}
-
-.markdown-body .pl-k {
-  color: #cf222e;
-}
-
-.markdown-body .pl-s,
-.markdown-body .pl-pds,
-.markdown-body .pl-s .pl-pse .pl-s1,
-.markdown-body .pl-sr,
-.markdown-body .pl-sr .pl-cce,
-.markdown-body .pl-sr .pl-sre,
-.markdown-body .pl-sr .pl-sra {
-  color: #0a3069;
-}
-
-.markdown-body .pl-v,
-.markdown-body .pl-smw {
-  color: #953800;
-}
-
-.markdown-body .pl-bu {
-  color: #82071e;
-}
-
-.markdown-body .pl-ii {
-  color: #f6f8fa;
-  background-color: #82071e;
-}
-
-.markdown-body .pl-c2 {
-  color: #f6f8fa;
-  background-color: #cf222e;
-}
-
-.markdown-body .pl-sr .pl-cce {
-  font-weight: bold;
-  color: #116329;
-}
-
-.markdown-body .pl-ml {
-  color: #3b2300;
-}
-
-.markdown-body .pl-mh,
-.markdown-body .pl-mh .pl-en,
-.markdown-body .pl-ms {
-  font-weight: bold;
-  color: #0550ae;
-}
-
-.markdown-body .pl-mi {
-  font-style: italic;
-  color: #1f2328;
-}
-
-.markdown-body .pl-mb {
-  font-weight: bold;
-  color: #1f2328;
-}
-
-.markdown-body .pl-md {
-  color: #82071e;
-  background-color: #ffebe9;
-}
-
-.markdown-body .pl-mi1 {
-  color: #116329;
-  background-color: #dafbe1;
-}
-
-.markdown-body .pl-mc {
-  color: #953800;
-  background-color: #ffd8b5;
-}
-
-.markdown-body .pl-mi2 {
-  color: #d1d9e0;
-  background-color: #0550ae;
-}
-
-.markdown-body .pl-mdr {
-  font-weight: bold;
-  color: #8250df;
-}
-
-.markdown-body .pl-ba {
-  color: #59636e;
-}
-
-.markdown-body .pl-sg {
-  color: #818b98;
-}
-
-.markdown-body .pl-corl {
-  text-decoration: underline;
-  color: #0a3069;
-}
-
-.markdown-body [role=button]:focus:not(:focus-visible),
-.markdown-body [role=tabpanel][tabindex="0"]:focus:not(:focus-visible),
-.markdown-body button:focus:not(:focus-visible),
-.markdown-body summary:focus:not(:focus-visible),
-.markdown-body a:focus:not(:focus-visible) {
-  outline: none;
-  box-shadow: none;
-}
-
-.markdown-body [tabindex="0"]:focus:not(:focus-visible),
-.markdown-body details-dialog:focus:not(:focus-visible) {
-  outline: none;
-}
-
-.markdown-body g-emoji {
-  display: inline-block;
-  min-width: 1ch;
-  font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
-  font-size: 1em;
-  font-style: normal !important;
-  font-weight: 400;
-  line-height: 1;
-  vertical-align: -0.075em;
-}
-
-.markdown-body g-emoji img {
-  width: 1em;
-  height: 1em;
-}
-
-.markdown-body .task-list-item {
-  list-style-type: none;
-}
-
-.markdown-body .task-list-item label {
-  font-weight: 400;
-}
-
-.markdown-body .task-list-item.enabled label {
-  cursor: pointer;
-}
-
-.markdown-body .task-list-item+.task-list-item {
-  margin-top: 0.25rem;
-}
-
-.markdown-body .task-list-item .handle {
-  display: none;
-}
-
-.markdown-body .task-list-item-checkbox {
-  margin: 0 .2em .25em -1.4em;
-  vertical-align: middle;
-}
-
-.markdown-body ul:dir(rtl) .task-list-item-checkbox {
-  margin: 0 -1.6em .25em .2em;
-}
-
-.markdown-body ol:dir(rtl) .task-list-item-checkbox {
-  margin: 0 -1.6em .25em .2em;
-}
-
-.markdown-body .contains-task-list:hover .task-list-item-convert-container,
-.markdown-body .contains-task-list:focus-within .task-list-item-convert-container {
-  display: block;
-  width: auto;
-  height: 24px;
-  overflow: visible;
-  clip: auto;
-}
-
-.markdown-body ::-webkit-calendar-picker-indicator {
-  filter: invert(50%);
-}
-
-.markdown-body .markdown-alert {
-  padding: 0.5rem 1rem;
-  margin-bottom: 1rem;
-  color: inherit;
-  border-left: .25em solid #d1d9e0;
-}
-
-.markdown-body .markdown-alert>:first-child {
-  margin-top: 0;
-}
-
-.markdown-body .markdown-alert>:last-child {
-  margin-bottom: 0;
-}
-
-.markdown-body .markdown-alert .markdown-alert-title {
-  display: flex;
-  font-weight: 500;
-  align-items: center;
-  line-height: 1;
-}
-
-.markdown-body .markdown-alert.markdown-alert-note {
-  border-left-color: #0969da;
-}
-
-.markdown-body .markdown-alert.markdown-alert-note .markdown-alert-title {
-  color: #0969da;
-}
-
-.markdown-body .markdown-alert.markdown-alert-important {
-  border-left-color: #8250df;
-}
-
-.markdown-body .markdown-alert.markdown-alert-important .markdown-alert-title {
-  color: #8250df;
-}
-
-.markdown-body .markdown-alert.markdown-alert-warning {
-  border-left-color: #9a6700;
-}
-
-.markdown-body .markdown-alert.markdown-alert-warning .markdown-alert-title {
-  color: #9a6700;
-}
-
-.markdown-body .markdown-alert.markdown-alert-tip {
-  border-left-color: #1a7f37;
-}
-
-.markdown-body .markdown-alert.markdown-alert-tip .markdown-alert-title {
-  color: #1a7f37;
-}
-
-.markdown-body .markdown-alert.markdown-alert-caution {
-  border-left-color: #cf222e;
-}
-
-.markdown-body .markdown-alert.markdown-alert-caution .markdown-alert-title {
-  color: #d1242f;
-}
-
-.markdown-body>*:first-child>.heading-element:first-child {
-  margin-top: 0 !important;
-}
-
-.markdown-body .highlight pre:has(+.zeroclipboard-container) {
-  min-height: 52px;
-}
diff --git a/website/assets/css/main.scss b/website/assets/css/main.scss
deleted file mode 100644
index 6d9c2c6d0..000000000
--- a/website/assets/css/main.scss
+++ /dev/null
@@ -1,22 +0,0 @@
----
----
-
-@import "mahout";
-
-table {
-  border-collapse: collapse;
-  width: 100%;
-  display: block;
-  overflow-x: auto;
-}
-
-th,
-td {
-  border: 1px solid #ddd;
-  padding: 8px;
-  text-align: left;
-}
-
-th {
-  background-color: #f2f2f2;
-}
diff --git a/website/assets/header.js b/website/assets/header.js
deleted file mode 100644
index 3845b8087..000000000
--- a/website/assets/header.js
+++ /dev/null
@@ -1,219 +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.
- */
-function SineWaveGenerator(options) {
-  $.extend(this, options || {});
-
-  if (!this.el) {
-    throw "No Canvas Selected";
-  }
-  this.ctx = this.el.getContext('2d');
-
-  if (!this.waves.length) {
-    throw "No waves specified";
-  }
-
-  // Internal
-  this._resizeWidth();
-  window.addEventListener('resize', this._resizeWidth.bind(this));
-  // User
-  this.resizeEvent();
-  window.addEventListener('resize', this.resizeEvent.bind(this));
-
-  if (typeof this.initialize === 'function') {
-    this.initialize.call(this);
-  }
-  // Start the magic
-  this.loop();
-}
-
-// Defaults
-SineWaveGenerator.prototype.speed = 10;
-SineWaveGenerator.prototype.amplitude = 50;
-SineWaveGenerator.prototype.wavelength = 50;
-SineWaveGenerator.prototype.segmentLength = 10;
-
-SineWaveGenerator.prototype.lineWidth = 2;
-SineWaveGenerator.prototype.strokeStyle = 'rgba(255, 255, 255, 0.2)';
-
-SineWaveGenerator.prototype.resizeEvent = function() {};
-
-// fill the screen
-SineWaveGenerator.prototype._resizeWidth = function() {
-  this.dpr = window.devicePixelRatio || 1;
-
-  this.width = this.el.width = document.body.clientWidth * this.dpr;
-  this.height = this.el.height = 700 * this.dpr;
-  this.el.style.width = document.body.clientWidth + 'px';
-  this.el.style.height = 700 + 'px';
-
-  this.waveWidth = this.width * 0.95;
-  this.waveLeft = this.width * 0.25;
-}
-
-SineWaveGenerator.prototype.clear = function() {
-  this.ctx.clearRect(0, 0, this.width, this.height);
-}
-
-SineWaveGenerator.prototype.time = 0;
-
-SineWaveGenerator.prototype.update = function(time) {
-  this.time = this.time - 0.007;
-  if (typeof time === 'undefined') {
-    time = this.time;
-  }
-
-  var index = -1;
-  var length = this.waves.length;
-
-  while (++index < length) {
-    var timeModifier = this.waves[index].timeModifier || 1;
-    this.drawSine(time * timeModifier, this.waves[index]);
-  }
-  index = void 0;
-  length = void 0;
-}
-
-// Constants
-var PI2 = Math.PI * 2;
-var HALFPI = Math.PI / 2;
-
-SineWaveGenerator.prototype.ease = function(percent, amplitude) {
-  return amplitude * (Math.sin(percent * PI2 - HALFPI) + 1) * 0.5;
-}
-
-SineWaveGenerator.prototype.drawSine = function(time, options) {
-  options = options || {};
-  amplitude = options.amplitude || this.amplitude;
-  wavelength = options.wavelength || this.wavelength;
-  lineWidth = options.lineWidth || this.lineWidth;
-  strokeStyle = options.strokeStyle || this.strokeStyle;
-  segmentLength = options.segmentLength || this.segmentLength;
-
-  var x = time;
-  var y = 0;
-  var amp = this.amplitude;
-
-  // Center the waves
-  var yAxis = this.height / 2;
-
-  // Styles
-  this.ctx.lineWidth = lineWidth * this.dpr;
-  this.ctx.strokeStyle = strokeStyle;
-  this.ctx.lineCap = 'round';
-  this.ctx.lineJoin = 'round';
-  this.ctx.beginPath();
-
-  // Starting Line
-  this.ctx.moveTo(0, yAxis);
-  this.ctx.lineTo(this.waveLeft, yAxis);
-
-  for (var i = 0; i < this.waveWidth; i += segmentLength) {
-    x = (time * this.speed) + (-yAxis + i) / wavelength;
-    y = Math.sin(x);
-
-    // Easing
-    amp = this.ease(i / this.waveWidth, amplitude);
-
-    this.ctx.lineTo(i + this.waveLeft, amp * y + yAxis);
-
-    amp = void 0;
-  }
-
-  // Ending Line
-  this.ctx.lineTo(this.width, yAxis);
-
-  // Stroke it
-  this.ctx.stroke();
-
-  // Clean up
-  options = void 0;
-  amplitude = void 0;
-  wavelength = void 0;
-  lineWidth = void 0;
-  strokeStyle = void 0;
-  segmentLength = void 0;
-  x = void 0;
-  y = void 0;
-}
-
-SineWaveGenerator.prototype.loop = function() {
-  this.clear();
-  this.update();
-
-  window.requestAnimationFrame(this.loop.bind(this));
-}
-
-new SineWaveGenerator({
-  el: document.getElementById('waves'),
-
-  speed: 8,
-
-  waves: [{
-      timeModifier: 1,
-      lineWidth: 3,
-      amplitude: 150,
-      wavelength: 200,
-      segmentLength: 20,
-      //       strokeStyle: 'rgba(255, 255, 255, 0.5)'
-    },
-    {
-      timeModifier: 1,
-      lineWidth: 2,
-      amplitude: 250,
-      wavelength: 200,
-      //       strokeStyle: 'rgba(255, 255, 255, 0.3)'
-    },
-    {
-      timeModifier: 1,
-      lineWidth: 3,
-      amplitude: -150,
-      wavelength: 50,
-      segmentLength: 10,
-      //       strokeStyle: 'rgba(255, 255, 255, 0.2)'
-    },
-    {
-      timeModifier: 1,
-      lineWidth: 1,
-      amplitude: -100,
-      wavelength: 100,
-      segmentLength: 20,
-      //       strokeStyle: 'rgba(255, 255, 255, 0.1)'
-    }
-  ],
-
-  initialize: function() {
-
-  },
-
-  resizeEvent: function() {
-    var gradient = this.ctx.createLinearGradient(0, 0, this.width, 0);
-    gradient.addColorStop(0, "rgba(254, 255, 255, 0)");
-    gradient.addColorStop(0.5, "rgba(255, 255, 255, 0.5)");
-    gradient.addColorStop(1, "rgba(255, 255, 254, 0)");
-
-    var index = -1;
-    var length = this.waves.length;
-    while (++index < length) {
-      this.waves[index].strokeStyle = gradient;
-    }
-
-    // Clean Up
-    index = void 0;
-    length = void 0;
-    gradient = void 0;
-  }
-});
diff --git a/website/assets/vendor/bootstrap/js/bootstrap.min.js b/website/assets/vendor/bootstrap/js/bootstrap.min.js
deleted file mode 100755
index 6d98e10bb..000000000
--- a/website/assets/vendor/bootstrap/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com)
- * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");!function(t){var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(jQuery),function(){function t(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"objec [...]
diff --git a/website/assets/vendor/bootstrap/scss/_alert.scss b/website/assets/vendor/bootstrap/scss/_alert.scss
deleted file mode 100755
index 3dfd13f56..000000000
--- a/website/assets/vendor/bootstrap/scss/_alert.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Base styles
-//
-
-.alert {
-  padding: $alert-padding-y $alert-padding-x;
-  margin-bottom: $alert-margin-bottom;
-  border: $alert-border-width solid transparent;
-  @include border-radius($alert-border-radius);
-}
-
-// Headings for larger alerts
-.alert-heading {
-  // Specified to prevent conflicts of changing $headings-color
-  color: inherit;
-}
-
-// Provide class for links that match alerts
-.alert-link {
-  font-weight: $alert-link-font-weight;
-}
-
-
-// Dismissible alerts
-//
-// Expand the right padding and account for the close button's positioning.
-
-.alert-dismissible {
-  // Adjust close link position
-  .close {
-    position: relative;
-    top: -$alert-padding-y;
-    right: -$alert-padding-x;
-    padding: $alert-padding-y $alert-padding-x;
-    color: inherit;
-  }
-}
-
-
-// Alternate styles
-//
-// Generate contextual modifier classes for colorizing the alert.
-
-@each $color, $value in $theme-colors {
-  .alert-#{$color} {
-    @include alert-variant(theme-color-level($color, -10), theme-color-level($color, -9), theme-color-level($color, 6));
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_badge.scss b/website/assets/vendor/bootstrap/scss/_badge.scss
deleted file mode 100755
index 8a7626344..000000000
--- a/website/assets/vendor/bootstrap/scss/_badge.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-// Base class
-//
-// Requires one of the contextual, color modifier classes for `color` and
-// `background-color`.
-
-.badge {
-  display: inline-block;
-  padding: $badge-padding-y $badge-padding-x;
-  font-size: $badge-font-size;
-  font-weight: $badge-font-weight;
-  line-height: 1;
-  color: $badge-color;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  @include border-radius();
-
-  // Empty badges collapse automatically
-  &:empty {
-    display: none;
-  }
-}
-
-// Quick fix for badges in buttons
-.btn .badge {
-  position: relative;
-  top: -1px;
-}
-
-// Pill badges
-//
-// Make them extra rounded with a modifier to replace v3's badges.
-
-.badge-pill {
-  padding-right: $badge-pill-padding-x;
-  padding-left: $badge-pill-padding-x;
-  @include border-radius($badge-pill-border-radius);
-}
-
-// Colors
-//
-// Contextual variations (linked badges get darker on :hover).
-
-@each $color, $value in $theme-colors {
-  .badge-#{$color} {
-    @include badge-variant($value);
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_breadcrumb.scss b/website/assets/vendor/bootstrap/scss/_breadcrumb.scss
deleted file mode 100755
index 2bc0e2086..000000000
--- a/website/assets/vendor/bootstrap/scss/_breadcrumb.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-.breadcrumb {
-  padding: $breadcrumb-padding-y $breadcrumb-padding-x;
-  margin-bottom: 1rem;
-  list-style: none;
-  background-color: $breadcrumb-bg;
-  @include border-radius($border-radius);
-  @include clearfix;
-}
-
-.breadcrumb-item {
-  float: left;
-
-  // The separator between breadcrumbs (by default, a forward-slash: "/")
-  + .breadcrumb-item::before {
-    display: inline-block; // Suppress underlining of the separator in modern browsers
-    padding-right: $breadcrumb-item-padding;
-    padding-left: $breadcrumb-item-padding;
-    color: $breadcrumb-divider-color;
-    content: "#{$breadcrumb-divider}";
-  }
-
-  // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built
-  // without `<ul>`s. The `::before` pseudo-element generates an element
-  // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.
-  //
-  // To trick IE into suppressing the underline, we give the pseudo-element an
-  // underline and then immediately remove it.
-  + .breadcrumb-item:hover::before {
-    text-decoration: underline;
-  }
-  + .breadcrumb-item:hover::before {
-    text-decoration: none;
-  }
-
-  &.active {
-    color: $breadcrumb-active-color;
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_button-group.scss b/website/assets/vendor/bootstrap/scss/_button-group.scss
deleted file mode 100755
index 30a14d883..000000000
--- a/website/assets/vendor/bootstrap/scss/_button-group.scss
+++ /dev/null
@@ -1,198 +0,0 @@
-// scss-lint:disable QualifyingElement
-
-// Make the div behave like a button
-.btn-group,
-.btn-group-vertical {
-  position: relative;
-  display: inline-flex;
-  vertical-align: middle; // match .btn alignment given font-size hack above
-
-  > .btn {
-    position: relative;
-    flex: 0 1 auto;
-    margin-bottom: 0;
-
-    // Bring the hover, focused, and "active" buttons to the front to overlay
-    // the borders properly
-    @include hover {
-      z-index: 2;
-    }
-    &:focus,
-    &:active,
-    &.active {
-      z-index: 2;
-    }
-  }
-
-  // Prevent double borders when buttons are next to each other
-  .btn + .btn,
-  .btn + .btn-group,
-  .btn-group + .btn,
-  .btn-group + .btn-group {
-    margin-left: -$input-btn-border-width;
-  }
-}
-
-// Optional: Group multiple button groups together for a toolbar
-.btn-toolbar {
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: flex-start;
-
-  .input-group {
-    width: auto;
-  }
-}
-
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-  border-radius: 0;
-}
-
-// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
-.btn-group > .btn:first-child {
-  margin-left: 0;
-
-  &:not(:last-child):not(.dropdown-toggle) {
-    @include border-right-radius(0);
-  }
-}
-// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  @include border-left-radius(0);
-}
-
-// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
-.btn-group > .btn-group {
-  float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group > .btn-group:first-child:not(:last-child) {
-  > .btn:last-child,
-  > .dropdown-toggle {
-    @include border-right-radius(0);
-  }
-}
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  @include border-left-radius(0);
-}
-
-
-// Sizing
-//
-// Remix the default button sizing classes into new ones for easier manipulation.
-
-.btn-group-sm > .btn { @extend .btn-sm; }
-.btn-group-lg > .btn { @extend .btn-lg; }
-
-
-//
-// Split button dropdowns
-//
-
-.btn + .dropdown-toggle-split {
-  padding-right: $input-btn-padding-x * .75;
-  padding-left: $input-btn-padding-x * .75;
-
-  &::after {
-    margin-left: 0;
-  }
-}
-
-.btn-sm + .dropdown-toggle-split {
-  padding-right: $input-btn-padding-x-sm * .75;
-  padding-left: $input-btn-padding-x-sm * .75;
-}
-
-.btn-lg + .dropdown-toggle-split {
-  padding-right: $input-btn-padding-x-lg * .75;
-  padding-left: $input-btn-padding-x-lg * .75;
-}
-
-
-// The clickable button for toggling the menu
-// Set the same inset shadow as the :active state
-.btn-group.show .dropdown-toggle {
-  @include box-shadow($btn-active-box-shadow);
-
-  // Show no shadow for `.btn-link` since it has no other button styles.
-  &.btn-link {
-    @include box-shadow(none);
-  }
-}
-
-
-//
-// Vertical button groups
-//
-
-.btn-group-vertical {
-  display: inline-flex;
-  flex-direction: column;
-  align-items: flex-start;
-  justify-content: center;
-
-  .btn,
-  .btn-group {
-    width: 100%;
-  }
-
-  > .btn + .btn,
-  > .btn + .btn-group,
-  > .btn-group + .btn,
-  > .btn-group + .btn-group {
-    margin-top: -$input-btn-border-width;
-    margin-left: 0;
-  }
-}
-
-.btn-group-vertical > .btn {
-  &:not(:first-child):not(:last-child) {
-    border-radius: 0;
-  }
-  &:first-child:not(:last-child) {
-    @include border-bottom-radius(0);
-  }
-  &:last-child:not(:first-child) {
-    @include border-top-radius(0);
-  }
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) {
-  > .btn:last-child,
-  > .dropdown-toggle {
-    @include border-bottom-radius(0);
-  }
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  @include border-top-radius(0);
-}
-
-
-// Checkbox and radio options
-//
-// In order to support the browser's form validation feedback, powered by the
-// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
-// `display: none;` or `visibility: hidden;` as that also hides the popover.
-// Simply visually hiding the inputs via `opacity` would leave them clickable in
-// certain cases which is prevented by using `clip` and `pointer-events`.
-// This way, we ensure a DOM element is visible to position the popover from.
-//
-// See https://github.com/twbs/bootstrap/pull/12794 and
-// https://github.com/twbs/bootstrap/pull/14559 for more information.
-
-[data-toggle="buttons"] {
-  > .btn,
-  > .btn-group > .btn {
-    input[type="radio"],
-    input[type="checkbox"] {
-      position: absolute;
-      clip: rect(0,0,0,0);
-      pointer-events: none;
-    }
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_buttons.scss b/website/assets/vendor/bootstrap/scss/_buttons.scss
deleted file mode 100755
index 607f24a2d..000000000
--- a/website/assets/vendor/bootstrap/scss/_buttons.scss
+++ /dev/null
@@ -1,141 +0,0 @@
-// scss-lint:disable QualifyingElement
-
-//
-// Base styles
-//
-
-.btn {
-  display: inline-block;
-  font-weight: $btn-font-weight;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: middle;
-  user-select: none;
-  border: $input-btn-border-width solid transparent;
-  @include button-size($input-btn-padding-y, $input-btn-padding-x, $font-size-base, $input-btn-line-height, $btn-border-radius);
-  @include transition($btn-transition);
-
-  // Share hover and focus styles
-  @include hover-focus {
-    text-decoration: none;
-  }
-  &:focus,
-  &.focus {
-    outline: 0;
-    box-shadow: $btn-focus-box-shadow;
-  }
-
-  // Disabled comes first so active can properly restyle
-  &.disabled,
-  &:disabled {
-    opacity: .65;
-    @include box-shadow(none);
-  }
-
-  &:active,
-  &.active {
-    background-image: none;
-    @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
-  }
-}
-
-// Future-proof disabling of clicks on `<a>` elements
-a.btn.disabled,
-fieldset[disabled] a.btn {
-  pointer-events: none;
-}
-
-
-//
-// Alternate buttons
-//
-
-@each $color, $value in $theme-colors {
-  .btn-#{$color} {
-    @include button-variant($value, $value);
-  }
-}
-
-@each $color, $value in $theme-colors {
-  .btn-outline-#{$color} {
-    @include button-outline-variant($value, #fff);
-  }
-}
-
-
-//
-// Link buttons
-//
-
-// Make a button look and behave like a link
-.btn-link {
-  font-weight: $font-weight-normal;
-  color: $link-color;
-  border-radius: 0;
-
-  &,
-  &:active,
-  &.active,
-  &:disabled {
-    background-color: transparent;
-    @include box-shadow(none);
-  }
-  &,
-  &:focus,
-  &:active {
-    border-color: transparent;
-    box-shadow: none;
-  }
-  @include hover {
-    border-color: transparent;
-  }
-  @include hover-focus {
-    color: $link-hover-color;
-    text-decoration: $link-hover-decoration;
-    background-color: transparent;
-  }
-  &:disabled {
-    color: $btn-link-disabled-color;
-
-    @include hover-focus {
-      text-decoration: none;
-    }
-  }
-}
-
-
-//
-// Button Sizes
-//
-
-.btn-lg {
-  @include button-size($input-btn-padding-y-lg, $input-btn-padding-x-lg, $font-size-lg, $line-height-lg, $btn-border-radius-lg);
-}
-
-.btn-sm {
-  @include button-size($input-btn-padding-y-sm, $input-btn-padding-x-sm, $font-size-sm, $line-height-sm, $btn-border-radius-sm);
-}
-
-
-//
-// Block button
-//
-
-.btn-block {
-  display: block;
-  width: 100%;
-}
-
-// Vertically space out multiple block buttons
-.btn-block + .btn-block {
-  margin-top: $btn-block-spacing-y;
-}
-
-// Specificity overrides
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
-  &.btn-block {
-    width: 100%;
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_card.scss b/website/assets/vendor/bootstrap/scss/_card.scss
deleted file mode 100755
index 1ab85a4ec..000000000
--- a/website/assets/vendor/bootstrap/scss/_card.scss
+++ /dev/null
@@ -1,223 +0,0 @@
-//
-// Base styles
-//
-
-.card {
-  position: relative;
-  display: flex;
-  flex-direction: column;
-  min-width: 0;
-  word-wrap: break-word;
-  background-color: $card-bg;
-  background-clip: border-box;
-  border: $card-border-width solid $card-border-color;
-  @include border-radius($card-border-radius);
-}
-
-.card-body {
-  // Enable `flex-grow: 1` for decks and groups so that card blocks take up
-  // as much space as possible, ensuring footers are aligned to the bottom.
-  flex: 1 1 auto;
-  padding: $card-spacer-x;
-}
-
-.card-title {
-  margin-bottom: $card-spacer-y;
-}
-
-.card-subtitle {
-  margin-top: -($card-spacer-y / 2);
-  margin-bottom: 0;
-}
-
-.card-text:last-child {
-  margin-bottom: 0;
-}
-
-.card-link {
-  @include hover {
-    text-decoration: none;
-  }
-
-  + .card-link {
-    margin-left: $card-spacer-x;
-  }
-}
-
-.card {
-  > .list-group:first-child {
-    .list-group-item:first-child {
-      @include border-top-radius($card-border-radius);
-    }
-  }
-
-  > .list-group:last-child {
-    .list-group-item:last-child {
-      @include border-bottom-radius($card-border-radius);
-    }
-  }
-}
-
-
-//
-// Optional textual caps
-//
-
-.card-header {
-  padding: $card-spacer-y $card-spacer-x;
-  margin-bottom: 0; // Removes the default margin-bottom of <hN>
-  background-color: $card-cap-bg;
-  border-bottom: $card-border-width solid $card-border-color;
-
-  &:first-child {
-    @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
-  }
-}
-
-.card-footer {
-  padding: $card-spacer-y $card-spacer-x;
-  background-color: $card-cap-bg;
-  border-top: $card-border-width solid $card-border-color;
-
-  &:last-child {
-    @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);
-  }
-}
-
-
-//
-// Header navs
-//
-
-.card-header-tabs {
-  margin-right: -($card-spacer-x / 2);
-  margin-bottom: -$card-spacer-y;
-  margin-left: -($card-spacer-x / 2);
-  border-bottom: 0;
-}
-
-.card-header-pills {
-  margin-right: -($card-spacer-x / 2);
-  margin-left: -($card-spacer-x / 2);
-}
-
-// Card image
-.card-img-overlay {
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  padding: $card-img-overlay-padding;
-}
-
-.card-img {
-  width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
-  @include border-radius($card-inner-border-radius);
-}
-
-// Card image caps
-.card-img-top {
-  width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
-  @include border-top-radius($card-inner-border-radius);
-}
-
-.card-img-bottom {
-  width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
-  @include border-bottom-radius($card-inner-border-radius);
-}
-
-
-// Card deck
-
-@include media-breakpoint-up(sm) {
-  .card-deck {
-    display: flex;
-    flex-flow: row wrap;
-    margin-right: -$card-deck-margin;
-    margin-left: -$card-deck-margin;
-
-    .card {
-      display: flex;
-      flex: 1 0 0%;
-      flex-direction: column;
-      margin-right: $card-deck-margin;
-      margin-left: $card-deck-margin;
-    }
-  }
-}
-
-
-//
-// Card groups
-//
-
-@include media-breakpoint-up(sm) {
-  .card-group {
-    display: flex;
-    flex-flow: row wrap;
-
-    .card {
-      flex: 1 0 0%;
-
-      + .card {
-        margin-left: 0;
-        border-left: 0;
-      }
-
-      // Handle rounded corners
-      @if $enable-rounded {
-        &:first-child {
-          @include border-right-radius(0);
-
-          .card-img-top {
-            border-top-right-radius: 0;
-          }
-          .card-img-bottom {
-            border-bottom-right-radius: 0;
-          }
-        }
-        &:last-child {
-          @include border-left-radius(0);
-
-          .card-img-top {
-            border-top-left-radius: 0;
-          }
-          .card-img-bottom {
-            border-bottom-left-radius: 0;
-          }
-        }
-
-        &:not(:first-child):not(:last-child) {
-          border-radius: 0;
-
-          .card-img-top,
-          .card-img-bottom {
-            border-radius: 0;
-          }
-        }
-      }
-    }
-  }
-}
-
-
-//
-// Columns
-//
-
-.card-columns {
-  .card {
-    margin-bottom: $card-columns-margin;
-  }
-
-  @include media-breakpoint-up(sm) {
-    column-count: $card-columns-count;
-    column-gap: $card-columns-gap;
-
-    .card {
-      display: inline-block; // Don't let them vertically span multiple columns
-      width: 100%; // Don't let their width change
-    }
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_carousel.scss b/website/assets/vendor/bootstrap/scss/_carousel.scss
deleted file mode 100755
index 8aa14ace7..000000000
--- a/website/assets/vendor/bootstrap/scss/_carousel.scss
+++ /dev/null
@@ -1,185 +0,0 @@
-// Wrapper for the slide container and indicators
-.carousel {
-  position: relative;
-}
-
-.carousel-inner {
-  position: relative;
-  width: 100%;
-  overflow: hidden;
-}
-
-.carousel-item {
-  position: relative;
-  display: none;
-  align-items: center;
-  width: 100%;
-  @include transition($carousel-transition);
-  backface-visibility: hidden;
-  perspective: 1000px;
-}
-
-.carousel-item.active,
-.carousel-item-next,
-.carousel-item-prev {
-  display: block;
-}
-
-.carousel-item-next,
-.carousel-item-prev {
-  position: absolute;
-  top: 0;
-}
-
-// CSS3 transforms when supported by the browser
-.carousel-item-next.carousel-item-left,
-.carousel-item-prev.carousel-item-right {
-  transform: translateX(0);
-
-  @supports (transform-style: preserve-3d) {
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-.carousel-item-next,
-.active.carousel-item-right {
-  transform: translateX(100%);
-
-  @supports (transform-style: preserve-3d) {
-    transform: translate3d(100%, 0, 0);
-  }
-}
-
-.carousel-item-prev,
-.active.carousel-item-left {
-  transform: translateX(-100%);
-
-  @supports (transform-style: preserve-3d) {
-    transform: translate3d(-100%, 0, 0);
-  }
-}
-
-
-//
-// Left/right controls for nav
-//
-
-.carousel-control-prev,
-.carousel-control-next {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  // Use flex for alignment (1-3)
-  display: flex; // 1. allow flex styles
-  align-items: center; // 2. vertically center contents
-  justify-content: center; // 3. horizontally center contents
-  width: $carousel-control-width;
-  color: $carousel-control-color;
-  text-align: center;
-  opacity: $carousel-control-opacity;
-  // We can't have a transition here because WebKit cancels the carousel
-  // animation if you trip this while in the middle of another animation.
-
-  // Hover/focus state
-  @include hover-focus {
-    color: $carousel-control-color;
-    text-decoration: none;
-    outline: 0;
-    opacity: .9;
-  }
-}
-.carousel-control-prev {
-  left: 0;
-}
-.carousel-control-next {
-  right: 0;
-}
-
-// Icons for within
-.carousel-control-prev-icon,
-.carousel-control-next-icon {
-  display: inline-block;
-  width: $carousel-control-icon-width;
-  height: $carousel-control-icon-width;
-  background: transparent no-repeat center center;
-  background-size: 100% 100%;
-}
-.carousel-control-prev-icon {
-  background-image: $carousel-control-prev-icon-bg;
-}
-.carousel-control-next-icon {
-  background-image: $carousel-control-next-icon-bg;
-}
-
-
-// Optional indicator pips
-//
-// Add an ordered list with the following class and add a list item for each
-// slide your carousel holds.
-
-.carousel-indicators {
-  position: absolute;
-  right: 0;
-  bottom: 10px;
-  left: 0;
-  z-index: 15;
-  display: flex;
-  justify-content: center;
-  padding-left: 0; // override <ol> default
-  // Use the .carousel-control's width as margin so we don't overlay those
-  margin-right: $carousel-control-width;
-  margin-left: $carousel-control-width;
-  list-style: none;
-
-  li {
-    position: relative;
-    flex: 0 1 auto;
-    width: $carousel-indicator-width;
-    height: $carousel-indicator-height;
-    margin-right: $carousel-indicator-spacer;
-    margin-left: $carousel-indicator-spacer;
-    text-indent: -999px;
-    background-color: rgba($carousel-indicator-active-bg, .5);
-
-    // Use pseudo classes to increase the hit area by 10px on top and bottom.
-    &::before {
-      position: absolute;
-      top: -10px;
-      left: 0;
-      display: inline-block;
-      width: 100%;
-      height: 10px;
-      content: "";
-    }
-    &::after {
-      position: absolute;
-      bottom: -10px;
-      left: 0;
-      display: inline-block;
-      width: 100%;
-      height: 10px;
-      content: "";
-    }
-  }
-
-  .active {
-    background-color: $carousel-indicator-active-bg;
-  }
-}
-
-
-// Optional captions
-//
-//
-
-.carousel-caption {
-  position: absolute;
-  right: ((100% - $carousel-caption-width) / 2);
-  bottom: 20px;
-  left: ((100% - $carousel-caption-width) / 2);
-  z-index: 10;
-  padding-top: 20px;
-  padding-bottom: 20px;
-  color: $carousel-caption-color;
-  text-align: center;
-}
diff --git a/website/assets/vendor/bootstrap/scss/_close.scss b/website/assets/vendor/bootstrap/scss/_close.scss
deleted file mode 100755
index f18149051..000000000
--- a/website/assets/vendor/bootstrap/scss/_close.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-.close {
-  float: right;
-  font-size: $close-font-size;
-  font-weight: $close-font-weight;
-  line-height: 1;
-  color: $close-color;
-  text-shadow: $close-text-shadow;
-  opacity: .5;
-
-  @include hover-focus {
-    color: $close-color;
-    text-decoration: none;
-    opacity: .75;
-  }
-}
-
-// Additional properties for button version
-// iOS requires the button element instead of an anchor tag.
-// If you want the anchor version, it requires `href="#"`.
-// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
-
-// scss-lint:disable QualifyingElement
-button.close {
-  padding: 0;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
-// scss-lint:enable QualifyingElement
diff --git a/website/assets/vendor/bootstrap/scss/_code.scss b/website/assets/vendor/bootstrap/scss/_code.scss
deleted file mode 100755
index 759da15b7..000000000
--- a/website/assets/vendor/bootstrap/scss/_code.scss
+++ /dev/null
@@ -1,64 +0,0 @@
-// Inline and block code styles
-code,
-kbd,
-pre,
-samp {
-  font-family: $font-family-monospace;
-}
-
-// Inline code
-code {
-  padding: $code-padding-y $code-padding-x;
-  font-size: $code-font-size;
-  color: $code-color;
-  background-color: $code-bg;
-  @include border-radius($border-radius);
-
-  // Streamline the style when inside anchors to avoid broken underline and more
-  a > & {
-    padding: 0;
-    color: inherit;
-    background-color: inherit;
-  }
-}
-
-// User input typically entered via keyboard
-kbd {
-  padding: $code-padding-y $code-padding-x;
-  font-size: $code-font-size;
-  color: $kbd-color;
-  background-color: $kbd-bg;
-  @include border-radius($border-radius-sm);
-  @include box-shadow($kbd-box-shadow);
-
-  kbd {
-    padding: 0;
-    font-size: 100%;
-    font-weight: $nested-kbd-font-weight;
-    @include box-shadow(none);
-  }
-}
-
-// Blocks of code
-pre {
-  display: block;
-  margin-top: 0;
-  margin-bottom: 1rem;
-  font-size: $code-font-size;
-  color: $pre-color;
-
-  // Account for some code outputs that place code tags in pre tags
-  code {
-    padding: 0;
-    font-size: inherit;
-    color: inherit;
-    background-color: transparent;
-    border-radius: 0;
-  }
-}
-
-// Enable scrollable blocks of code
-.pre-scrollable {
-  max-height: $pre-scrollable-max-height;
-  overflow-y: scroll;
-}
diff --git a/website/assets/vendor/bootstrap/scss/_custom-forms.scss b/website/assets/vendor/bootstrap/scss/_custom-forms.scss
deleted file mode 100755
index b58fffb8f..000000000
--- a/website/assets/vendor/bootstrap/scss/_custom-forms.scss
+++ /dev/null
@@ -1,254 +0,0 @@
-// scss-lint:disable PropertyCount, VendorPrefix
-
-// Embedded icons from Open Iconic.
-// Released under MIT and copyright 2014 Waybury.
-// https://useiconic.com/open
-
-
-// Checkboxes and radios
-//
-// Base class takes care of all the key behavioral aspects.
-
-.custom-control {
-  position: relative;
-  display: inline-flex;
-  min-height: (1rem * $line-height-base);
-  padding-left: $custom-control-gutter;
-  margin-right: $custom-control-spacer-x;
-}
-
-.custom-control-input {
-  position: absolute;
-  z-index: -1; // Put the input behind the label so it doesn't overlay text
-  opacity: 0;
-
-  &:checked ~ .custom-control-indicator {
-    color: $custom-control-indicator-checked-color;
-    background-color: $custom-control-indicator-checked-bg;
-    @include box-shadow($custom-control-indicator-checked-box-shadow);
-  }
-
-  &:focus ~ .custom-control-indicator {
-    // the mixin is not used here to make sure there is feedback
-    box-shadow: $custom-control-indicator-focus-box-shadow;
-  }
-
-  &:active ~ .custom-control-indicator {
-    color: $custom-control-indicator-active-color;
-    background-color: $custom-control-indicator-active-bg;
-    @include box-shadow($custom-control-indicator-active-box-shadow);
-  }
-
-  &:disabled {
-    ~ .custom-control-indicator {
-      background-color: $custom-control-indicator-disabled-bg;
-    }
-
-    ~ .custom-control-description {
-      color: $custom-control-description-disabled-color;
-    }
-  }
-}
-
-// Custom indicator
-//
-// Generates a shadow element to create our makeshift checkbox/radio background.
-
-.custom-control-indicator {
-  position: absolute;
-  top: (($line-height-base - $custom-control-indicator-size) / 2);
-  left: 0;
-  display: block;
-  width: $custom-control-indicator-size;
-  height: $custom-control-indicator-size;
-  pointer-events: none;
-  user-select: none;
-  background-color: $custom-control-indicator-bg;
-  background-repeat: no-repeat;
-  background-position: center center;
-  background-size: $custom-control-indicator-bg-size;
-  @include box-shadow($custom-control-indicator-box-shadow);
-}
-
-// Checkboxes
-//
-// Tweak just a few things for checkboxes.
-
-.custom-checkbox {
-  .custom-control-indicator {
-    @include border-radius($custom-checkbox-border-radius);
-  }
-
-  .custom-control-input:checked ~ .custom-control-indicator {
-    background-image: $custom-checkbox-icon-checked;
-  }
-
-  .custom-control-input:indeterminate ~ .custom-control-indicator {
-    background-color: $custom-checkbox-indeterminate-bg;
-    background-image: $custom-checkbox-icon-indeterminate;
-    @include box-shadow($custom-checkbox-indeterminate-box-shadow);
-  }
-}
-
-// Radios
-//
-// Tweak just a few things for radios.
-
-.custom-radio {
-  .custom-control-indicator {
-    border-radius: $custom-radio-border-radius;
-  }
-
-  .custom-control-input:checked ~ .custom-control-indicator {
-    background-image: $custom-radio-icon-checked;
-  }
-}
-
-
-// Layout options
-//
-// By default radios and checkboxes are `inline-block` with no additional spacing
-// set. Use these optional classes to tweak the layout.
-
-.custom-controls-stacked {
-  display: flex;
-  flex-direction: column;
-
-  .custom-control {
-    margin-bottom: $custom-control-spacer-y;
-
-    + .custom-control {
-      margin-left: 0;
-    }
-  }
-}
-
-
-// Select
-//
-// Replaces the browser default select with a custom one, mostly pulled from
-// http://primercss.io.
-//
-
-.custom-select {
-  display: inline-block;
-  max-width: 100%;
-  height: $input-height;
-  padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;
-  line-height: $custom-select-line-height;
-  color: $custom-select-color;
-  vertical-align: middle;
-  background: $custom-select-bg $custom-select-indicator no-repeat right $custom-select-padding-x center;
-  background-size: $custom-select-bg-size;
-  border: $custom-select-border-width solid $custom-select-border-color;
-  @if $enable-rounded {
-    border-radius: $custom-select-border-radius;
-  } @else {
-    border-radius: 0;
-  }
-  appearance: none;
-
-  &:focus {
-    border-color: $custom-select-focus-border-color;
-    outline: none;
-    @include box-shadow($custom-select-focus-box-shadow);
-
-    &::-ms-value {
-      // For visual consistency with other platforms/browsers,
-      // supress the default white text on blue background highlight given to
-      // the selected option text when the (still closed) <select> receives focus
-      // in IE and (under certain conditions) Edge.
-      // See https://github.com/twbs/bootstrap/issues/19398.
-      color: $input-color;
-      background-color: $input-bg;
-    }
-  }
-
-  &:disabled {
-    color: $custom-select-disabled-color;
-    background-color: $custom-select-disabled-bg;
-  }
-
-  // Hides the default caret in IE11
-  &::-ms-expand {
-    opacity: 0;
-  }
-}
-
-.custom-select-sm {
-  height: $custom-select-height-sm;
-  padding-top: $custom-select-padding-y;
-  padding-bottom: $custom-select-padding-y;
-  font-size: $custom-select-font-size-sm;
-}
-
-
-// File
-//
-// Custom file input.
-
-.custom-file {
-  position: relative;
-  display: inline-block;
-  max-width: 100%;
-  height: $custom-file-height;
-  margin-bottom: 0;
-}
-
-.custom-file-input {
-  min-width: $custom-file-width;
-  max-width: 100%;
-  height: $custom-file-height;
-  margin: 0;
-  opacity: 0;
-
-  &:focus ~ .custom-file-control {
-    @include box-shadow($custom-file-focus-box-shadow);
-  }
-}
-
-.custom-file-control {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  z-index: 5;
-  height: $custom-file-height;
-  padding: $custom-file-padding-x $custom-file-padding-y;
-  line-height: $custom-file-line-height;
-  color: $custom-file-color;
-  pointer-events: none;
-  user-select: none;
-  background-color: $custom-file-bg;
-  border: $custom-file-border-width solid $custom-file-border-color;
-  @include border-radius($custom-file-border-radius);
-  @include box-shadow($custom-file-box-shadow);
-
-  @each $lang, $text in map-get($custom-file-text, placeholder) {
-    &:lang(#{$lang}):empty::after {
-      content: $text;
-    }
-  }
-
-  &::before {
-    position: absolute;
-    top: -$custom-file-border-width;
-    right: -$custom-file-border-width;
-    bottom: -$custom-file-border-width;
-    z-index: 6;
-    display: block;
-    height: $custom-file-height;
-    padding: $custom-file-padding-x $custom-file-padding-y;
-    line-height: $custom-file-line-height;
-    color: $custom-file-button-color;
-    background-color: $custom-file-button-bg;
-    border: $custom-file-border-width solid $custom-file-border-color;
-    @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);
-  }
-
-  @each $lang, $text in map-get($custom-file-text, button-label) {
-    &:lang(#{$lang})::before {
-      content: $text;
-    }
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_dropdown.scss b/website/assets/vendor/bootstrap/scss/_dropdown.scss
deleted file mode 100755
index ac19ee0bd..000000000
--- a/website/assets/vendor/bootstrap/scss/_dropdown.scss
+++ /dev/null
@@ -1,123 +0,0 @@
-// The dropdown wrapper (`<div>`)
-.dropup,
-.dropdown {
-  position: relative;
-}
-
-.dropdown-toggle {
-  // Generate the caret automatically
-  &::after {
-    display: inline-block;
-    width: 0;
-    height: 0;
-    margin-left: $caret-width * .85;
-    vertical-align: $caret-width * .85;
-    content: "";
-    border-top: $caret-width solid;
-    border-right: $caret-width solid transparent;
-    border-left: $caret-width solid transparent;
-  }
-
-  &:empty::after {
-    margin-left: 0;
-  }
-}
-
-// Allow for dropdowns to go bottom up (aka, dropup-menu)
-// Just add .dropup after the standard .dropdown class and you're set.
-.dropup {
-  .dropdown-toggle {
-    &::after {
-      border-top: 0;
-      border-bottom: $caret-width solid;
-    }
-  }
-}
-
-// The dropdown menu
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: $zindex-dropdown;
-  display: none; // none by default, but block on "open" of the menu
-  float: left;
-  min-width: $dropdown-min-width;
-  padding: $dropdown-padding-y 0;
-  margin: $dropdown-margin-top 0 0; // override default ul
-  font-size: $font-size-base; // Redeclare because nesting can cause inheritance issues
-  color: $body-color;
-  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
-  list-style: none;
-  background-color: $dropdown-bg;
-  background-clip: padding-box;
-  border: $dropdown-border-width solid $dropdown-border-color;
-  @include border-radius($border-radius);
-  @include box-shadow($dropdown-box-shadow);
-}
-
-// Dividers (basically an `<hr>`) within the dropdown
-.dropdown-divider {
-  @include nav-divider($dropdown-divider-bg);
-}
-
-// Links, buttons, and more within the dropdown menu
-//
-// `<button>`-specific styles are denoted with `// For <button>s`
-.dropdown-item {
-  display: block;
-  width: 100%; // For `<button>`s
-  padding: $dropdown-item-padding-y $dropdown-item-padding-x;
-  clear: both;
-  font-weight: $font-weight-normal;
-  color: $dropdown-link-color;
-  text-align: inherit; // For `<button>`s
-  white-space: nowrap; // prevent links from randomly breaking onto new lines
-  background: none; // For `<button>`s
-  border: 0; // For `<button>`s
-
-  @include hover-focus {
-    color: $dropdown-link-hover-color;
-    text-decoration: none;
-    background-color: $dropdown-link-hover-bg;
-  }
-
-  &.active,
-  &:active {
-    color: $dropdown-link-active-color;
-    text-decoration: none;
-    background-color: $dropdown-link-active-bg;
-  }
-
-  &.disabled,
-  &:disabled {
-    color: $dropdown-link-disabled-color;
-    background-color: transparent;
-    // Remove CSS gradients if they're enabled
-    @if $enable-gradients {
-      background-image: none;
-    }
-  }
-}
-
-// Open state for the dropdown
-.show {
-  // Remove the outline when :focus is triggered
-  > a {
-    outline: 0;
-  }
-}
-
-.dropdown-menu.show {
-  display: block;
-}
-
-// Dropdown section headers
-.dropdown-header {
-  display: block;
-  padding: $dropdown-padding-y $dropdown-item-padding-x;
-  margin-bottom: 0; // for use with heading elements
-  font-size: $font-size-sm;
-  color: $dropdown-header-color;
-  white-space: nowrap; // as with > li > a
-}
diff --git a/website/assets/vendor/bootstrap/scss/_forms.scss b/website/assets/vendor/bootstrap/scss/_forms.scss
deleted file mode 100755
index 519554b47..000000000
--- a/website/assets/vendor/bootstrap/scss/_forms.scss
+++ /dev/null
@@ -1,390 +0,0 @@
-// scss-lint:disable QualifyingElement, VendorPrefix
-
-//
-// Textual form controls
-//
-
-.form-control {
-  display: block;
-  width: 100%;
-  // // Make inputs at least the height of their button counterpart (base line-height + padding + border)
-  // height: $input-height;
-  padding: $input-btn-padding-y $input-btn-padding-x;
-  font-size: $font-size-base;
-  line-height: $input-btn-line-height;
-  color: $input-color;
-  background-color: $input-bg;
-  // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214.
-  background-image: none;
-  background-clip: padding-box;
-  border: $input-btn-border-width solid $input-border-color;
-
-  // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.
-  @if $enable-rounded {
-    // Manually use the if/else instead of the mixin to account for iOS override
-    border-radius: $input-border-radius;
-  } @else {
-    // Otherwise undo the iOS default
-    border-radius: 0;
-  }
-
-  @include box-shadow($input-box-shadow);
-  @include transition($input-transition);
-
-  // Unstyle the caret on `<select>`s in IE10+.
-  &::-ms-expand {
-    background-color: transparent;
-    border: 0;
-  }
-
-  // Customize the `:focus` state to imitate native WebKit styles.
-  @include form-control-focus();
-
-  // Placeholder
-  &::placeholder {
-    color: $input-placeholder-color;
-    // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.
-    opacity: 1;
-  }
-
-  // Disabled and read-only inputs
-  //
-  // HTML5 says that controls under a fieldset > legend:first-child won't be
-  // disabled if the fieldset is disabled. Due to implementation difficulty, we
-  // don't honor that edge case; we style them as disabled anyway.
-  &:disabled,
-  &[readonly] {
-    background-color: $input-disabled-bg;
-    // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.
-    opacity: 1;
-  }
-}
-
-select.form-control {
-  &:not([size]):not([multiple]) {
-    height: $input-height;
-  }
-
-  &:focus::-ms-value {
-    // Suppress the nested default white text on blue background highlight given to
-    // the selected option text when the (still closed) <select> receives focus
-    // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to
-    // match the appearance of the native widget.
-    // See https://github.com/twbs/bootstrap/issues/19398.
-    color: $input-color;
-    background-color: $input-bg;
-  }
-}
-
-// Make file inputs better match text inputs by forcing them to new lines.
-.form-control-file,
-.form-control-range {
-  display: block;
-}
-
-
-//
-// Labels
-//
-
-// For use with horizontal and inline forms, when you need the label text to
-// align with the form controls.
-.col-form-label {
-  padding-top: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
-  padding-bottom: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
-  margin-bottom: 0; // Override the `<label>` default
-}
-
-.col-form-label-lg {
-  padding-top: calc(#{$input-btn-padding-y-lg} - #{$input-btn-border-width} * 2);
-  padding-bottom: calc(#{$input-btn-padding-y-lg} - #{$input-btn-border-width} * 2);
-  font-size: $font-size-lg;
-}
-
-.col-form-label-sm {
-  padding-top: calc(#{$input-btn-padding-y-sm} - #{$input-btn-border-width} * 2);
-  padding-bottom: calc(#{$input-btn-padding-y-sm} - #{$input-btn-border-width} * 2);
-  font-size: $font-size-sm;
-}
-
-
-//
-// Legends
-//
-
-// For use with horizontal and inline forms, when you need the legend text to
-// be the same size as regular labels, and to align with the form controls.
-.col-form-legend {
-  padding-top: $input-btn-padding-y;
-  padding-bottom: $input-btn-padding-y;
-  margin-bottom: 0;
-  font-size: $font-size-base;
-}
-
-
-// Readonly controls as plain text
-//
-// Apply class to a readonly input to make it appear like regular plain
-// text (without any border, background color, focus indicator)
-
-.form-control-plaintext {
-  padding-top: $input-btn-padding-y;
-  padding-bottom: $input-btn-padding-y;
-  margin-bottom: 0; // match inputs if this class comes on inputs with default margins
-  line-height: $input-btn-line-height;
-  border: solid transparent;
-  border-width: $input-btn-border-width 0;
-
-  &.form-control-sm,
-  &.form-control-lg {
-    padding-right: 0;
-    padding-left: 0;
-  }
-}
-
-
-// Form control sizing
-//
-// Build on `.form-control` with modifier classes to decrease or increase the
-// height and font-size of form controls.
-//
-// The `.form-group-* form-control` variations are sadly duplicated to avoid the
-// issue documented in https://github.com/twbs/bootstrap/issues/15074.
-
-.form-control-sm {
-  padding: $input-btn-padding-y-sm $input-btn-padding-x-sm;
-  font-size: $font-size-sm;
-  line-height: $input-btn-line-height-sm;
-  @include border-radius($input-border-radius-sm);
-}
-
-select.form-control-sm {
-  &:not([size]):not([multiple]) {
-    height: $input-height-sm;
-  }
-}
-
-.form-control-lg {
-  padding: $input-btn-padding-y-lg $input-btn-padding-x-lg;
-  font-size: $font-size-lg;
-  line-height: $input-btn-line-height-lg;
-  @include border-radius($input-border-radius-lg);
-}
-
-select.form-control-lg {
-  &:not([size]):not([multiple]) {
-    height: $input-height-lg;
-  }
-}
-
-
-// Form groups
-//
-// Designed to help with the organization and spacing of vertical forms. For
-// horizontal forms, use the predefined grid classes.
-
-.form-group {
-  margin-bottom: $form-group-margin-bottom;
-}
-
-.form-text {
-  display: block;
-  margin-top: $form-text-margin-top;
-}
-
-
-// Form grid
-//
-// Special replacement for our grid system's `.row` for tighter form layouts.
-
-.form-row {
-  display: flex;
-  flex-wrap: wrap;
-  margin-right: -5px;
-  margin-left: -5px;
-
-  > .col,
-  > [class*="col-"] {
-    padding-right: 5px;
-    padding-left: 5px;
-  }
-}
-
-
-// Checkboxes and radios
-//
-// Indent the labels to position radios/checkboxes as hanging controls.
-
-.form-check {
-  position: relative;
-  display: block;
-  margin-bottom: $form-check-margin-bottom;
-
-  &.disabled {
-    .form-check-label {
-      color: $text-muted;
-    }
-  }
-}
-
-.form-check-label {
-  padding-left: $form-check-input-gutter;
-  margin-bottom: 0; // Override default `<label>` bottom margin
-}
-
-.form-check-input {
-  position: absolute;
-  margin-top: $form-check-input-margin-y;
-  margin-left: -$form-check-input-gutter;
-
-  &:only-child {
-    position: static;
-  }
-}
-
-// Radios and checkboxes on same line
-.form-check-inline {
-  display: inline-block;
-
-  .form-check-label {
-    vertical-align: middle;
-  }
-
-  + .form-check-inline {
-    margin-left: $form-check-inline-margin-x;
-  }
-}
-
-
-// Form validation
-//
-// Provide feedback to users when form field values are valid or invalid. Works
-// primarily for client-side validation via scoped `:invalid` and `:valid`
-// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for
-// server side validation.
-
-.invalid-feedback {
-  display: none;
-  margin-top: .25rem;
-  font-size: .875rem;
-  color: $form-feedback-invalid-color;
-}
-
-.invalid-tooltip {
-  position: absolute;
-  top: 100%;
-  z-index: 5;
-  display: none;
-  width: 250px;
-  padding: .5rem;
-  margin-top: .1rem;
-  font-size: .875rem;
-  line-height: 1;
-  color: #fff;
-  background-color: rgba($form-feedback-invalid-color,.8);
-  border-radius: .2rem;
-}
-
-@include form-validation-state("valid", $form-feedback-valid-color);
-@include form-validation-state("invalid", $form-feedback-invalid-color);
-
-// Inline forms
-//
-// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
-// forms begin stacked on extra small (mobile) devices and then go inline when
-// viewports reach <768px.
-//
-// Requires wrapping inputs and labels with `.form-group` for proper display of
-// default HTML form controls and our custom form controls (e.g., input groups).
-
-.form-inline {
-  display: flex;
-  flex-flow: row wrap;
-  align-items: center; // Prevent shorter elements from growing to same height as others (e.g., small buttons growing to normal sized button height)
-
-  // Because we use flex, the initial sizing of checkboxes is collapsed and
-  // doesn't occupy the full-width (which is what we want for xs grid tier),
-  // so we force that here.
-  .form-check {
-    width: 100%;
-  }
-
-  // Kick in the inline
-  @include media-breakpoint-up(sm) {
-    label {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      margin-bottom: 0;
-    }
-
-    // Inline-block all the things for "inline"
-    .form-group {
-      display: flex;
-      flex: 0 0 auto;
-      flex-flow: row wrap;
-      align-items: center;
-      margin-bottom: 0;
-    }
-
-    // Allow folks to *not* use `.form-group`
-    .form-control {
-      display: inline-block;
-      width: auto; // Prevent labels from stacking above inputs in `.form-group`
-      vertical-align: middle;
-    }
-
-    // Make static controls behave like regular ones
-    .form-control-plaintext {
-      display: inline-block;
-    }
-
-    .input-group {
-      width: auto;
-    }
-
-    .form-control-label {
-      margin-bottom: 0;
-      vertical-align: middle;
-    }
-
-    // Remove default margin on radios/checkboxes that were used for stacking, and
-    // then undo the floating of radios and checkboxes to match.
-    .form-check {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      width: auto;
-      margin-top: 0;
-      margin-bottom: 0;
-    }
-    .form-check-label {
-      padding-left: 0;
-    }
-    .form-check-input {
-      position: relative;
-      margin-top: 0;
-      margin-right: $form-check-input-margin-x;
-      margin-left: 0;
-    }
-
-    // Custom form controls
-    .custom-control {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      padding-left: 0;
-    }
-    .custom-control-indicator {
-      position: static;
-      display: inline-block;
-      margin-right: $form-check-input-margin-x; // Flexbox alignment means we lose our HTML space here, so we compensate.
-      vertical-align: text-bottom;
-    }
-
-    // Re-override the feedback icon.
-    .has-feedback .form-control-feedback {
-      top: 0;
-    }
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_functions.scss b/website/assets/vendor/bootstrap/scss/_functions.scss
deleted file mode 100755
index 6c0601c50..000000000
--- a/website/assets/vendor/bootstrap/scss/_functions.scss
+++ /dev/null
@@ -1,90 +0,0 @@
-// Bootstrap functions
-//
-// Utility mixins and functions for evalutating source code across our variables, maps, and mixins.
-
-// Ascending
-// Used to evaluate Sass maps like our grid breakpoints.
-@mixin _assert-ascending($map, $map-name) {
-  $prev-key: null;
-  $prev-num: null;
-  @each $key, $num in $map {
-    @if $prev-num == null {
-      // Do nothing
-    } @else if not comparable($prev-num, $num) {
-      @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
-    } @else if $prev-num >= $num {
-      @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !";
-    }
-    $prev-key: $key;
-    $prev-num: $num;
-  }
-}
-
-// Starts at zero
-// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0.
-@mixin _assert-starts-at-zero($map) {
-  $values: map-values($map);
-  $first-value: nth($values, 1);
-  @if $first-value != 0 {
-    @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}.";
-  }
-}
-
-// Replace `$search` with `$replace` in `$string`
-// Used on our SVG icon backgrounds for custom forms.
-//
-// @author Hugo Giraudel
-// @param {String} $string - Initial string
-// @param {String} $search - Substring to replace
-// @param {String} $replace ('') - New value
-// @return {String} - Updated string
-@function str-replace($string, $search, $replace: "") {
-  $index: str-index($string, $search);
-
-  @if $index {
-    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
-  }
-
-  @return $string;
-}
-
-// Color contrast
-@mixin color-yiq($color) {
-  $r: red($color);
-  $g: green($color);
-  $b: blue($color);
-
-  $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
-
-  @if ($yiq >= 150) {
-    color: #111;
-  } @else {
-    color: #fff;
-  }
-}
-
-// Retreive color Sass maps
-@function color($key: "blue") {
-  @return map-get($colors, $key);
-}
-
-@function theme-color($key: "primary") {
-  @return map-get($theme-colors, $key);
-}
-
-@function grayscale($key: "100") {
-  @return map-get($grays, $key);
-}
-
-// Request a theme color level
-@function theme-color-level($color-name: "primary", $level: 0) {
-  $color: theme-color($color-name);
-  $color-base: if($level > 0, #000, #fff);
-
-  @if $level < 0 {
-    // Lighter values need a quick double negative for the Sass math to work
-    @return mix($color-base, $color, $level * -1 * $theme-color-interval);
-  } @else {
-    @return mix($color-base, $color, $level * $theme-color-interval);
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_grid.scss b/website/assets/vendor/bootstrap/scss/_grid.scss
deleted file mode 100755
index 9ab9ae02b..000000000
--- a/website/assets/vendor/bootstrap/scss/_grid.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-// Container widths
-//
-// Set the container width, and override it for fixed navbars in media queries.
-
-@if $enable-grid-classes {
-  .container {
-    @include make-container();
-    @include make-container-max-widths();
-  }
-}
-
-// Fluid container
-//
-// Utilizes the mixin meant for fixed width containers, but with 100% width for
-// fluid, full width layouts.
-
-@if $enable-grid-classes {
-  .container-fluid {
-    width: 100%;
-    @include make-container();
-  }
-}
-
-// Row
-//
-// Rows contain and clear the floats of your columns.
-
-@if $enable-grid-classes {
-  .row {
-    @include make-row();
-  }
-
-  // Remove the negative margin from default .row, then the horizontal padding
-  // from all immediate children columns (to prevent runaway style inheritance).
-  .no-gutters {
-    margin-right: 0;
-    margin-left: 0;
-
-    > .col,
-    > [class*="col-"] {
-      padding-right: 0;
-      padding-left: 0;
-    }
-  }
-}
-
-// Columns
-//
-// Common styles for small and large grid columns
-
-@if $enable-grid-classes {
-  @include make-grid-columns();
-}
diff --git a/website/assets/vendor/bootstrap/scss/_images.scss b/website/assets/vendor/bootstrap/scss/_images.scss
deleted file mode 100755
index 50c56108a..000000000
--- a/website/assets/vendor/bootstrap/scss/_images.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-// Responsive images (ensure images don't scale beyond their parents)
-//
-// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.
-// We previously tried the "images are responsive by default" approach in Bootstrap v2,
-// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)
-// which weren't expecting the images within themselves to be involuntarily resized.
-// See also https://github.com/twbs/bootstrap/issues/18178
-.img-fluid {
-  @include img-fluid;
-}
-
-
-// Image thumbnails
-.img-thumbnail {
-  padding: $thumbnail-padding;
-  background-color: $thumbnail-bg;
-  border: $thumbnail-border-width solid $thumbnail-border-color;
-  @include border-radius($thumbnail-border-radius);
-  @include transition($thumbnail-transition);
-  @include box-shadow($thumbnail-box-shadow);
-
-  // Keep them at most 100% wide
-  @include img-fluid;
-}
-
-//
-// Figures
-//
-
-.figure {
-  // Ensures the caption's text aligns with the image.
-  display: inline-block;
-}
-
-.figure-img {
-  margin-bottom: ($spacer / 2);
-  line-height: 1;
-}
-
-.figure-caption {
-  font-size: $figure-caption-font-size;
-  color: $figure-caption-color;
-}
diff --git a/website/assets/vendor/bootstrap/scss/_input-group.scss b/website/assets/vendor/bootstrap/scss/_input-group.scss
deleted file mode 100755
index 0b668bff3..000000000
--- a/website/assets/vendor/bootstrap/scss/_input-group.scss
+++ /dev/null
@@ -1,176 +0,0 @@
-//
-// Base styles
-//
-
-.input-group {
-  position: relative;
-  display: flex;
-  width: 100%;
-
-  .form-control {
-    // Ensure that the input is always above the *appended* addon button for
-    // proper border colors.
-    position: relative;
-    z-index: 2;
-    flex: 1 1 auto;
-    // Add width 1% and flex-basis auto to ensure that button will not wrap out
-    // the column. Applies to IE Edge+ and Firefox. Chrome does not require this.
-    width: 1%;
-    margin-bottom: 0;
-
-    // Bring the "active" form control to the front
-    @include hover-focus-active {
-      z-index: 3;
-    }
-  }
-}
-
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
-  // Vertically centers the content of the addons within the input group
-  display: flex;
-  align-items: center;
-
-  &:not(:first-child):not(:last-child) {
-    @include border-radius(0);
-  }
-}
-
-.input-group-addon,
-.input-group-btn {
-  white-space: nowrap;
-  vertical-align: middle; // Match the inputs
-}
-
-
-// Sizing options
-//
-// Remix the default form control sizing classes into new ones for easier
-// manipulation.
-
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
-  @extend .form-control-lg;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
-  @extend .form-control-sm;
-}
-
-
-//
-// Text input groups
-//
-
-.input-group-addon {
-  padding: $input-btn-padding-y $input-btn-padding-x;
-  margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom
-  font-size: $font-size-base; // Match inputs
-  font-weight: $font-weight-normal;
-  line-height: $input-btn-line-height;
-  color: $input-color;
-  text-align: center;
-  background-color: $input-group-addon-bg;
-  border: $input-btn-border-width solid $input-group-addon-border-color;
-  @include border-radius($input-border-radius);
-
-  // Sizing
-  &.form-control-sm {
-    padding: $input-btn-padding-y-sm $input-btn-padding-x-sm;
-    font-size: $font-size-sm;
-    @include border-radius($input-border-radius-sm);
-  }
-
-  &.form-control-lg {
-    padding: $input-btn-padding-y-lg $input-btn-padding-x-lg;
-    font-size: $font-size-lg;
-    @include border-radius($input-border-radius-lg);
-  }
-
-  // scss-lint:disable QualifyingElement
-  // Nuke default margins from checkboxes and radios to vertically center within.
-  input[type="radio"],
-  input[type="checkbox"] {
-    margin-top: 0;
-  }
-  // scss-lint:enable QualifyingElement
-}
-
-
-//
-// Reset rounded corners
-//
-
-.input-group .form-control:not(:last-child),
-.input-group-addon:not(:last-child),
-.input-group-btn:not(:last-child) > .btn,
-.input-group-btn:not(:last-child) > .btn-group > .btn,
-.input-group-btn:not(:last-child) > .dropdown-toggle,
-.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn {
-  @include border-right-radius(0);
-}
-.input-group-addon:not(:last-child) {
-  border-right: 0;
-}
-.input-group .form-control:not(:first-child),
-.input-group-addon:not(:first-child),
-.input-group-btn:not(:first-child) > .btn,
-.input-group-btn:not(:first-child) > .btn-group > .btn,
-.input-group-btn:not(:first-child) > .dropdown-toggle,
-.input-group-btn:not(:last-child) > .btn:not(:first-child),
-.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn {
-  @include border-left-radius(0);
-}
-.form-control + .input-group-addon:not(:first-child) {
-  border-left: 0;
-}
-
-//
-// Button input groups
-//
-
-.input-group-btn {
-  position: relative;
-  // Jankily prevent input button groups from wrapping with `white-space` and
-  // `font-size` in combination with `inline-block` on buttons.
-  font-size: 0;
-  white-space: nowrap;
-
-  // Negative margin for spacing, position for bringing hovered/focused/actived
-  // element above the siblings.
-  > .btn {
-    position: relative;
-
-    + .btn {
-      margin-left: (-$input-btn-border-width);
-    }
-
-    // Bring the "active" button to the front
-    @include hover-focus-active {
-      z-index: 3;
-    }
-  }
-
-  // Negative margin to only have a single, shared border between the two
-  &:not(:last-child) {
-    > .btn,
-    > .btn-group {
-      margin-right: (-$input-btn-border-width);
-    }
-  }
-  &:not(:first-child) {
-    > .btn,
-    > .btn-group {
-      z-index: 2;
-      margin-left: (-$input-btn-border-width);
-      // Because specificity
-      @include hover-focus-active {
-        z-index: 3;
-      }
-    }
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_jumbotron.scss b/website/assets/vendor/bootstrap/scss/_jumbotron.scss
deleted file mode 100755
index 7966bba1e..000000000
--- a/website/assets/vendor/bootstrap/scss/_jumbotron.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-.jumbotron {
-  padding: $jumbotron-padding ($jumbotron-padding / 2);
-  margin-bottom: $jumbotron-padding;
-  background-color: $jumbotron-bg;
-  @include border-radius($border-radius-lg);
-
-  @include media-breakpoint-up(sm) {
-    padding: ($jumbotron-padding * 2) $jumbotron-padding;
-  }
-}
-
-.jumbotron-fluid {
-  padding-right: 0;
-  padding-left: 0;
-  @include border-radius(0);
-}
diff --git a/website/assets/vendor/bootstrap/scss/_list-group.scss b/website/assets/vendor/bootstrap/scss/_list-group.scss
deleted file mode 100755
index 7e0b19e01..000000000
--- a/website/assets/vendor/bootstrap/scss/_list-group.scss
+++ /dev/null
@@ -1,114 +0,0 @@
-// Base class
-//
-// Easily usable on <ul>, <ol>, or <div>.
-
-.list-group {
-  display: flex;
-  flex-direction: column;
-
-  // No need to set list-style: none; since .list-group-item is block level
-  padding-left: 0; // reset padding because ul and ol
-  margin-bottom: 0;
-}
-
-
-// Interactive list items
-//
-// Use anchor or button elements instead of `li`s or `div`s to create interactive
-// list items. Includes an extra `.active` modifier class for selected items.
-
-.list-group-item-action {
-  width: 100%; // For `<button>`s (anchors become 100% by default though)
-  color: $list-group-action-color;
-  text-align: inherit; // For `<button>`s (anchors inherit)
-
-  // Hover state
-  @include hover-focus {
-    color: $list-group-action-hover-color;
-    text-decoration: none;
-    background-color: $list-group-hover-bg;
-  }
-
-  &:active {
-    color: $list-group-action-active-color;
-    background-color: $list-group-action-active-bg;
-  }
-}
-
-
-// Individual list items
-//
-// Use on `li`s or `div`s within the `.list-group` parent.
-
-.list-group-item {
-  position: relative;
-  display: block;
-  padding: $list-group-item-padding-y $list-group-item-padding-x;
-  // Place the border on the list items and negative margin up for better styling
-  margin-bottom: -$list-group-border-width;
-  background-color: $list-group-bg;
-  border: $list-group-border-width solid $list-group-border-color;
-
-  &:first-child {
-    @include border-top-radius($list-group-border-radius);
-  }
-
-  &:last-child {
-    margin-bottom: 0;
-    @include border-bottom-radius($list-group-border-radius);
-  }
-
-  @include hover-focus {
-    text-decoration: none;
-  }
-
-  &.disabled,
-  &:disabled {
-    color: $list-group-disabled-color;
-    background-color: $list-group-disabled-bg;
-  }
-
-  // Include both here for `<a>`s and `<button>`s
-  &.active {
-    z-index: 2; // Place active items above their siblings for proper border styling
-    color: $list-group-active-color;
-    background-color: $list-group-active-bg;
-    border-color: $list-group-active-border-color;
-  }
-}
-
-
-// Flush list items
-//
-// Remove borders and border-radius to keep list group items edge-to-edge. Most
-// useful within other components (e.g., cards).
-
-.list-group-flush {
-  .list-group-item {
-    border-right: 0;
-    border-left: 0;
-    border-radius: 0;
-  }
-
-  &:first-child {
-    .list-group-item:first-child {
-      border-top: 0;
-    }
-  }
-
-  &:last-child {
-    .list-group-item:last-child {
-      border-bottom: 0;
-    }
-  }
-}
-
-
-// Contextual variants
-//
-// Add modifier classes to change text and background color on individual items.
-// Organizationally, this must come after the `:hover` states.
-
-@each $color, $value in $theme-colors {
-  @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6));
-}
diff --git a/website/assets/vendor/bootstrap/scss/_media.scss b/website/assets/vendor/bootstrap/scss/_media.scss
deleted file mode 100755
index b573052c1..000000000
--- a/website/assets/vendor/bootstrap/scss/_media.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-.media {
-  display: flex;
-  align-items: flex-start;
-}
-
-.media-body {
-  flex: 1;
-}
diff --git a/website/assets/vendor/bootstrap/scss/_mixins.scss b/website/assets/vendor/bootstrap/scss/_mixins.scss
deleted file mode 100755
index 09035bf10..000000000
--- a/website/assets/vendor/bootstrap/scss/_mixins.scss
+++ /dev/null
@@ -1,41 +0,0 @@
-// Toggles
-//
-// Used in conjunction with global variables to enable certain theme features.
-
-// Utilities
-@import "mixins/breakpoints";
-@import "mixins/hover";
-@import "mixins/image";
-@import "mixins/badge";
-@import "mixins/resize";
-@import "mixins/screen-reader";
-@import "mixins/size";
-@import "mixins/reset-text";
-@import "mixins/text-emphasis";
-@import "mixins/text-hide";
-@import "mixins/text-truncate";
-@import "mixins/visibility";
-
-// // Components
-@import "mixins/alert";
-@import "mixins/buttons";
-@import "mixins/pagination";
-@import "mixins/lists";
-@import "mixins/list-group";
-@import "mixins/nav-divider";
-@import "mixins/forms";
-@import "mixins/table-row";
-
-// // Skins
-@import "mixins/background-variant";
-@import "mixins/border-radius";
-@import "mixins/box-shadow";
-@import "mixins/gradients";
-@import "mixins/transition";
-
-// // Layout
-@import "mixins/clearfix";
-// @import "mixins/navbar-align";
-@import "mixins/grid-framework";
-@import "mixins/grid";
-@import "mixins/float";
diff --git a/website/assets/vendor/bootstrap/scss/_modal.scss b/website/assets/vendor/bootstrap/scss/_modal.scss
deleted file mode 100755
index c0c406716..000000000
--- a/website/assets/vendor/bootstrap/scss/_modal.scss
+++ /dev/null
@@ -1,142 +0,0 @@
-// .modal-open      - body class for killing the scroll
-// .modal           - container to scroll within
-// .modal-dialog    - positioning shell for the actual modal
-// .modal-content   - actual modal w/ bg and corners and stuff
-
-
-// Kill the scroll on the body
-.modal-open {
-  overflow: hidden;
-}
-
-// Container that the modal scrolls within
-.modal {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: $zindex-modal;
-  display: none;
-  overflow: hidden;
-  // Prevent Chrome on Windows from adding a focus outline. For details, see
-  // https://github.com/twbs/bootstrap/pull/10951.
-  outline: 0;
-  // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a
-  // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342
-  // See also https://github.com/twbs/bootstrap/issues/17695
-
-  // When fading in the modal, animate it to slide down
-  &.fade .modal-dialog {
-    @include transition($modal-transition);
-    transform: translate(0, -25%);
-  }
-  &.show .modal-dialog { transform: translate(0, 0); }
-}
-.modal-open .modal {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-// Shell div to position the modal with bottom padding
-.modal-dialog {
-  position: relative;
-  width: auto;
-  margin: $modal-dialog-margin;
-}
-
-// Actual modal
-.modal-content {
-  position: relative;
-  display: flex;
-  flex-direction: column;
-  background-color: $modal-content-bg;
-  background-clip: padding-box;
-  border: $modal-content-border-width solid $modal-content-border-color;
-  @include border-radius($border-radius-lg);
-  @include box-shadow($modal-content-box-shadow-xs);
-  // Remove focus outline from opened modal
-  outline: 0;
-}
-
-// Modal background
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: $zindex-modal-backdrop;
-  background-color: $modal-backdrop-bg;
-
-  // Fade for backdrop
-  &.fade { opacity: 0; }
-  &.show { opacity: $modal-backdrop-opacity; }
-}
-
-// Modal header
-// Top section of the modal w/ title and dismiss
-.modal-header {
-  display: flex;
-  align-items: center; // vertically center it
-  justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
-  padding: $modal-header-padding;
-  border-bottom: $modal-header-border-width solid $modal-header-border-color;
-}
-
-// Title text within header
-.modal-title {
-  margin-bottom: 0;
-  line-height: $modal-title-line-height;
-}
-
-// Modal body
-// Where all modal content resides (sibling of .modal-header and .modal-footer)
-.modal-body {
-  position: relative;
-  // Enable `flex-grow: 1` so that the body take up as much space as possible
-  // when should there be a fixed height on `.modal-dialog`.
-  flex: 1 1 auto;
-  padding: $modal-inner-padding;
-}
-
-// Footer (for actions)
-.modal-footer {
-  display: flex;
-  align-items: center; // vertically center
-  justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
-  padding: $modal-inner-padding;
-  border-top: $modal-footer-border-width solid $modal-footer-border-color;
-
-  // Easily place margin between footer elements
-  > :not(:first-child) { margin-left: .25rem; }
-  > :not(:last-child) { margin-right: .25rem; }
-}
-
-// Measure scrollbar width for padding body during modal show/hide
-.modal-scrollbar-measure {
-  position: absolute;
-  top: -9999px;
-  width: 50px;
-  height: 50px;
-  overflow: scroll;
-}
-
-// Scale up the modal
-@include media-breakpoint-up(sm) {
-  // Automatically set modal's width for larger viewports
-  .modal-dialog {
-    max-width: $modal-md;
-    margin: $modal-dialog-margin-y-sm-up auto;
-  }
-
-  .modal-content {
-    @include box-shadow($modal-content-box-shadow-sm-up);
-  }
-
-  .modal-sm { max-width: $modal-sm; }
-}
-
-@include media-breakpoint-up(lg) {
-  .modal-lg { max-width: $modal-lg; }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_nav.scss b/website/assets/vendor/bootstrap/scss/_nav.scss
deleted file mode 100755
index ed5d76b0c..000000000
--- a/website/assets/vendor/bootstrap/scss/_nav.scss
+++ /dev/null
@@ -1,118 +0,0 @@
-// Base class
-//
-// Kickstart any navigation component with a set of style resets. Works with
-// `<nav>`s or `<ul>`s.
-
-.nav {
-  display: flex;
-  flex-wrap: wrap;
-  padding-left: 0;
-  margin-bottom: 0;
-  list-style: none;
-}
-
-.nav-link {
-  display: block;
-  padding: $nav-link-padding-y $nav-link-padding-x;
-
-  @include hover-focus {
-    text-decoration: none;
-  }
-
-  // Disabled state lightens text
-  &.disabled {
-    color: $nav-link-disabled-color;
-  }
-}
-
-//
-// Tabs
-//
-
-.nav-tabs {
-  border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
-
-  .nav-item {
-    margin-bottom: -$nav-tabs-border-width;
-  }
-
-  .nav-link {
-    border: $nav-tabs-border-width solid transparent;
-    @include border-top-radius($nav-tabs-border-radius);
-
-    @include hover-focus {
-      border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;
-    }
-
-    &.disabled {
-      color: $nav-link-disabled-color;
-      background-color: transparent;
-      border-color: transparent;
-    }
-  }
-
-  .nav-link.active,
-  .nav-item.show .nav-link {
-    color: $nav-tabs-link-active-color;
-    background-color: $nav-tabs-link-active-bg;
-    border-color: $nav-tabs-link-active-border-color $nav-tabs-link-active-border-color $nav-tabs-link-active-bg;
-  }
-
-  .dropdown-menu {
-    // Make dropdown border overlap tab border
-    margin-top: -$nav-tabs-border-width;
-    // Remove the top rounded corners here since there is a hard edge above the menu
-    @include border-top-radius(0);
-  }
-}
-
-
-//
-// Pills
-//
-
-.nav-pills {
-  .nav-link {
-    @include border-radius($nav-pills-border-radius);
-
-    &.active,
-    .show > & {
-      color: $nav-pills-link-active-color;
-      background-color: $nav-pills-link-active-bg;
-    }
-  }
-}
-
-
-//
-// Justified variants
-//
-
-.nav-fill {
-  .nav-item {
-    flex: 1 1 auto;
-    text-align: center;
-  }
-}
-
-.nav-justified {
-  .nav-item {
-    flex-basis: 0;
-    flex-grow: 1;
-    text-align: center;
-  }
-}
-
-
-// Tabbable tabs
-//
-// Hide tabbable panes to start, show them when `.active`
-
-.tab-content {
-  > .tab-pane {
-    display: none;
-  }
-  > .active {
-    display: block;
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_navbar.scss b/website/assets/vendor/bootstrap/scss/_navbar.scss
deleted file mode 100755
index ab238e56b..000000000
--- a/website/assets/vendor/bootstrap/scss/_navbar.scss
+++ /dev/null
@@ -1,287 +0,0 @@
-// Contents
-//
-// Navbar
-// Navbar brand
-// Navbar nav
-// Navbar text
-// Navbar divider
-// Responsive navbar
-// Navbar position
-// Navbar themes
-
-
-// Navbar
-//
-// Provide a static navbar from which we expand to create full-width, fixed, and
-// other navbar variations.
-
-.navbar {
-  position: relative;
-  display: flex;
-  flex-wrap: wrap; // allow us to do the line break for collapsing content
-  align-items: center;
-  justify-content: space-between; // space out brand from logo
-  padding: $navbar-padding-y $navbar-padding-x;
-
-  // Because flex properties aren't inherited, we need to redeclare these first
-  // few properities so that content nested within behave properly.
-  > .container,
-  > .container-fluid {
-    display: flex;
-    flex-wrap: wrap;
-    align-items: center;
-    justify-content: space-between;
-
-    @include media-breakpoint-down(nth(map-keys($grid-breakpoints), 1)) {
-      width: 100%; // prevent flex parent container from collapsing
-      margin-right: 0;
-      margin-left: 0;
-    }
-  }
-}
-
-
-// Navbar brand
-//
-// Used for brand, project, or site names.
-
-.navbar-brand {
-  display: inline-block;
-  padding-top: $navbar-brand-padding-y;
-  padding-bottom: $navbar-brand-padding-y;
-  margin-right: $navbar-padding-x;
-  font-size: $navbar-brand-font-size;
-  line-height: inherit;
-  white-space: nowrap;
-
-  @include hover-focus {
-    text-decoration: none;
-  }
-}
-
-
-// Navbar nav
-//
-// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).
-
-.navbar-nav {
-  display: flex;
-  flex-direction: column; // cannot use `inherit` to get the `.navbar`s value
-  padding-left: 0;
-  margin-bottom: 0;
-  list-style: none;
-
-  .nav-link {
-    padding-right: 0;
-    padding-left: 0;
-  }
-
-  .dropdown-menu {
-    position: static;
-    float: none;
-  }
-}
-
-
-// Navbar text
-//
-//
-
-.navbar-text {
-  display: inline-block;
-  padding-top: $nav-link-padding-y;
-  padding-bottom: $nav-link-padding-y;
-}
-
-
-// Responsive navbar
-//
-// Custom styles for responsive collapsing and toggling of navbar contents.
-// Powered by the collapse Bootstrap JavaScript plugin.
-
-// When collapsed, prevent the toggleable navbar contents from appearing in
-// the default flexbox row orienation. Requires the use of `flex-wrap: wrap`
-// on the `.navbar` parent.
-.navbar-collapse {
-  flex-basis: 100%;
-}
-
-// Button for toggling the navbar when in its collapsed state
-.navbar-toggler {
-  padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;
-  font-size: $navbar-toggler-font-size;
-  line-height: 1;
-  background: transparent; // remove default button style
-  border: $border-width solid transparent; // remove default button style
-  @include border-radius($navbar-toggler-border-radius);
-
-  @include hover-focus {
-    text-decoration: none;
-  }
-}
-
-// Keep as a separate element so folks can easily override it with another icon
-// or image file as needed.
-.navbar-toggler-icon {
-  display: inline-block;
-  width: 1.5em;
-  height: 1.5em;
-  vertical-align: middle;
-  content: "";
-  background: no-repeat center center;
-  background-size: 100% 100%;
-}
-
-// Generate series of `.navbar-expand-*` responsive classes for configuring
-// where your navbar collapses.
-.navbar-expand {
-  @each $breakpoint in map-keys($grid-breakpoints) {
-    $next: breakpoint-next($breakpoint, $grid-breakpoints);
-    $infix: breakpoint-infix($next, $grid-breakpoints);
-
-    &#{$infix} {
-      @include media-breakpoint-down($breakpoint) {
-        > .container,
-        > .container-fluid {
-          padding-right: 0;
-          padding-left: 0;
-        }
-      }
-
-      @include media-breakpoint-up($next) {
-        flex-direction: row;
-        flex-wrap: nowrap;
-        justify-content: flex-start;
-
-        .navbar-nav {
-          flex-direction: row;
-
-          .dropdown-menu {
-            position: absolute;
-          }
-
-          .dropdown-menu-right {
-            right: 0;
-            left: auto; // Reset the default from `.dropdown-menu`
-          }
-
-          .nav-link {
-            padding-right: .5rem;
-            padding-left: .5rem;
-          }
-        }
-
-        // For nesting containers, have to redeclare for alignment purposes
-        > .container,
-        > .container-fluid {
-          flex-wrap: nowrap;
-        }
-
-        // scss-lint:disable ImportantRule
-        .navbar-collapse {
-          display: flex !important;
-        }
-        // scss-lint:enable ImportantRule
-
-        .navbar-toggler {
-          display: none;
-        }
-      }
-    }
-  }
-}
-
-
-// Navbar themes
-//
-// Styles for switching between navbars with light or dark background.
-
-// Dark links against a light background
-.navbar-light {
-  .navbar-brand {
-    color: $navbar-light-active-color;
-
-    @include hover-focus {
-      color: $navbar-light-active-color;
-    }
-  }
-
-  .navbar-nav {
-    .nav-link {
-      color: $navbar-light-color;
-
-      @include hover-focus {
-        color: $navbar-light-hover-color;
-      }
-
-      &.disabled {
-        color: $navbar-light-disabled-color;
-      }
-    }
-
-    .show > .nav-link,
-    .active > .nav-link,
-    .nav-link.show,
-    .nav-link.active {
-      color: $navbar-light-active-color;
-    }
-  }
-
-  .navbar-toggler {
-    color: $navbar-light-color;
-    border-color: $navbar-light-toggler-border-color;
-  }
-
-  .navbar-toggler-icon {
-    background-image: $navbar-light-toggler-icon-bg;
-  }
-
-  .navbar-text {
-    color: $navbar-light-color;
-  }
-}
-
-// White links against a dark background
-.navbar-dark {
-  .navbar-brand {
-    color: $navbar-dark-active-color;
-
-    @include hover-focus {
-      color: $navbar-dark-active-color;
-    }
-  }
-
-  .navbar-nav {
-    .nav-link {
-      color: $navbar-dark-color;
-
-      @include hover-focus {
-        color: $navbar-dark-hover-color;
-      }
-
-      &.disabled {
-        color: $navbar-dark-disabled-color;
-      }
-    }
-
-    .show > .nav-link,
-    .active > .nav-link,
-    .nav-link.show,
-    .nav-link.active {
-      color: $navbar-dark-active-color;
-    }
-  }
-
-  .navbar-toggler {
-    color: $navbar-dark-color;
-    border-color: $navbar-dark-toggler-border-color;
-  }
-
-  .navbar-toggler-icon {
-    background-image: $navbar-dark-toggler-icon-bg;
-  }
-
-  .navbar-text {
-    color: $navbar-dark-color;
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_pagination.scss b/website/assets/vendor/bootstrap/scss/_pagination.scss
deleted file mode 100755
index a04929987..000000000
--- a/website/assets/vendor/bootstrap/scss/_pagination.scss
+++ /dev/null
@@ -1,66 +0,0 @@
-.pagination {
-  display: flex;
-  // 1-2: Disable browser default list styles
-  padding-left: 0; // 1
-  list-style: none; // 2
-  @include border-radius();
-}
-
-.page-item {
-  &:first-child {
-    .page-link {
-      margin-left: 0;
-      @include border-left-radius($border-radius);
-    }
-  }
-  &:last-child {
-    .page-link {
-      @include border-right-radius($border-radius);
-    }
-  }
-
-  &.active .page-link {
-    z-index: 2;
-    color: $pagination-active-color;
-    background-color: $pagination-active-bg;
-    border-color: $pagination-active-border-color;
-  }
-
-  &.disabled .page-link {
-    color: $pagination-disabled-color;
-    pointer-events: none;
-    background-color: $pagination-disabled-bg;
-    border-color: $pagination-disabled-border-color;
-  }
-}
-
-.page-link {
-  position: relative;
-  display: block;
-  padding: $pagination-padding-y $pagination-padding-x;
-  margin-left: -1px;
-  line-height: $pagination-line-height;
-  color: $pagination-color;
-  background-color: $pagination-bg;
-  border: $pagination-border-width solid $pagination-border-color;
-
-  @include hover-focus {
-    color: $pagination-hover-color;
-    text-decoration: none;
-    background-color: $pagination-hover-bg;
-    border-color: $pagination-hover-border-color;
-  }
-}
-
-
-//
-// Sizing
-//
-
-.pagination-lg {
-  @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg);
-}
-
-.pagination-sm {
-  @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm);
-}
diff --git a/website/assets/vendor/bootstrap/scss/_popover.scss b/website/assets/vendor/bootstrap/scss/_popover.scss
deleted file mode 100755
index 950d6ca39..000000000
--- a/website/assets/vendor/bootstrap/scss/_popover.scss
+++ /dev/null
@@ -1,195 +0,0 @@
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: $zindex-popover;
-  display: block;
-  max-width: $popover-max-width;
-  padding: $popover-inner-padding;
-  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
-  // So reset our font and text properties to avoid inheriting weird values.
-  @include reset-text();
-  font-size: $font-size-sm;
-  // Allow breaking very long words so they don't overflow the popover's bounds
-  word-wrap: break-word;
-  background-color: $popover-bg;
-  background-clip: padding-box;
-  border: $popover-border-width solid $popover-border-color;
-  @include border-radius($border-radius-lg);
-  @include box-shadow($popover-box-shadow);
-
-  // Arrows
-  //
-  // .arrow is outer, .arrow::after is inner
-
-  .arrow {
-    position: absolute;
-    display: block;
-    width: $popover-arrow-width;
-    height: $popover-arrow-height;
-  }
-
-  .arrow::before,
-  .arrow::after {
-    position: absolute;
-    display: block;
-    border-color: transparent;
-    border-style: solid;
-  }
-
-  .arrow::before {
-    content: "";
-    border-width: $popover-arrow-outer-width;
-  }
-  .arrow::after {
-    content: "";
-    border-width: $popover-arrow-outer-width;
-  }
-
-  // Popover directions
-
-  &.bs-popover-top {
-    margin-bottom: $popover-arrow-width;
-
-    .arrow {
-      bottom: 0;
-    }
-
-    .arrow::before,
-    .arrow::after {
-      border-bottom-width: 0;
-    }
-
-    .arrow::before {
-      bottom: -$popover-arrow-outer-width;
-      margin-left: -($popover-arrow-outer-width - 5);
-      border-top-color: $popover-arrow-outer-color;
-    }
-
-    .arrow::after {
-      bottom: -($popover-arrow-outer-width - 1);
-      margin-left: -($popover-arrow-outer-width - 5);
-      border-top-color: $popover-arrow-color;
-    }
-  }
-
-  &.bs-popover-right {
-    margin-left: $popover-arrow-width;
-
-    .arrow {
-      left: 0;
-    }
-
-    .arrow::before,
-    .arrow::after {
-      margin-top: -($popover-arrow-outer-width - 3);
-      border-left-width: 0;
-    }
-
-    .arrow::before {
-      left: -$popover-arrow-outer-width;
-      border-right-color: $popover-arrow-outer-color;
-    }
-
-    .arrow::after {
-      left: -($popover-arrow-outer-width - 1);
-      border-right-color: $popover-arrow-color;
-    }
-  }
-
-  &.bs-popover-bottom {
-    margin-top: $popover-arrow-width;
-
-    .arrow {
-      top: 0;
-    }
-
-    .arrow::before,
-    .arrow::after {
-      margin-left: -($popover-arrow-width - 3);
-      border-top-width: 0;
-    }
-
-    .arrow::before {
-      top: -$popover-arrow-outer-width;
-      border-bottom-color: $popover-arrow-outer-color;
-    }
-
-    .arrow::after {
-      top: -($popover-arrow-outer-width - 1);
-      border-bottom-color: $popover-arrow-color;
-    }
-
-    // This will remove the popover-header's border just below the arrow
-    .popover-header::before {
-      position: absolute;
-      top: 0;
-      left: 50%;
-      display: block;
-      width: 20px;
-      margin-left: -10px;
-      content: "";
-      border-bottom: 1px solid $popover-header-bg;
-    }
-  }
-
-  &.bs-popover-left {
-    margin-right: $popover-arrow-width;
-
-    .arrow {
-      right: 0;
-    }
-
-    .arrow::before,
-    .arrow::after {
-      margin-top: -($popover-arrow-outer-width - 3);
-      border-right-width: 0;
-    }
-
-    .arrow::before {
-      right: -$popover-arrow-outer-width;
-      border-left-color: $popover-arrow-outer-color;
-    }
-
-    .arrow::after {
-      right: -($popover-arrow-outer-width - 1);
-      border-left-color: $popover-arrow-color;
-    }
-  }
-  &.bs-popover-auto {
-    &[x-placement^="top"] {
-      @extend .bs-popover-top;
-    }
-    &[x-placement^="right"] {
-      @extend .bs-popover-right;
-    }
-    &[x-placement^="bottom"] {
-      @extend .bs-popover-bottom;
-    }
-    &[x-placement^="left"] {
-      @extend .bs-popover-left;
-    }
-  }
-}
-
-
-// Offset the popover to account for the popover arrow
-.popover-header {
-  padding: $popover-header-padding-y $popover-header-padding-x;
-  margin-bottom: 0; // Reset the default from Reboot
-  font-size: $font-size-base;
-  color: $popover-header-color;
-  background-color: $popover-header-bg;
-  border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);
-  $offset-border-width: calc(#{$border-radius-lg} - #{$popover-border-width});
-  @include border-top-radius($offset-border-width);
-
-  &:empty {
-    display: none;
-  }
-}
-
-.popover-body {
-  padding: $popover-body-padding-y $popover-body-padding-x;
-  color: $popover-body-color;
-}
diff --git a/website/assets/vendor/bootstrap/scss/_print.scss b/website/assets/vendor/bootstrap/scss/_print.scss
deleted file mode 100755
index e20219a38..000000000
--- a/website/assets/vendor/bootstrap/scss/_print.scss
+++ /dev/null
@@ -1,119 +0,0 @@
-// scss-lint:disable QualifyingElement
-
-// Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css
-
-// ==========================================================================
-// Print styles.
-// Inlined to avoid the additional HTTP request:
-// http://www.phpied.com/delay-loading-your-print-css/
-// ==========================================================================
-
-@if $enable-print-styles {
-  @media print {
-    *,
-    *::before,
-    *::after,
-    p::first-letter,
-    div::first-letter,
-    blockquote::first-letter,
-    li::first-letter,
-    p::first-line,
-    div::first-line,
-    blockquote::first-line,
-    li::first-line {
-      // Bootstrap specific; comment out `color` and `background`
-      //color: #000 !important; // Black prints faster:
-                                //   http://www.sanbeiji.com/archives/953
-      text-shadow: none !important;
-      //background: transparent !important;
-      box-shadow: none !important;
-    }
-
-    a,
-    a:visited {
-      text-decoration: underline;
-    }
-
-    // Bootstrap specific; comment the following selector out
-    //a[href]::after {
-    //  content: " (" attr(href) ")";
-    //}
-
-    abbr[title]::after {
-      content: " (" attr(title) ")";
-    }
-
-    // Bootstrap specific; comment the following selector out
-    //
-    // Don't show links that are fragment identifiers,
-    // or use the `javascript:` pseudo protocol
-    //
-
-    //a[href^="#"]::after,
-    //a[href^="javascript:"]::after {
-    // content: "";
-    //}
-
-    pre {
-      white-space: pre-wrap !important;
-    }
-    pre,
-    blockquote {
-      border: $border-width solid #999;   // Bootstrap custom code; using `$border-width` instead of 1px
-      page-break-inside: avoid;
-    }
-
-    //
-    // Printing Tables:
-    // http://css-discuss.incutio.com/wiki/Printing_Tables
-    //
-
-    thead {
-      display: table-header-group;
-    }
-
-    tr,
-    img {
-      page-break-inside: avoid;
-    }
-
-    p,
-    h2,
-    h3 {
-      orphans: 3;
-      widows: 3;
-    }
-
-    h2,
-    h3 {
-      page-break-after: avoid;
-    }
-
-    // Bootstrap specific changes start
-
-    // Bootstrap components
-    .navbar {
-      display: none;
-    }
-    .badge {
-      border: $border-width solid #000;
-    }
-
-    .table {
-      border-collapse: collapse !important;
-
-      td,
-      th {
-        background-color: #fff !important;
-      }
-    }
-    .table-bordered {
-      th,
-      td {
-        border: 1px solid #ddd !important;
-      }
-    }
-
-    // Bootstrap specific changes end
-  }
-}
diff --git a/website/assets/vendor/bootstrap/scss/_progress.scss b/website/assets/vendor/bootstrap/scss/_progress.scss
deleted file mode 100755
index f7491a64b..000000000
--- a/website/assets/vendor/bootstrap/scss/_progress.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-@keyframes progress-bar-stripes {
-  from { background-position: $progress-height 0; }
-  to { background-position: 0 0; }
-}
-
-.progress {
-  display: flex;
-  overflow: hidden; // force rounded corners by cropping it
-  font-size: $progress-font-size;
-  line-height: $progress-height;
-  text-align: center;
-  background-color: $progress-bg;
-  @include border-radius($progress-border-radius);
-  @include box-shadow($progress-box-shadow);
-}
-
-.progress-bar {
-  height: $progress-height;
-  line-height: $progress-height;
-  color: $progress-bar-color;
-  background-color: $progress-bar-bg;
-  @include transition($progress-bar-transition);
-}
-
-.progress-bar-striped {
-  @include gradient-striped();
-  background-size: $progress-height $progress-height;
-}
-
-.progress-bar-animated {
-  animation: progress-bar-stripes $progress-bar-animation-timing;
-}
diff --git a/website/assets/vendor/bootstrap/scss/_reboot.scss b/website/assets/vendor/bootstrap/scss/_reboot.scss
deleted file mode 100755
index 33fc2d660..000000000
--- a/website/assets/vendor/bootstrap/scss/_reboot.scss
+++ /dev/null
@@ -1,481 +0,0 @@
-// scss-lint:disable QualifyingElement, DuplicateProperty, VendorPrefix
-
-// Reboot
-//
-// Normalization of HTML elements, manually forked from Normalize.css to remove
-// styles targeting irrelevant browsers while applying new styles.
-//
-// Normalize is licensed MIT. https://github.com/necolas/normalize.css
-
-
-// Document
-//
-// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.
-// 2. Change the default font family in all browsers.
-// 3. Correct the line height in all browsers.
-// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.
-// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so
-//    we force a non-overlapping, non-auto-hiding scrollbar to counteract.
-// 6. Change the default tap highlight to be completely transparent in iOS.
-
-html {
-  box-sizing: border-box; // 1
-  font-family: sans-serif; // 2
-  line-height: 1.15; // 3
-  -webkit-text-size-adjust: 100%; // 4
-  -ms-text-size-adjust: 100%; // 4
-  -ms-overflow-style: scrollbar; // 5
-  -webkit-tap-highlight-color: rgba(0,0,0,0); // 6
-}
-
-*,
-*::before,
-*::after {
-  box-sizing: inherit; // 1
-}
-
-// IE10+ doesn't honor `<meta name="viewport">` in some cases.
-@at-root {
-  @-ms-viewport { width: device-width; }
-}
-
-// Shim for "new" HTML5 structural elements to display correctly (IE10, older browsers)
-article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
-  display: block;
-}
-
-// Body
-//
-// 1. Remove the margin in all browsers.
-// 2. As a best practice, apply a default `background-color`.
-
-body {
-  margin: 0; // 1
-  font-family: $font-family-base;
-  font-size: $font-size-base;
-  font-weight: $font-weight-base;
-  line-height: $line-height-base;
-  color: $body-color;
-  background-color: $body-bg; // 2
-}
-
-// Suppress the focus outline on elements that cannot be accessed via keyboard.
-// This prevents an unwanted focus outline from appearing around elements that
-// might still respond to pointer events.
-//
-// Credit: https://github.com/suitcss/base
-[tabindex="-1"]:focus {
-  outline: none !important;
-}
-
-
-// Content grouping
-//
-// 1. Add the correct box sizing in Firefox.
-// 2. Show the overflow in Edge and IE.
-
-hr {
-  box-sizing: content-box; // 1
-  height: 0; // 1
-  overflow: visible; // 2
-}
-
-
-//
-// Typography
-//
-
-// Remove top margins from headings
-//
-// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top
-// margin for easier control within type scales as it avoids margin collapsing.
-h1, h2, h3, h4, h5, h6 {
-  margin-top: 0;
-  margin-bottom: .5rem;
-}
-
-// Reset margins on paragraphs
-//
-// Similarly, the top margin on `<p>`s get reset. However, we also reset the
-// bottom margin to use `rem` units instead of `em`.
-p {
-  margin-top: 0;
-  margin-bottom: 1rem;
-}
-
-// Abbreviations
-//
-// 1. Remove the bottom border in Firefox 39-.
-// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
-// 3. Add explicit cursor to indicate changed behavior.
-// 4. Duplicate behavior to the data-* attribute for our tooltip plugin
-
-abbr[title],
-abbr[data-original-title] { // 4
-  text-decoration: underline; // 2
-  text-decoration: underline dotted; // 2
-  cursor: help; // 3
-  border-bottom: 0; // 1
-}
-
-address {
-  margin-bottom: 1rem;
-  font-style: normal;
-  line-height: inherit;
-}
-
-ol,
-ul,
-dl {
-  margin-top: 0;
... 35059 lines suppressed ...