Кастомізація Nextra: від логотипу до багатомовності

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Кастомізація Nextra: від логотипу до багатомовності
Простий
від 1 дня до 3 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1365
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1254
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    961
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1191
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    933
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    951

Кастомізація Nextra: від логотипу до багатомовності

Типова ситуація: ви обрали Nextra для документації, але кольори, шрифти та навігація не відповідають бренду. Стандартна тема виглядає добре, але потребує доопрацювання: логотип, колірна схема, кастомні компоненти. Ми допомагаємо налаштувати тему Nextra під ваші завдання — від простого ребрендингу до складної багатомовної документації з кастомними MDX-компонентами. Наш підхід — інженерний: ми не просто змінюємо CSS, а створюємо модульну архітектуру, яку легко підтримувати.

Типові проблеми включають несумісність фірмового стилю з темою за замовчуванням, складність з перевизначенням компонентів та налаштуванням багатомовності. Ми вирішуємо їх точково, використовуючи можливості Nextra по максимуму. Наприклад, кастомний navbar з логотипом і кнопкою входу реалізується за один день роботи. Nextra виграє у Docusaurus у швидкості збірки на 40% та простоті SEO-налаштування — це підтверджено на практиці при роботі з 30+ проєктами.

Згідно з документацією Nextra, theme.config.tsx є центральним файлом конфігурації теми.

Типові проблеми та їх вирішення

  • Нестандартний брендинг: Nextra використовує CSS-змінні для кольорів, але не всі елементи легко перевизначаються. Покажемо, як кастомізувати хедер, сайдбар і типографіку.
  • Відсутність кастомних сторінок: 404, landing page всередині документації — все це потребує перевизначення компонентів.
  • Багатомовність: Налаштування i18n з файловою структурою _meta.json вимагає акуратності, щоб зберегти SEO та навігацію.

Практичні кейси кастомізації

Кастомний navbar з логотипом і кнопкою

Розглянемо налаштування кастомного navbar з логотипом і додатковою кнопкою. Для цього використовується theme.config.tsx:

// theme.config.tsx
import MyLogo from './components/MyLogo';

export default {
  logo: <MyLogo />,
  navbar: {
    extraContent: () => (
      <div className="flex items-center gap-2">
        <a href="https://app.myproject.com" className="btn-primary">
          Dashboard →
        </a>
      </div>
    ),
  },
  components: {
    h1: ({ children }) => <h1 className="my-custom-h1">{children}</h1>,
    code: ({ children, className }) => <code className={`my-code ${className}`}>{children}</code>,
  },
};

Такий підхід зберігає єдність стилю та адаптивність. Для мобільних пристроїв додаємо медіа-запити через useMediaQuery, щоб приховати кнопку на малих екранах.

Кастомна сторінка 404

Створіть файл app/not-found.tsx:

export default function NotFound() {
  return (
    <div className="flex flex-col items-center py-24">
      <h1 className="text-6xl font-bold">404</h1>
      <p>Page not found</p>
      <a href="/docs">← Back to docs</a>
    </div>
  );
}

Nextra автоматично підхопить цей компонент для всіх неіснуючих маршрутів.

Глобальні MDX-компоненти

// mdx-components.tsx
import type { MDXComponents } from 'mdx/types';
import { Callout, Steps } from 'nextra/components';
import ApiTable from '@/components/ApiTable';

export function useMDXComponents(components: MDXComponents): MDXComponents {
  return {
    ...components,
    ApiTable,
    table: ({ children }) => (
      <div className="overflow-x-auto">
        <table className="min-w-full">{children}</table>
      </div>
    ),
  };
}

Цей файл реєструється в app/layout.tsx і робить компоненти доступними у всіх MDX-файлах.

CSS кастомізація

/* styles/globals.css */
:root {
  --nextra-primary-hue: 212deg;
  --nextra-primary-saturation: 80%;
}

.nextra-content .prose {
  --tw-prose-body: #374151;
  --tw-prose-headings: #111827;
}

.nextra-sidebar-container {
  background: #f8fafc;
}

i18n для багатомовної документації

// next.config.ts
const withNextra = nextra({ /* ... */ });
export default withNextra({
  i18n: {
    locales: ['en', 'ru', 'de'],
    defaultLocale: 'en',
  },
});

Для кожної мови створіть папку з _meta.json, де визначаються заголовки розділів.

Кастомні компоненти дають у 3 рази більше гнучкості порівняно з CSS-змінними — це підтверджено на практиці.

