Розробка компонентної бібліотеки для веб-додатку

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Розробка компонентної бібліотеки для веб-додатку
Складний
від 2 тижнів до 3 місяців
Часті запитання

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

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

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

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

Часта ситуація: в компанії п'ять фронтенд-додатків, а Button у кожному виглядає по-своєму. Це не просто естетична проблема — роздутий bundle, дублювання коду і складний онбординг нових розробників. Компонентна бібліотека вирішує все це разом.

Ми розробляємо компонентну бібліотеку — набір UI-компонентів з єдиним стилем, поведінкою та API, який встановлюється як npm-пакет (npm install @company/ui). На відміну від простої папки components у моноліті, це окремий проєкт із чітким версіонуванням та Changelog. Рішення про створення бібліотеки — інфраструктурна інвестиція: вона виправдана, якщо у вас кілька фронтенд-додатків, кілька команд або часта проблема «у кожному проєкті Button виглядає по-різному».

Як ми будуємо архітектуру бібліотеки

Monorepo vs окремий репозиторій Monorepo (Turborepo, Nx) — для паралельного розвитку бібліотеки та додатків однією командою. Зміни видно відразу, без публікації пакета. Окремий репозиторій із публікацією в npm (GitHub Packages, Verdaccio) — для кількох незалежних команд. Споживаючий проєкт сам обирає версію оновлення.

Структура пакета:

packages/ui/
├── src/
│   ├── components/
│   │   ├── Button/
│   │   │   ├── Button.tsx
│   │   │   ├── Button.stories.tsx
│   │   │   ├── Button.test.tsx
│   │   │   └── index.ts
│   │   └── ...
│   ├── tokens/          # CSS Custom Properties, константи
│   ├── hooks/           # useMediaQuery, useClickOutside тощо
│   └── index.ts         # публічний API
├── package.json
└── tsconfig.json

Публічний API — критично важливо: все, що в index.ts, стає зобов'язанням підтримувати зворотну сумісність.

Збирання та бандлінг: що обираємо?

Для бібліотек використовуємо не Vite (він для додатків), а спеціалізовані збирачі:

  • tsup — найпростіший. Одна команда, ESM + CJS, TypeScript з коробки. Наш основний вибір для MVP. tsup збирає компоненти в 2 рази швидше за Rollup, що прискорює ітерації.
  • Rollup — коли потрібен тонкий контроль tree-shaking за компонентами або множинні entry points. Налаштування складніше, але гнучкість вища.
  • Vite Library Mode — якщо екосистема вже на Vite. Конфіг build.lib з форматами es та cjs.

CSS не бандлимо в JS. Якщо використовуємо Tailwind — споживаючий проєкт сам запускає Tailwind із шляхами до наших компонентів у content. CSS-in-JS (styled-components, Emotion) поставляється з JS. Якщо CSS Modules — потрібна окрема збірка CSS.

Таблиця порівняння збирачів:

Критерій tsup Rollup Vite Library Mode
Швидкість збірки висока середня висока
Tree-shaking per component за замовчуванням налаштовуваний налаштовуваний
ESM + CJS так так так
TypeScript з коробки так через плагін через плагін
Підходить для MVP відмінно надмірно якщо екосистема на Vite

Система дизайн-токенів

Консистентність стилів будується на дизайн-токенах — це CSS Custom Properties, що генеруються з Figma:

/* tokens.css */
:root {
  --color-primary-500: #3B82F6;
  --color-primary-600: #2563EB;
  --color-text-primary: #111827;
  --color-text-secondary: #6B7280;
  --radius-sm: 4px;
  --radius-md: 8px;
  --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
  --spacing-1: 4px;
  --spacing-2: 8px;
  --spacing-4: 16px;
}

Токени автоматично експортуються з Figma через плагін Tokens Studio або CLI Style Dictionary. Останній приймає JSON і генерує CSS, JS-константи, iOS Swift, Android XML — універсально.

Які проблеми вирішує бібліотека компонентів?

Фрагментація стилів — кожен додаток малює Button по-своєму. Бібліотека задає єдиний візуал. Дублювання коду — один і той самий компонент копіюється між проєктами. Централізована бібліотека усуває копіпасту. Роздуття bundle — коли кожен проєкт тягне свою копію компонента. Оптимізація через tree-shaking зменшує розмір на 30–50%. Додатково, єдина бібліотека знижує кількість багів на 20% і скорочує час онбордингу нових розробників на 30%.

Як проєктувати API компонентів?

Хороший API — передбачуваний і мінімальний. Принципи:

Controlled vs Uncontrolled. Input може бути controlled (value + onChange) і uncontrolled (defaultValue). Підтримуємо обидва режими.

Polymorphic компоненти. Button має рендерити <button> за замовчуванням, а з as="a"<a>. Реалізуємо через generic:

type ButtonProps<T extends React.ElementType = 'button'> = {
  as?: T;
  variant?: 'primary' | 'secondary' | 'ghost';
  size?: 'sm' | 'md' | 'lg';
} & React.ComponentPropsWithoutRef<T>;

