Skip to content

Vaynerov Technologies

Мы не просто разрабатываем — мы создаём каждую строку кода и пиксель.

Все статьиЛабораторные заметки

Toolbox открыт: 25 утилит, ничего не загружается

Большинство онлайн-утилит просят отдать файл на чужой сервер. Toolbox не получает ни одного: каждая конвертация, каждый хеш, диф и градиент считаются на вашей машине, а вся поверхность инструментов не делает ни одного сетевого запроса.

Vaynerov TechnologiesСтудия
Опубликовано 3 мин чтения

Toolbox открыт — двадцать пять утилит, бесплатно, без аккаунта, без установки. Первым делом стоит сказать то, что определило в нём каждую строку: поверхность инструментов делает ноль сетевых запросов. Не «мы удаляем ваши файлы через час», не «обрабатывается безопасно» — удалять нечего, потому что байты никуда не уезжают. Прежде чем написать это на хабе, мы прогрепали всю поверхность, чтобы убедиться.

25
инструментов в четырёх категориях
8
выделенных Web Workers
0
сетевых запросов в поверхности инструментов
6
языков на старте

Двадцать пять инструментов, четыре категории

  • Файлы — сжатие и распаковка gzip, архиватор и распаковщик ZIP, конвертер изображений и файловый хешер на четыре дайджеста.
  • Текст — форматтер JSON, Base64, URL-кодировщик, настоящий диф Майерса с пословной подсветкой и выводом unified-патча, конвертер регистров, знающий про аббревиатуры, счётчик слов с корректной сегментацией, генератор lorem ipsum по сиду и конвертер CSV↔JSON по RFC 4180.
  • Код — тестер регулярных выражений с защитой от разгона, декодер JWT с локальной проверкой HS256, конвертер таймстампов, генератор UUID/v7/nanoid, парсер cron, который отвечает человеческими словами, хеширование SHA и HMAC, генератор паролей и строгий XSS-безопасный предпросмотр markdown.
  • Дизайн — конвертер цветов между HEX/RGB/HSL/OKLCH с контрастом по WCAG, конструкторы градиентов и теней, генератор QR и извлекатель палитры, который читает изображение, никуда его не отправляя.

Поиск по ним всем складывает диакритику, так что bäse находит Base64, и повешен на клавиши, которые руки уже знают: / ставит фокус в поле в любом месте хаба, ⌘K работает откуда угодно на странице, Enter открывает верхний результат. У трёх инструментов есть быстрое действие: оно генерирует и копирует значение — пароль, UUID, абзац рыбы — прямо с карточки на хабе, не открывая сам инструмент.

Чего стоило остаться локальным

Клиентские инструменты без загрузки легко пообещать и дорого удержать. Восемь из двадцати пяти делают работу в выделенном Web Worker, чтобы архив на 900 МБ не касался потока, который рисует ваш курсор. Сжатие, распаковка и хеширование идут потоком, а не через буфер: писатель ZIP сбрасывает части Blob каждые 16 МиБ, поэтому куча остаётся плоской при любом размере входа, а после 4 ГиБ он перестаёт умничать, сохраняет CRC и кладёт исходный файл без единой копии. Файловый хешер считает все четыре дайджеста за один проход до 256 МиБ, а выше переключается на самописный инкрементальный SHA-256.

Кое-что здесь сделано просто из ремесленного упрямства. Генератор QR — наш собственный кодировщик: ISO/IEC 18004 model 2, код Рида—Соломона над GF(256), все восемь масок с оценкой, — потому что каждая библиотека, на которую мы смотрели, просила у страницы больше, чем QR-код того стоит. Извлекатель палитры работает медианным сечением с одним намеренным отступлением от учебника: он режет по самому широкому промежутку между занятыми корзинами, а не по медианному индексу, и в этом вся разница между тем, чтобы прочитать логотип как белый и чёрный, и тем, чтобы прочитать его как белый и чуть менее белый.

Сам хаб — двадцать пять маленьких CSS-3D-диорам, без WebGL, по сцене на категорию, засеянных слагом самого инструмента, так что нет двух одинаково поставленных карточек, а тайминги их анимаций разъезжаются на ±15%, чтобы сетка никогда не дышала в такт. Если у вас включено уменьшение движения, каждая сцена замирает в своей собранной позе покоя — и это выглядит решением, а не сломанной анимацией.

Tremor вышел вчера и делает ровно обратное — тянет сейсмичность всей планеты по проводу (как он устроен). Toolbox — тихая половина того же инстинкта: сделать вещь как следует, а потом отдать.