En
Написать
‹ Назад

ds-health

Веб-тулopen source

Даёшь URL — инструмент открывает страницу в Chromium, снимает вычисленные стили видимых элементов и собирает первичный аудит: сколько разных цветов, кеглей, отступов и радиусов реально рендерит браузер.

Что считает

  • ЦветаСколько уникальных цветов текста и фона встретилось на странице и видны ли CSS-переменные в стилях документа.
  • ТипографикаСемейства, кегли и начертания видимого текста — насколько компактна типографическая шкала страницы.
  • ОтступыСколько разных значений padding и gap реально отрендерил браузер.
  • РадиусСколько ненулевых значений border-radius используется у контейнеров и контролов.

Граница метода: инструмент оценивает сходимость вычисленных стилей (getComputedStyle) на открытой странице. Меньшее число уникальных значений и наличие CSS-переменных — полезная эвристика для первичного аудита вёрстки, но не прямое доказательство качества архитектуры дизайн-системы в исходниках.

Запуск

git clone https://github.com/AndrewAntoshkin/ds-health.git
cd ds-health
npm install
npm start

Открой http://localhost:3000. Если порт занят:

PORT=3002 npm start

Если Playwright не находит браузер:

npx playwright install chromium

Как устроено

Инструмент открывает страницу в Chromium через Playwright. Берёт видимые элементы и читает стили, которые браузер уже применил. Потом отдаёт баллы, сигналы и рекомендации.

URL → Playwright (Chromium) → getComputedStyle() on sampled elements
→ Count unique colors, fonts, spacing, radii
→ Score each category (0–100)
→ Generate executive summary + priorities + recommendations

API

POST /api/analyze

curl -X POST http://localhost:3000/api/analyze \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

Запрос

ПолеТипОписание
urlстрокаПубличный HTTP/HTTPS-адрес страницы

Ответ

ПолеТипОписание
health.overallчислоСредний балл от 0 до 100
health.colorчислоНасколько цвета близки к одной шкале
health.typographyчислоНасколько типографика близка к одной шкале
health.spacingчислоНасколько отступы близки к одной шкале
health.radiusчислоНасколько радиусы близки к одной шкале
health.labelстрока«Близко к шкале», «Небольшой разброс» и другие
executiveSummaryстрокаКороткий вывод обычным языком
prioritiesмассивЧто чинить первым
recommendationsмассивКонкретные следующие шаги
signalsмассивОтдельные наблюдения
topValuesобъектСамые частые значения по категориям

GET /health

Возвращает { "ok": true } — удобно для проверки, что сервис жив.

Пример страницы, близкой к одной шкале

Результат разбора barvian.me — минималистичный сайт:

ЗначениеЧто значит
100Цвет
100Типографика
100Отступы
100Скругление
{
"elementsSampled": 69,
"textNodesSampled": 41,
"cssVariables": 4,
"textColors": 3,
"backgroundColors": 3,
"fontFamilies": 1,
"fontSizes": 1,
"fontWeights": 2,
"spacingValues": 4,
"radiusValues": 1
}

Executive summary:
"This page looks healthy. 4 CSS variables were
detected, and no major consistency issues stood
out in the sampled page."

Пример раздробленного сайта

Страница с кучей разных значений — обычная история легаси и быстрых прототипов:

ЗначениеЧто значит
65Цвет
45Типографика
70Отступы
90Скругление
Priority issues:
⚠ 14 text colors detected — consider consolidating
⚠ 4 font families in use — reduce to 1–2
⚠ 8 font sizes found — align to a type scale
⚠ No CSS variables detected — consider tokenizing

Recommendations:
→ Audit text colors and create a semantic palette
→ Standardize on 1–2 font families
→ Define a spacing scale (4, 8, 12, 16, 24, 32)
→ Introduce CSS custom properties for tokens

Как читать отчёт

Удобный порядок чтения: сначала балл, потом короткий вывод, потом приоритеты, потом сырые значения.

РазделЧто показывает
Общий баллСреднее четырёх оценок. Быстро видно, прошло или нет.
Короткий выводВывод для тех, кто не читает сырые цифры
ПриоритетыЧто чинить первым — с наибольшим эффектом
РекомендацииПрактичные шаги, которые можно поставить в спринт
СигналыОтдельные наблюдения. По ним видно, откуда балл.
Частые значенияСамые частые цвета, размеры и отступы. Их в первую очередь стоит собрать в токены.
Группы похожих значенийПочти одинаковые значения собраны в группы.

Шкала

ДиапазонМеткаЧто значит
90–100Близко к шкалеМало цветов, немного вариантов шрифта, небольшой набор отступов
70–89Небольшой разбросЕсть разброс или несколько разовых значений
50–69Нужно вниманиеВизуальная система расползается — стоит посмотреть ближе
0–49РаздробленныйСлишком много разных значений — слоя токенов, скорее всего, нет

Код на GitHub

Есть задача?

Напишите мне. Вместе разберёмся, с чего начать.