Annotate PDF: как я написал клиентский редактор без бэкенда и всё запорол в погоне за улучшениями
Представьте ситуацию: вам прислали контракт или учебный материал в PDF. Нужно быстро поставить подпись, обвести важный абзац или добавить пару комментариев. Идти в Adobe Acrobat долго, а загружать документ на сомнительные онлайн-сервисы небезопасно.
Я столкнулся с этой проблемой и решил сделать свой инструмент. Так появился проект Annotate PDF.
Это простая "рисовалка" поверх документов, которая работает полностью в браузере.

Как это родилось?
Проект начинался как классическая идея для буткемпа. Нам нужно было выбрать идею и за короткое время собрать полезный MVP. Я решил не плодить очередные To-Do листы, а разобраться с тем, как устроены документы.
Техническая магия: война координат
Самое сложное в разработке PDF-редактора это синхронизация координат. В вебе (и в Fabric.js) начало координат (0,0) находится в левом верхнем углу, а ось Y идет вниз. В спецификации PDF все наоборот: точка (0,0) — это левый нижний угол, а Y растет вверх.
Чтобы ваши пометки при сохранении не улетели "в космос", пришлось внедрять систему маппинга.
Формула пересчета координат выглядит так:

Что под капотом?
Основная фишка приложения: полное отсутствие сервера для обработки файлов. Документ не покидает ваше устройство. Это дает и безопасность, и скорость.
Стек технологий выглядит так:
* Next.js / Tailwind: стандарт для быстрой верстки и SEO.
* Fabric.js: мощная библиотека для работы с объектами на холсте (фигуры, текст, кисти).
* PDF.js: движок от Mozilla для рендеринга страниц.
* pdf-lib: библиотека для финальной сборки нового файла на стороне клиента.
Нюансы реализации
Для многостраничных документов я использую ленивую инициализацию. Мы не можем создать сто тяжелых холстов Fabric.js сразу — браузер просто "съест" всю память. При переключении страницы текущее состояние сохраняется в JSON, а холст очищается и загружает новые данные.
Что умеет Annotate PDF
В приложении доступно более десяти инструментов для полноценной работы с документами. Основной упор сделан на то, чтобы закрыть 90% повседневных задач обычного пользователя.
Работа с текстом и заметками
Вы можете кликнуть в любом месте документа выделить текст нужным цветом или начать печатать. Для текста настраивается всё: цвет, размер и даже семейство шрифтов (поддерживаются стандартные и Google Fonts). Это удобно, если нужно заполнить анкету или оставить подробный комментарий коллеге.

Рисование и подписи
Инструмент свободного рисования (Draw) позволяет делать рукописные пометки. Он идеально подходит для создания подписей с помощью мышки или тачпада. После создания подпись можно сохранить в правой панели и использовать повторно, меняя её размер и положение.

Геометрия и выделение
Для акцентов есть набор стандартных фигур: стрелки, линии, прямоугольники и круги. Если нужно подсветить важный фрагмент, используется инструмент хайлайтера. А для защиты вашей приватности предусмотрена функция замазки (Whiteout), которая позволяет надежно скрыть конфиденциальные данные в файле перед его отправкой.

Все объекты на холсте остаются интерактивными: их можно вращать, перемещать и масштабировать до тех пор, пока вы не решите сохранить финальный результат.
Как всё запорол
В течении года проект закрепился на первой странице поиска и казалось что всё идёт хорошо. И тут я допустил фатальную ошибку
Я пытался выкатить на этом же домене более сложную версию продукта с красивым дизайном и множеством новых функций, но Google отреагировал на это провалом в позициях.
Как я позже выяснил поисковики любят постепенные улучшения, а резкая смена контента их пугает. В итоге я оставил проект в его "ламповом" буткемповском виде. И, судя по органическому трафику, пользователям именно это и нужно.
Что дальше
Сейчас проект живет своей жизнью и приносит пользу людям. Есть расширение на 50000 активных пользователей для тех кому нужен быстрый доступ к инструменту

В планах есть мысли добавить несколько маленьких улучшений:
Добавить пипетку рядом с выбором цвета, что бы можно было взять цвет из документа
Более продвинутые инструменты выделения текста.
Сохранить цвета чтобы их можно было использовать на других инструментах
Если вам нужно быстро и безопасно подписать документ или сделать заметки к лекции — заходите на https://annotatepdf.io/ru
Буду рад критике и предложениям в комментариях. Признаю, что проект местами «код на коленке», но он работает и решает задачу.