diff --git a/.github/workflows/test-deploy.yml b/.github/workflows/test-deploy.yml index fbd81a84872..2ba095f9d19 100644 --- a/.github/workflows/test-deploy.yml +++ b/.github/workflows/test-deploy.yml @@ -6,6 +6,7 @@ on: jobs: build: name: Build Docusaurus + if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 diff --git a/website/README.md b/website/README.md index a35607dad0d..36123b188ed 100644 --- a/website/README.md +++ b/website/README.md @@ -1,6 +1,11 @@ -# Website docusaurus v2 +# Verdaccio Website -This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. +The official Verdaccio documentation website, built with [Docusaurus 2](https://docusaurus.io/) — a modern static website generator. + +## Requirements + +- [Node.js](https://nodejs.org/) v18+ +- [pnpm](https://pnpm.io/) ## Installation @@ -14,7 +19,7 @@ pnpm install pnpm start ``` -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. +Starts a local development server and opens a browser window. Most changes are reflected live without restarting the server. ## Build @@ -22,4 +27,39 @@ This command starts a local development server and opens up a browser window. Mo pnpm build ``` -This command generates static content into the `build` directory and can be served using any static contents hosting service. +Generates static content into the `build` directory, which can be served by any static hosting service. + +## Translations + +This site supports multiple languages via [Crowdin](https://crowdin.com/project/verdaccio). To contribute a translation, click **Help Us Translate** in the language switcher on the site, or visit the Crowdin project directly. + +### Language filtering + +Not all languages appear in the site navigation. A locale is included only when its **translation progress exceeds the minimum threshold** (currently `80%`). Languages that fall below this threshold are excluded at build time, and a warning is printed to the console: + +``` +[i18n] Locale "de" excluded — progress 72% is below threshold 80% +``` + +Locales with no matching entry in the translations data are also excluded: + +``` +[i18n] Locale "xx" excluded — not found in translations data +``` + +The active locales for the current build are logged on startup: + +``` +[i18n] Active locales: [ 'en', 'de-DE', 'fr-FR', ... ] +``` + +### Adding or updating a locale + +1. Open `docusaurus.config.js` and add the locale code to the `filterByProgress` call. +2. Add a corresponding entry in `LOCALE_TO_CROWDIN` if the Crowdin key differs from the Docusaurus locale code (e.g. `'de-DE' → 'de'`). +3. Add a `localeConfigs` entry using the `localeLabel` helper so the language switcher shows the current progress percentage. +4. Translate the content on [Crowdin](https://crowdin.com/project/verdaccio) until the locale clears the threshold. + +## Contributing + +See [CONTRIBUTING.md](./CONTRIBUTING.md) for general contribution guidelines. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index bfe6c1f46c1..b11bea66b34 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -1,9 +1,46 @@ // @ts-check const { translationsData } = require('@verdaccio/local-scripts'); -const translations = translationsData; +const { themes } = require('prism-react-renderer'); + +// ── External URLs & credentials ─────────────────────────────────────────────── + +const GITHUB = { + REPO: 'https://github.com/verdaccio/verdaccio', + EDIT_DOCS: 'https://github.com/verdaccio/website/edit/master/website/docs', + EDIT_BLOG: 'https://github.com/verdaccio/verdaccio/edit/master/website', + BUTTONS: 'https://buttons.github.io/buttons.js', +}; + +const CROWDIN = { + PROJECT: 'https://crowdin.com/project/verdaccio', +}; -const lgnMapping = { +const SOCIAL = { + DISCORD: 'https://discord.gg/7qWJxBf', + BLUESKY: 'https://bsky.app/profile/verdaccio.org', + STACK_OVERFLOW: 'https://stackoverflow.com/questions/tagged/verdaccio', + OPEN_COLLECTIVE: 'https://opencollective.com/verdaccio', +}; + +const DONATE = { + UKRAINE: 'https://u24.gov.ua', +}; + +const ANALYTICS = { + GA_TRACKING_ID: 'G-PCYM9FYJZT', +}; + +const ALGOLIA = { + APP_ID: 'B3TG5CBF5H', + API_KEY: 'ed054733cb03418e9af25b7beb82c924', + INDEX_NAME: 'verdaccio', +}; + +// ── i18n ────────────────────────────────────────────────────────────────────── + +/** @type {Record} Maps Docusaurus locale codes to Crowdin language codes */ +const LOCALE_TO_CROWDIN = { 'de-DE': 'de', 'pl-PL': 'pl', 'cs-CZ': 'cs', @@ -15,32 +52,31 @@ const lgnMapping = { 'yo-NG': 'yo', }; -// @ts-ignore -const progress = translations; -const limitLngIncluded = 180; -console.log('limit translation is on %s%', limitLngIncluded); +const MIN_TRANSLATION_PROGRESS = 80; -const { themes } = require('prism-react-renderer'); -const lightTheme = themes.github; -const darkTheme = themes.dracula; +/** + * Filters locales by translation progress threshold. + * English is always included regardless of progress. + * + * @param {string[]} locales + * @returns {string[]} + */ +const filterByProgress = (locales) => { + return locales.filter((locale) => { + if (locale === 'en') return true; -const filterByProgress = (items) => { - const originLng = Object.keys(translations); - return items.filter((lgn) => { - if (lgn === 'en') { - return true; - } - const _lgn = lgnMapping[lgn] ? lgnMapping[lgn] : lgn; - if (!originLng.includes(_lgn)) { - console.log(`language ${_lgn} excluded, does not exist in origin`); + const crowdinKey = LOCALE_TO_CROWDIN[locale] ?? locale; + const localeData = translationsData[crowdinKey]; + + if (!localeData) { + console.warn(`[i18n] Locale "${crowdinKey}" excluded — not found in translations data`); return false; } - if (translations[_lgn].translationProgress <= limitLngIncluded) { - console.log( - 'language %s is being excluded due does not met limit of translation, current: %s%', - _lgn, - translations[_lgn].approvalProgress + const { translationProgress } = localeData; + if (translationProgress <= MIN_TRANSLATION_PROGRESS) { + console.warn( + `[i18n] Locale "${crowdinKey}" excluded — progress ${translationProgress}% is below threshold ${MIN_TRANSLATION_PROGRESS}%` ); return false; } @@ -49,6 +85,12 @@ const filterByProgress = (items) => { }); }; +/** @param {string} crowdinKey @returns {number} */ +const progress = (crowdinKey) => translationsData[crowdinKey]?.translationProgress ?? 0; + +/** @param {string} label @param {string} crowdinKey @returns {string} */ +const localeLabel = (label, crowdinKey) => `${label} (${progress(crowdinKey)}%)`; + const locales = filterByProgress([ 'en', 'cs-CZ', @@ -67,285 +109,189 @@ const locales = filterByProgress([ 'zh-CN', ]); -console.log('locales', locales); +console.log('[i18n] Active locales:', locales); -const i18nConfig = { - defaultLocale: 'en', - locales, - localeConfigs: { - en: { label: 'English' }, - 'it-IT': { label: `Italiano (${progress['it'].translationProgress}%)` }, - 'es-ES': { label: `Español (${progress['es-ES'].translationProgress}%)` }, - 'de-DE': { label: `Deutsch (${progress['de'].translationProgress}%)` }, - // 'ga-IE': { label: `Gaeilge (Éire) (${progress['ga-IE'].translationProgress}%)` }, - 'cs-CZ': { label: `Čeština (Česko) (${progress['cs'].translationProgress}%)` }, - 'fr-FR': { label: `Français (${progress['fr'].translationProgress}%)` }, - 'pl-PL': { label: `Polski (Polska) (${progress['pl'].translationProgress}%)` }, - 'pt-BR': { label: `Português (Brasil) (${progress['pt-BR'].translationProgress}%)` }, - 'ru-RU': { label: `Русский (Россия) (${progress['ru'].translationProgress}%)` }, - 'zh-CN': { label: `中文(中国)(${progress['zh-CN'].translationProgress}%)` }, - 'zh-TW': { label: `中文(台灣)(${progress['zh-TW'].translationProgress}%)` }, - 'yo-NG': { label: `Èdè Yorùbá (Nàìjíríà) (${progress['yo'].translationProgress}%)` }, - 'sr-CS': { label: `Српски (Србија) (${progress['sr-CS'].translationProgress}%)` }, - 'vi-VN': { label: `Tiếng Việt (Việt Nam) (${progress['vi'].translationProgress}%)` }, - }, -}; +// ── Config ──────────────────────────────────────────────────────────────────── +/** @type {import('@docusaurus/types').Config} */ module.exports = { title: 'Verdaccio', tagline: 'A lightweight Node.js private proxy registry', - // organizationName: 'verdaccio', - // projectName: 'verdaccio.github.io', - // url: 'https://verdaccio.github.io/', - // trailingSlash: false, - // baseUrl: '/website', organizationName: 'verdaccio', projectName: 'verdaccio', url: 'https://verdaccio.org', baseUrl: '/', onBrokenLinks: 'throw', + // FUTURE: migrate into markdown section on migrate 4.0 onBrokenMarkdownLinks: 'warn', onBrokenAnchors: 'warn', favicon: 'img/logo/uk/verdaccio-tiny-uk-no-bg.svg', - i18n: i18nConfig, - scripts: ['https://buttons.github.io/buttons.js'], - plugins: [ - 'docusaurus-plugin-sass', - 'docusaurus-plugin-contributors', - 'docusaurus-plugin-downloads', - [ - 'content-docs', - { - id: 'community', - path: 'community', - routeBasePath: 'community', - sidebarPath: require.resolve('./sidebarsCommunity.js'), - showLastUpdateTime: true, - }, - ], - [ - 'content-docs', - { - id: 'dev', - path: 'dev', - routeBasePath: 'dev', - sidebarPath: require.resolve('./sidebarsDev.js'), - showLastUpdateTime: true, - }, - ], - [ - 'content-docs', - { - id: 'talks', - path: 'talks', - routeBasePath: 'talks', - sidebarPath: require.resolve('./sidebarsTalk.js'), - showLastUpdateTime: true, - }, - ], - ], + scripts: [GITHUB.BUTTONS], + + i18n: { + defaultLocale: 'en', + locales, + localeConfigs: { + en: { label: 'English' }, + 'it-IT': { label: localeLabel('Italiano', 'it') }, + 'es-ES': { label: localeLabel('Español', 'es-ES') }, + 'de-DE': { label: localeLabel('Deutsch', 'de') }, + 'cs-CZ': { label: localeLabel('Čeština (Česko)', 'cs') }, + 'fr-FR': { label: localeLabel('Français', 'fr') }, + 'pl-PL': { label: localeLabel('Polski (Polska)', 'pl') }, + 'pt-BR': { label: localeLabel('Português (Brasil)', 'pt-BR') }, + 'ru-RU': { label: localeLabel('Русский (Россия)', 'ru') }, + 'zh-CN': { label: localeLabel('中文(中国)', 'zh-CN') }, + 'zh-TW': { label: localeLabel('中文(台灣)', 'zh-TW') }, + 'yo-NG': { label: localeLabel('Èdè Yorùbá (Nàìjíríà)', 'yo') }, + 'sr-CS': { label: localeLabel('Српски (Србија)', 'sr-CS') }, + 'vi-VN': { label: localeLabel('Tiếng Việt (Việt Nam)', 'vi') }, + }, + }, + markdown: { mermaid: true, }, + themes: ['@docusaurus/theme-mermaid'], + customFields: { description: 'A lightweight Node.js private proxy registry', }, - themeConfig: { - mermaid: { - theme: { light: 'neutral', dark: 'forest' }, - }, - announcementBar: { - id: 'announcementBar', - content: - 'OFFICIAL FUNDRAISING PLATFORM OF UKRAINE!', - isCloseable: false, - backgroundColor: '#1595de', - textColor: '#ffffff', - }, - algolia: { - appId: 'B3TG5CBF5H', - apiKey: 'ed054733cb03418e9af25b7beb82c924', - indexName: 'verdaccio', - contextualSearch: true, - }, - docs: { - sidebar: { - hideable: true, - autoCollapseCategories: true, + + plugins: [ + 'docusaurus-plugin-sass', + 'docusaurus-plugin-contributors', + 'docusaurus-plugin-downloads', + ['content-docs', { id: 'community', path: 'community', routeBasePath: 'community', sidebarPath: require.resolve('./sidebarsCommunity.js'), showLastUpdateTime: true }], + ['content-docs', { id: 'dev', path: 'dev', routeBasePath: 'dev', sidebarPath: require.resolve('./sidebarsDev.js'), showLastUpdateTime: true }], + ['content-docs', { id: 'talks', path: 'talks', routeBasePath: 'talks', sidebarPath: require.resolve('./sidebarsTalk.js'), showLastUpdateTime: true }], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + mermaid: { + theme: { light: 'neutral', dark: 'forest' }, }, - }, - navbar: { - title: `Verdaccio`, - logo: { - alt: 'Verdaccio Logo', - src: 'img/logo/uk/verdaccio-tiny-uk-no-bg.svg', + announcementBar: { + id: 'announcementBar', + content: `OFFICIAL FUNDRAISING PLATFORM OF UKRAINE!`, + isCloseable: false, + backgroundColor: '#1595de', + textColor: '#ffffff', }, - items: [ - { - type: 'doc', - docId: 'what-is-verdaccio', - position: 'left', - label: 'Docs', - }, - { - type: 'doc', - docId: 'node-api', - position: 'left', - label: 'API', - }, - { to: '/blog', label: 'Blog', position: 'left' }, - { - href: 'https://opencollective.com/verdaccio', - label: 'Sponsor Us', - position: 'right', - }, - { - href: '/community', - label: 'Community', - position: 'left', - }, - { - href: '/talks', - label: 'Video Talks', - position: 'left', - }, - { - type: 'localeDropdown', - position: 'right', - dropdownItemsAfter: [ - { - href: 'https://crowdin.com/project/verdaccio', - label: 'Help Us Translate', - }, - ], - }, - { - href: 'https://github.com/verdaccio/verdaccio', - position: 'right', - className: 'header-github-link', - 'aria-label': 'GitHub Repository', - }, - { - href: 'https://bsky.app/profile/verdaccio.org', - position: 'right', - className: 'header-bluesky-link', - 'aria-label': 'Follow Us on Bluesky', - }, - ], - }, - footer: { - style: 'dark', - links: [ - { - title: 'Docs', - items: [ - { - label: 'Getting Started', - to: '/docs/what-is-verdaccio', - }, - { - label: 'Docker', - to: '/docs/docker', - }, - { - label: 'Configuration', - to: '/docs/configuration', - }, - { - label: 'Logos', - to: '/docs/logo', - }, - ], - }, - { - title: 'Community', - items: [ - { - label: 'Stack Overflow', - href: 'https://stackoverflow.com/questions/tagged/verdaccio', - }, - { - label: 'Discord', - href: 'https://discord.gg/7qWJxBf', - }, - { - label: 'Bluesky', - href: 'https://bsky.app/profile/verdaccio.org', - }, - ], + algolia: { + appId: ALGOLIA.APP_ID, + apiKey: ALGOLIA.API_KEY, + indexName: ALGOLIA.INDEX_NAME, + contextualSearch: true, + }, + docs: { + sidebar: { + hideable: true, + autoCollapseCategories: true, }, - { - title: 'More', - items: [ - { - label: 'Blog', - to: '/blog', - }, - { - label: 'GitHub', - href: 'https://github.com/verdaccio/verdaccio', - }, - ], + }, + navbar: { + title: 'Verdaccio', + logo: { + alt: 'Verdaccio Logo', + src: 'img/logo/uk/verdaccio-tiny-uk-no-bg.svg', }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Verdaccio Community. Built with Docusaurus.`, - }, - colorMode: { - defaultMode: 'light', - disableSwitch: false, - respectPrefersColorScheme: true, - }, - prism: { - theme: lightTheme, - darkTheme: darkTheme, - }, - }, + items: [ + { type: 'doc', docId: 'what-is-verdaccio', position: 'left', label: 'Docs' }, + { type: 'doc', docId: 'node-api', position: 'left', label: 'API' }, + { to: '/blog', position: 'left', label: 'Blog' }, + { href: '/community', position: 'left', label: 'Community' }, + { href: '/talks', position: 'left', label: 'Video Talks' }, + { href: SOCIAL.OPEN_COLLECTIVE, position: 'right', label: 'Sponsor Us' }, + { + type: 'localeDropdown', + position: 'right', + dropdownItemsAfter: [{ href: CROWDIN.PROJECT, label: 'Help Us Translate' }], + }, + { href: GITHUB.REPO, position: 'right', className: 'header-github-link', 'aria-label': 'GitHub Repository' }, + { href: SOCIAL.BLUESKY, position: 'right', className: 'header-bluesky-link', 'aria-label': 'Follow Us on Bluesky' }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { label: 'Getting Started', to: '/docs/what-is-verdaccio' }, + { label: 'Docker', to: '/docs/docker' }, + { label: 'Configuration', to: '/docs/configuration' }, + { label: 'Logos', to: '/docs/logo' }, + ], + }, + { + title: 'Community', + items: [ + { label: 'Stack Overflow', href: SOCIAL.STACK_OVERFLOW }, + { label: 'Discord', href: SOCIAL.DISCORD }, + { label: 'Bluesky', href: SOCIAL.BLUESKY }, + ], + }, + { + title: 'More', + items: [ + { label: 'Blog', to: '/blog' }, + { label: 'GitHub', href: GITHUB.REPO }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Verdaccio Community. Built with Docusaurus.`, + }, + colorMode: { + defaultMode: 'light', + disableSwitch: false, + respectPrefersColorScheme: true, + }, + prism: { + theme: themes.github, + darkTheme: themes.dracula, + }, + }), + presets: [ [ '@docusaurus/preset-classic', - { + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ docs: { sidebarPath: require.resolve('./sidebars.js'), showLastUpdateAuthor: true, showLastUpdateTime: true, sidebarCollapsible: true, remarkPlugins: [[require('@docusaurus/remark-plugin-npm2yarn'), { sync: true }]], - editUrl: ({ locale, docPath }) => { - if (locale !== 'en') { - return `https://crowdin.com/project/verdaccio/${locale}`; - } - return `https://github.com/verdaccio/website/edit/master/website/docs/${docPath}`; - }, - }, - googleAnalytics: { - trackingID: 'G-PCYM9FYJZT', - }, - gtag: { - trackingID: 'G-PCYM9FYJZT', + editUrl: ({ locale, docPath }) => + locale !== 'en' + ? `${CROWDIN.PROJECT}/${locale}` + : `${GITHUB.EDIT_DOCS}/${docPath}`, }, + googleAnalytics: { trackingID: ANALYTICS.GA_TRACKING_ID }, + gtag: { trackingID: ANALYTICS.GA_TRACKING_ID }, blog: { blogTitle: 'Verdaccio Official Blog', blogDescription: 'The official Verdaccio Node.js proxy registry blog', showReadingTime: true, postsPerPage: 3, - feedOptions: { - type: 'all', - }, + feedOptions: { type: 'all' }, blogSidebarCount: 'ALL', blogSidebarTitle: 'All our posts', authorsMapPath: 'authors.yml', - editUrl: ({ locale, blogDirPath, blogPath }) => { - if (locale !== 'en') { - return `https://crowdin.com/project/verdaccio/${locale}`; - } - return `https://github.com/verdaccio/verdaccio/edit/master/website/${blogDirPath}/${blogPath}`; - }, + editUrl: ({ locale, blogDirPath, blogPath }) => + locale !== 'en' + ? `${CROWDIN.PROJECT}/${locale}` + : `${GITHUB.EDIT_BLOG}/${blogDirPath}/${blogPath}`, }, theme: { customCss: require.resolve('./src/css/custom.scss'), }, - }, + }), ], ], }; diff --git a/website/src/components/Testimonials.module.scss b/website/src/components/Testimonials.module.scss deleted file mode 100644 index 510bfb54699..00000000000 --- a/website/src/components/Testimonials.module.scss +++ /dev/null @@ -1,4 +0,0 @@ -.testimonials { - margin: 0 auto; - text-align: center; -} diff --git a/website/src/components/Testimonials.tsx b/website/src/components/Testimonials.tsx deleted file mode 100644 index a5d2b084d1a..00000000000 --- a/website/src/components/Testimonials.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import Translate from '@docusaurus/Translate'; -import React from 'react'; - -import styles from './Testimonials.module.scss'; -import TwitterCarrousel from './TwitterCarrousel'; - -const Testimonials = (): React.ReactElement => ( -
-