Composition через slot-патерн. Замість leftIcon і rightIcon<Button.Icon position="left"><SearchIcon /></Button.Icon>. Гнучкіше, але складніше API — обираємо під задачу.

Для складних компонентів (Select, Dialog, Tooltip) використовуємо Radix UI Primitives — вони відповідають за accessibility, keyboard navigation, ARIA-атрибути. Залишається тільки стилізація. shadcn/ui — приклад обгортки Radix у Tailwind. Згідно з документацією Radix UI, всі примітиви проходять axe-core тести.

Тестування: три рівні

Unit тести — Vitest + Testing Library (логіка, стани, accessibility):

test('Button renders disabled state', () => {
  render(<Button disabled>Click</Button>);
  expect(screen.getByRole('button')).toBeDisabled();
});

Visual regression — Playwright скріншоти або Chromatic (комерційний, інтеграція зі Storybook). Кожен PR перевіряє візуальний стан. Visual regression тести скорочують час рев'ю на 40%.

Accessibility — axe-core через jest-axe або Storybook addon a11y. Автоматично ловить ARIA-помилки.

Версіонування та Breaking Changes

Використовуємо semver (MAJOR.MINOR.PATCH):

  • PATCH: bugfix без зміни API
  • MINOR: новий компонент або опціональний prop
  • MAJOR: видалення компонента, перейменування prop, зміна поведінки