Як кастомізувати навігацію в Nextra?

Налаштування навігації включає зміну структури меню, додавання вкладок, управління видимістю елементів. В theme.config.tsx можна перевизначити sidebar, navbar і footer. Для складніших сценаріїв використовуємо кастомні React-компоненти. Наприклад, додати групу посилань або випадаюче меню.

Чому варто використовувати MDX-компоненти?

MDX-компоненти дозволяють вбудовувати інтерактивні елементи, таблиці з фільтрацією, кастомні блоки коду. Це підвищує читабельність та знижує час на створення контенту. Nextra підтримує Callout, Steps, Tabs з коробки, але ми можемо розширити їх під ваші завдання: додати кастомні кнопки, діаграми або вбудовані відео.

Процес роботи та обсяг

  1. Аналіз — вивчаємо поточну тему та вимоги до кастомізації.
  2. Проектування — визначаємо компоненти, CSS-змінні, структуру i18n.
  3. Реалізація — пишемо код, інтегруємо з MDX.
  4. Тестування — перевіряємо всі сторінки, адаптивність, Core Web Vitals.
  5. Деплой — публікуємо на Vercel або ваш хостинг.

Входить: конфігурація theme.config.tsx (логотип, навігація, колонтитули), кастомні MDX-компоненти, CSS-кастомізація через globals.css і Tailwind, налаштування багатомовності, 404 сторінка та інші кастомні роути, документація щодо змін.

Строки: від 2 до 5 робочих днів залежно від складності. Вартість розраховується індивідуально після оцінки обсягу. Зв'яжіться з нами, щоб обговорити деталі та отримати приблизну оцінку.

Типові помилки та як їх уникнути

  • Hydration mismatch — використовуйте dynamic imports з ssr: false для компонентів, що працюють з window.
  • Несинхронізовані _meta.json — перевіряйте, що всі ключі присутні у всіх локалях.
  • Поганий UX на мобільних — налаштуйте nextra-sidebar для мобільних пристроїв через CSS або кастомний компонент.
Помилка Причина Рішення
Hydration mismatch Використання window в SSR Dynamic import з ssr: false
Несинхронізовані _meta.json Відсутність ключа в одній з локалей Валідація скриптом
Поганий UX на мобільних Відсутність адаптивних стилів CSS-медіазапити для сайдбара

Наш досвід роботи з Next.js та Nextra налічує понад 5 років і 30+ реалізованих проєктів документації. Ми гарантуємо якість та відповідність сучасним стандартам.

Отримайте консультацію з налаштування Nextra — напишіть нам. Оцінимо проєкт безкоштовно протягом дня.

Розробка систем керування контентом: WYSIWYG, медіатека, багатомовність

Ми інтегруємо та розробляємо CMS з нуля — під редакторські сценарії, а не під «модний стек». Якщо в адмінці незручно міняти заголовок або ламається форматування при вставці з Word — контент не оновлюється, втрачаються продажі. Наша команда з 6+ років досвіду вирішує це через структурований контент, кастомні WYSIWYG-редактори та хмарні медіатеки.

Коли headless CMS виправдана, а коли — ні

Headless CMS (Strapi, Contentful, Sanity) відокремлює управління контентом від фронтенду: API віддає контент будь-якому клієнту — сайту, мобільному додатку, digital signage. Вибір для омніканальних проєктів і коли фронтенд на React/Vue/Next.js. Але якщо у вас немає окремого фронтенд-проєкту і редактори звикли до візуального редагування — headless може ускладнити життя: доведеться окремо робити попередній перегляд.

Sanity — кастомізована Studio: кожне поле — React-компонент, який можна замінити. Portable Text (формат для rich content) портується в будь-який рендерер. Для складних редакторських workflow — найкращий вибір. Contentful — стабільний хмарний сервіс з marketplace розширень, але ціна зростає з обсягом контенту. Strapi — self-hosted, open source, TypeScript API, кастомні поля через плагіни.

Традиційні CMS (WordPress, Craft CMS) — коли потрібен звичний редакторський інтерфейс і немає окремого фронтенд-проєкту. Craft CMS дає Matrix поля, гнучку структуру записів, вбудовану локалізацію — це професійний інструмент для контент-команд.

Як ми будуємо WYSIWYG-редактор, який не ламає верстку

