МОЙ ПРОЕКТ

pechati.store — конструктор печатей и штампов

Векторный редактор макетов прямо в браузере: слои, векторизация текста и картинок, экспорт в PNG, SVG, PDF и ZIP; одна сборка обслуживает сервис и локальный сайт в Краснодаре.

Год
2026
Роль
Мой проект: продукт, код, деплой и сопровождение — я

Задача

Заказ печати обычно выглядит так: клиент описывает макет словами, изготовитель присылает картинку, дальше правки ходят письмами. Нужен был редактор, в котором человек собирает макет сам и сразу видит результат.

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

Что сделано

  • Редактор на SVG-канвасе: круги, круговой и центрированный текст, иконки, изображения; слои с перетаскиванием, группировкой и блокировкой, отмена и повтор действий.
  • Векторизация целиком в браузере: текст переводится в контуры через fontkit, растровые картинки — через Potrace, собранный в WebAssembly. Сервер в этом не участвует.
  • Экспорт в PNG, SVG, PDF и ZIP, включая выгрузку отдельных элементов; шрифты с кириллицей, шаблоны по категориям и генератор макетов с поиском иконок по тегам.
  • Черновики хранятся в браузере вместе с превью и переносятся между устройствами импортом и экспортом JSON.
  • Платный контур: тарифы, оплата, учёт платных выгрузок и админка — покупка подтверждается на сервере, а не в браузере.
  • Одна сборка на три домена: сам конструктор (constructor.pechati.store), витрина (pechati.store) и краснодарский сайт печати-даром.рф, где конструктор встроен в страницу. Обязательность входа, способ выдачи файла и цветовая схема выбираются по имени домена во время выполнения — копий кода нет.

Стек

  • React 19, TypeScript, Vite; состояние — Zustand
  • fontkit — векторизация текста, Potrace WASM — векторизация изображений
  • jsPDF со svg2pdf и JSZip — экспорт; @dnd-kit — панель слоёв
  • PHP API и MySQL на общем хостинге: шаблоны, аккаунты, оплаты
  • Встраивание конструктора в чужую страницу через iframe и embed.js

Измеримое

Замер мой, 4 сентября 2026 г., по публичной главной странице. Цифры бизнеса клиента здесь не показываются: их публикация — вопрос отдельного письменного разрешения, а выдумывать метрики я не буду.

Lighthouse mobile, производительность
91 из 100
прогон Lighthouse 13 в режиме мобильного устройства по публичному адресу главной
Вес главной страницы
108 КБ
суммарный объём переданных ресурсов в том же прогоне Lighthouse
Отрисовка главного блока (LCP)
2,8 с
тот же прогон, эмуляция мобильной сети и процессора

Что из этого работает у клиентов

  • Тяжёлое можно считать у клиента: векторизация и экспорт работают в браузере, серверу остаются хранение и деньги — дешевле хостинг и быстрее отклик.
  • Одна сборка с поведением по домену дешевле трёх копий кода: тем же приёмом — общий шаблон, фактура в данных — сделаны гео-страницы этого сайта.
  • Что не жалко потерять — держим в браузере, что жалко — только на сервере: черновики в локальном хранилище, оплаты и выгрузки в базе.
Все работыПосчитать свой проект