Tetrat
Программа для плоттера Хорус, которая работает прямо в браузере. Ничего не нужно устанавливать: плоттер подключается по USB к Chrome, Edge или Яндекс Браузеру.

Задача
Хорус — недорогой плоттер, который пишет обычной ручкой. Программа, которая идёт с ним, неудобная, и после видео с плоттером люди стали спрашивать, где взять нормальную. Нужен был продукт целиком: сайт, вход, пробный период, оплата и студия, в которой можно разобраться без инструкции.
Студия
Слева текст с простой разметкой: заголовок, дата, пункт, формула в $…$, график функции. Справа лист в клетку, на котором сразу видно, как ляжет почерк и сколько займёт печать. Движок почерка на Python запускается в браузере через Pyodide в отдельном потоке, поэтому интерфейс не замирает.
Плоттер из браузера
Плоттер подключается через Web Serial. Драйвер GRBL отправляет G-код и следит, чтобы в 128-байтном буфере контроллера всегда было место, а состояние опрашивает каждые 110 мс. Студия сама находит угол листа упором, проверяет касание ручки, обводит рамку, ставит печать на паузу, останавливает её и продолжает с нужного слова.
Сервис
Сервер на Node.js без сторонних зависимостей: регистрация, сессии, три дня пробного доступа, тарифы на месяц и на год, оплата через ЮKassa. Каждый платёж сервер перепроверяет сам, а повторные пробные периоды и одноразовые почты отсекает.
Как браузер управляет плоттером
Лента G-кода идёт в бункер на 128 байт: новая строка уходит, только когда контроллер освободил место. Храповик раз в 110 мс спрашивает состояние, а ручка пишет слово штрих за штрихом.
Экраны
Технически
- Web Serial: плоттер работает из Chrome, Edge и Яндекс Браузера, драйверы и программы не нужны.
- Pyodide 0.27 в Web Worker: движок почерка на Python работает в браузере, а не на сервере.
- Поток G-кода с подсчётом байт под буфер GRBL и опрос состояния каждые 110 мс.
- Проверка прошивки по $I и $$, потолки скорости берутся из настроек самой платы.
- Node.js без зависимостей: http, node:sqlite и scrypt; оплата ЮKassa с проверкой на сервере.
React · TypeScript · Vite · Web Serial · Pyodide · Node.js · SQLite