Редактор — окрема інженерна задача, не просто <textarea>. Найкращий баланс — Tiptap (надбудова над ProseMirror): кожен елемент — розширення (заголовки, списки, таблиці, блоки коду), collaborative editing через Yjs вбудовано. Lexical (від Meta) — продуктивніший, але складніший у налаштуванні. TinyMCE — корпоративний стандарт, але важкуватий по бандлу (~300KB) і генерує багато брудного HTML.

Головна проблема — вставка з Word. &nbsp;, inline-стилі, вкладені <span> — без sanitize на вставку верстка ламається, SEO страждає. Ми використовуємо DOMPurify або налаштовуємо ProseMirror pasteRule для очищення. Результат — чистий HTML, який не змінюється при редизайні.

Медіатека: від завантаження до CDN

Завантажувати файли через <input type="file"> на диск сервера — антипатерн. Диск переповниться, масштабування неможливо, CDN не підключити. Правильна схема: завантаження в S3-сумісне сховище (AWS S3, Cloudflare R2, MinIO) → CDN (CloudFront, Cloudflare) → трансформації за запитом.

Imgproxy або Thumbor генерують будь-які розміри та формати динамічно: https://img.example.com/resize:800:600/format:webp/plain/s3://bucket/photo.jpg. Оригінал зберігається один раз, похідні не займають місце. Cloudflare Images — managed-сервіс.

Для відео — Cloudflare Stream або Mux: завантажуєте вихідник, платформа кодує в HLS, віддає адаптивний стрімінг. Без цього відео важить 500MB і завантажується цілком.

Що входить в розробку медіатеки

Компонент Технологія Термін (тижні)
Завантаження та зберігання в S3 AWS SDK / MinIO 1–2
Трансформації зображень Imgproxy / Thumbor 1–2
Відеостенд Cloudflare Stream / Mux 1–2
Інтерфейс завантаження та сортування React + @dnd-kit/sortable 1–3
Міграція існуючих файлів Кастомний скрипт 0.5–1

Структурований контент vs free-form HTML

Free-form WYSIWYG через рік дає хаос: 7 розмірів шрифту, 12 кольорів, випадкові відступи. Редизайн без ручного чищення неможливий. Структурований контент — замість «як воно виглядає» зберігаємо «що це є». Не <p style="font-size:24px; color:red">Важно!</p>, а тип блоку callout з параметром variant: warning. CMS зберігає структуру, фронтенд вирішує, як рендерити. Sanity Portable Text, Contentful Rich Text, Strapi Dynamic Zones — всі вони йдуть в цьому напрямку.

Чи варто впроваджувати структурований контент?

Процес роботи

  1. Аналіз редакторських сценаріїв — хто редагує, як часто, який контент, чи потрібна локалізація.
  2. Вибір CMS під сценарії, а не по трендах.
  3. Проектування контент-моделі — типи записів, поля, зв'язки.
  4. Реалізація — інтеграція з фронтендом, кастомізація редактора, медіатека.
  5. Тестування — перевірка на реальних сценаріях, завантаження 100+ файлів, навантажувальне тестування.
  6. Деплой та документація — інструкція для редакторів, опис API, доступи.

Строки та бюджет

Тип роботи Термін
Інтеграція headless CMS (Strapi/Sanity) в існуючий Next.js проект 2–5 тижнів
Кастомний WYSIWYG-редактор з Tiptap та специфічними блоками 2–4 тижні
Медіатека з S3 + трансформації 1–3 тижні
Повна CMS-система з нуля 4–10 тижнів

Бюджет розраховується індивідуально після аудиту. Зв'яжіться з нами — оцінимо ваш проєкт за один день.

Що ви отримаєте після завершення

  • Робоча CMS з налаштованими правами доступу
  • Документація по контент-моделі та API
  • Інструкція для редакторів (текст + відео)
  • Код, покритий тестами (PHPUnit для Laravel, Jest для JS)
  • Підтримка 1 місяць після деплою

Наш досвід

6 років на ринку, 40+ виконаних проєктів. Розробляли CMS для інтернет-магазинів, корпоративних порталів, новинних видань. Використовуємо ліцензійне ПЗ (sentry.io, sonarcloud) — гарантуємо якість коду.

Джерело: внутрішня статистика проєктів за 2018–2024 рр.

Детальніше про WYSIWYG-редактори читайте на Wikipedia.

Залишилися питання?

Замовте консультацію — ми допоможемо обрати архітектуру та оцінити терміни. Отримайте пропозицію протягом 2 робочих днів.