- Verdaccio, - }} - > - {"Here's what people have to say about {italicVerdaccio}"} - -

-
- -
-

- - Many greats developers and companies are enjoying Verdaccio, join the community! - -

-
-); - -export default Testimonials; diff --git a/website/src/components/TwitterCarrousel.module.scss b/website/src/components/TwitterCarrousel.module.scss deleted file mode 100644 index ce192efdaee..00000000000 --- a/website/src/components/TwitterCarrousel.module.scss +++ /dev/null @@ -1,69 +0,0 @@ -.twitterCarrousel { - display: inline-flex; - gap: 3rem; - opacity: 1; - justify-content: center; - align-items: center; -} - -.circleWrap { - display: flex; - justify-content: center; - align-items: center; - margin: 2rem; -} - -.circle { - width: 15px; - height: 15px; - border-radius: 50%; - cursor: pointer; - overflow: hidden; - margin-right: 1rem; - padding: 0; - border: solid 2px var(--twitter-color); - - &--selected { - background-color: var(--twitter-color); - animation: bounce 1s; - } -} - -@keyframes bounce { - 0%, - 20%, - 50%, - 80%, - 100% { - transform: translateY(0); - } - 40% { - transform: translateY(-15px); - } - 60% { - transform: translateY(-5px); - } -} - -@media only screen and (max-width: 950px) { - .twitterCarrousel { - overflow-x: auto; - max-width: 100%; - gap: 2rem; - opacity: 1; - justify-content: flex-start; - width: 90%; - align-items: center; - margin-left: 2rem; - } -} - -@media only screen and (max-width: 600px) { - .twitterCarrousel { - display: grid; - grid-template-columns: 1fr; - align-items: center; - justify-content: center; - margin: 0 auto; - } -} diff --git a/website/src/components/TwitterCarrousel.tsx b/website/src/components/TwitterCarrousel.tsx deleted file mode 100644 index d57a83ee7a1..00000000000 --- a/website/src/components/TwitterCarrousel.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { translate } from '@docusaurus/Translate'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import clsx from 'clsx'; -import React, { useCallback, useRef, useState } from 'react'; -import { Tweet } from 'react-twitter-widgets'; - -import Spinner from './Spinner'; -import styles from './TwitterCarrousel.module.scss'; -import useClampedIsInViewport from './hooks/useClampedIsInViewport'; - -const Carrousel = ({ data }: { data: string[][] }): React.ReactElement => { - const { i18n } = useDocusaurusContext(); - const [page, setPage] = useState(0); - const [loading, setLoading] = useState(true); - const ref = useRef<{ maxPage: number; minPage: number }>({ - maxPage: data.length - 1, - minPage: 0, - }); - const [isIn, targetRef] = useClampedIsInViewport({ threshold: 50 }); - - const onClickCircle = useCallback( - (pageToGo: number) => { - if (page === pageToGo) return; - setPage(pageToGo); - setLoading(true); - }, - [page] - ); - - return ( -
- {loading && } - {isIn && ( -
- {data[page].map((tweetId) => ( - setLoading(false)} - key={tweetId} - tweetId={tweetId} - /> - ))} -
- )} -
- {[...Array(ref.current.maxPage + 1).keys()].map((it) => ( -
-
- ); -}; - -export default Carrousel; diff --git a/website/src/components/UsedBy.tsx b/website/src/components/UsedBy.tsx index 809bcd986ce..6f51d5cad74 100644 --- a/website/src/components/UsedBy.tsx +++ b/website/src/components/UsedBy.tsx @@ -31,22 +31,7 @@ const UsedBy = (): React.ReactElement => ( name: 'algolia', image: useBaseUrl('/img/sponsors/algolia.svg'), url: 'https://www.algolia.com', - }, - { - name: 'SheetJs', - image: useBaseUrl('/img/sponsors/sheetjs.png'), - url: 'https://sheetjs.com/', - }, - { - name: 'GatsbyJs', - image: useBaseUrl('/img/sponsors/gatsbysvg.svg'), - url: 'https://www.gatsbyjs.com/', - }, - { - name: 'pintura', - image: useBaseUrl('/img/sponsors/pqina.svg'), - url: 'https://pqina.nl/pintura/', - }, + }, ].map((sponsor) => ( ( image: useBaseUrl('/img/users/aurelia.svg'), url: 'https://aurelia.io/', }, + { + name: 'SheetJs', + image: useBaseUrl('/img/sponsors/sheetjs.png'), + url: 'https://sheetjs.com/', + }, { name: 'Storybook', image: useBaseUrl('/img/users/storybook.svg'), diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index a582eb8265a..2df4e2993fe 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -5,7 +5,6 @@ import React from 'react'; import Feature from '../components/Features'; import Header from '../components/Header'; import PackageManagers from '../components/PackageManagers'; -import Testimonial from '../components/Testimonials'; import UsedBy from '../components/UsedBy'; import Wave from '../components/Wave'; import WhatIsVerdaccio from '../components/WhatIsVerdaccio'; @@ -24,7 +23,6 @@ const Home = (): React.ReactElement => { - ); diff --git a/website/static/img/users/gatsby.svg b/website/static/img/users/gatsby.svg deleted file mode 100644 index 2742636f91f..00000000000 --- a/website/static/img/users/gatsby.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file