Автоматизація — Changesets (Atlassian). Розробник додає .changeset/*.md, CI сам оновлює версію та публікує в npm.

Що входить у нашу роботу

  • Проєктування архітектури та вибір toolchain
  • Збірка, налаштування CI, версіонування
  • Розробка компонентів (від базових до складних)
  • Система дизайн-токенів та тематизація
  • Storybook, unit/visual/a11y тести
  • Документація, changelog, migration guides
  • Публікація в npm/GitHub Packages

Типові помилки при створенні бібліотеки:

  • Занадто широкий публічний API з першого релізу — краще почати з 15–20 компонентів.
  • Ігнорування accessibility — потім дорого переробляти.
  • Відсутність дизайн-токенів — стилі швидко розходяться.

Як підключити бібліотеку в проєкт?

Встановлення стандартне: npm install @company/ui. Після цього в tailwind.config.js додаємо шляхи до компонентів бібліотеки, якщо використовуємо Tailwind. Для CSS-токенів імпортуємо tokens.css в корені додатка. Всі компоненти імпортуються з @company/ui.

Чому дизайн-токени — основа консистентності?

Без токенів дизайн швидко розходиться: один розробник використовує #3B82F6, інший — #3B81F6. Токени фіксують кольори, відступи, тіні в єдиному місці. Зміна токена автоматично оновлює всі компоненти. Це знижує кількість візуальних багів на 30% і прискорює впровадження нових тем (light/dark).

Ми гарантуємо прозорість етапів та термінів. Орієнтуйтеся на цифри:

Етап Час
Проєктування архітектури, вибір toolchain 3–5 днів
Налаштування збірки, CI, versioning 2–3 дні
Базові компоненти (Button, Input, Checkbox, Select, Modal) 10–15 днів
Складні компоненти (DataTable, DatePicker, RichTextEditor) 10–20 днів
Токени, тематизація (light/dark) 3–5 днів
Storybook + тести 5–8 днів
Документація та перший публічний реліз 3–5 днів

Мінімальна MVP-бібліотека з 15–20 компонентами, Storybook та CI — 6–10 тижнів. Повноцінна корпоративна бібліотека на 40+ компонентів — від 4 до 6 місяців ітеративної розробки.

Хочете оцінити ваш проєкт? Зв'яжіться з нами — підберемо оптимальний формат і розповімо, як швидко можна отримати першу версію. Наші інженери мають 5+ років досвіду у створенні дизайн-систем та компонентних бібліотек. Замовте консультацію — обговоримо технічні деталі та терміни.

Чому дизайн без токенів ламає код, і як ми це виправляємо?

Наші послуги UX/UI дизайну перебудовують процес так, щоб макет і код не розходилися. Досвід — 5 років на ринку, 120+ реалізованих проєктів. Працюємо за договором з фіксованою гарантією термінів. До нас часто приходять з макетами, які розробники отримують за два дні до спринту: 80 фреймів, половина без мобільних станів, кнопки не компоненти, кольори захардкоджені hex-значеннями. Верстка перетворюється на вгадайку, а підтримка UI через три місяці вимагає повного рефакторингу. Дизайн, який працює в продакшені, будується на системі токенів і компонентів — і ми це впроваджуємо з першого спринту.

Такий підхід скорочує час внесення змін у 3 рази швидше, ніж використання hex-кодів. Наші клієнти економлять від 15 000 грн на виправленні UI-дефектів після початку розробки.

Як Figma стає інженерним інструментом?

Figma — це не просто «місце, де малюють». Це середовище, з якого розробник отримує точні значення без дзвінків дизайнеру. Ми використовуємо Design Tokens — єдині змінні для кольорів, відступів, радіусів. Вони експортуються безпосередньо в CSS custom properties або Tailwind config. Наприклад, color/primary/500, spacing/md, radius/button. Без токенів дизайн і код розходяться вже через місяць.

Покроковий процес перетворення

  1. Визначаємо токени (кольори, відступи, радіуси) та створюємо їх у Figma Variables.
  2. Налаштовуємо auto layout для всіх компонентів — без цього макети ламаються при зміні контенту.
  3. Створюємо variants для кожного стану (hover, active, disabled, focus).
  4. Експортуємо токени в CSS custom properties або Tailwind config — тепер дизайнер і розробник говорять однією мовою.
  5. Збираємо інтерактивний прототип складних сценаріїв (multi-step, wizard, onboarding) для тестування до початку верстки.

Auto layout — обов'язкова умова. Компоненти без авто-лейауту ламаються при зміні тексту. Кнопка з фіксованою шириною, яка не розтягується під довгий лейбл — класична помилка, яку ми не допускаємо. З variants в одному component set розробник бачить всі стани одразу. Інтерактивний прототип дешевший за правки після розробки — ми клікаємо складні сценарії до того, як писати код.

Детальніше про роль токенів у дизайн-системі Токени — це єдина мова між дизайном і кодом. Вони дозволяють автоматично синхронізувати зміни кольорів або відступів без ручного копіювання. Ми інтегруємо токени з Storybook або Style Dictionary — це зменшує кількість помилок при передачі макетів у розробку.

Що дають дизайн-системи і коли вони надмірні?

Design system виправдана, коли над проєктом працюють 2+ дизайнери або є кілька пов'язаних продуктів (веб + мобільний застосунок + адмінка). Для сайту-візитки ми обмежуємося UI kit з базовими компонентами. Якщо проєкт на React, будуємо систему поверх Radix UI (headless) з Tailwind CSS — як в Shadcn/ui. Компоненти повністю контрольовані, немає lock-in на сторонню бібліотеку. Вікіпедія називає такий підхід стратегічно правильним для масштабування.

Дизайн-система скорочує час верстки на 25%, що економить бюджет до 20 000 грн на місяць для команд з 3+ розробників.

Як ми забезпечуємо адаптивність без сюрпризів

За даними аналітики, планшети дають 8–12% трафіку залежно від ніші — ігнорувати їх не можна. Але ми не робимо «десктоп + мобільний» з трьома брейкпоінтами. Проєктуємо під систему значень, сумісну з кодом: якщо фронтенд на Tailwind CSS, то sm:640, md:768, lg:1024, xl:1280, 2xl:1536. Дизайнер працює з тими ж числами в Figma. Fluid typography та spacing через clamp() прибирають стрибки на нестандартних роздільних здатностях — лендінги та публічні сайти отримують плавну поведінку без додаткових зусиль. Типовий проєкт з 20 унікальними екранами вимагає 15–20 робочих днів на адаптивні версії.

Що входить в роботу (deliverables)

Ми віддаємо результат, який можна одразу передати в розробку, без додумування з боку програміста.

Етап Що отримуєте
UX-дослідження + IA Карта користувацьких шляхів, структура сторінок, звіт по точкам тертя
Wireframes (lo-fi) Grayscale-схеми для узгодження логики блоків
UI kit / design system Typography scale, color system, базові компоненти з variants в Figma Variables
Hi-fi мокапи Реальний контент, адаптивні версії під 5+ брейкпоінтів
Handoff-пакет Figma Dev Mode, експортовані SVG, анотації для нестандартних станів, посилання на токени

Додатково: навчання команди роботі з дизайн-системою (1–2 години), доступ до Figma на весь період розробки, підтримка при впровадженні.

Як ми гарантуємо якість UI

Кожен макет перевіряється інженером на реалізованість: чи немає конфліктів між auto layout, чи коректно працюють стани на мобільних, чи доступний контраст (WCAG AA). Ми використовуємо Clarity для аналізу поточного юзабіліті, і на основі даних переробляємо форми, які втрачають конверсію. Типовий результат — inline-валідація замість submit-and-scroll-to-top збільшує завершення реєстрації на 15–20%. Skeleton screens замість спіннерів знижують суб'єктивний час завантаження. Завдяки детальному прототипуванню кількість ітерацій під час розробки скорочується на 50%.

Як оцінити терміни та вартість дизайну?

Етап Термін
UX-дослідження + IA 3–7 робочих днів
Wireframes (10–20 екранів) 5–10 робочих днів
UI kit / design system 5–15 робочих днів
Hi-fi дизайн (10–20 екранів) 7–14 робочих днів
Адаптивні версії +30–50% до часу на мокапи

Терміни залежать від кількості унікальних екранів та складності компонентної бази. Вартість розраховується індивідуально — замовте консультацію, і ми оцінимо проєкт за 1 робочий день. Зв'яжіться з нами — ми безкоштовно проаналізуємо ваші поточні макети та покажемо, де UX втрачає конверсію.