mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
docs: update plans, backlog
This commit is contained in:
+27
-18
@@ -1,18 +1,19 @@
|
||||
# План: платформа — общее ядро, API и PWA
|
||||
|
||||
> **Статус (2026-09-09):** план-набросок. WASM-ядро и CLI уже описаны в
|
||||
> `docs/roadmap.md` (фазы 3–8) и здесь не дублируются — этот план добавляет то,
|
||||
> чего в roadmap нет: **API** (фаза 9, возможная монетизация) и **PWA** (фаза
|
||||
> 10, оффлайн + установка). Оба стартуют после wasm-фаз; PWA не ждёт API и может
|
||||
> идти раньше.
|
||||
> **Статус: active.** Этот план добавляет к `docs/roadmap.md` то, чего там нет:
|
||||
> **API** (фаза 9, возможная монетизация) и **PWA** (фаза 10, оффлайн +
|
||||
> установка), плюс шрифты (раздел 4 — частично относится к фазе 8, поэтому
|
||||
> решения-phase 8 здесь дублируются). WASM-ядро, эталоны и CLI — фазы 2–8
|
||||
> `docs/roadmap.md`, они здесь не пересказываются. Оба трека стартуют после
|
||||
> wasm-фаз; PWA не ждёт API и может идти раньше.
|
||||
|
||||
## 0. Решения
|
||||
|
||||
- **Одно ядро — три потребителя.** Rust-крейт `core/` (roadmap фаза 3) даёт:
|
||||
- **Одно ядро — три потребителя.** Rust-крейт `core/` (roadmap фаза 4) даёт:
|
||||
wasm-пакет для сайта (фаза 5), нативный CLI (фаза 6), серверный слой API (фаза
|
||||
9). Единый контракт — JSON-пайплайн `{tool, params}` (заложен в roadmap §0);
|
||||
эталонные файлы и harness (фазы 2, 4, 7) гарантируют одинаковый результат во
|
||||
всех рантаймах.
|
||||
9). Единый контракт — JSON-пайплайн `{tool, params}` (заложен в roadmap §0,
|
||||
реализуется в фазе 11); эталонные файлы и harness (фазы 2, 3, 7) гарантируют
|
||||
одинаковый результат во всех рантаймах.
|
||||
- **API — нативный Rust на сервере, не wasm.** В браузере wasm нужен ради
|
||||
доставки и песочницы; на сервере крейт линкуется напрямую — быстрее и проще.
|
||||
Исключение — edge-воркеры (см. спайк ниже): там исполняется тот же
|
||||
@@ -29,7 +30,7 @@
|
||||
- [ ] **[A1]** Спайк сервера: (а) axum/actix + нативный `core/` на VPS против
|
||||
(б) wasm-артефакт фазы 5 на edge (CF Workers). Сравнить: стоимость, лимиты
|
||||
памяти/времени на больших картинках, сложность деплоя и rate-limiting.
|
||||
Решение зафиксировать здесь.
|
||||
Решение записать в §0 этого файла.
|
||||
- [ ] **[A2]** Контракт: `POST /v1/process` — multipart (image) + JSON-пайплайн
|
||||
→ изображение/архив; лимиты размера, коды ошибок; OpenAPI-спека.
|
||||
- [ ] **[A3]** Ключи и лимиты: Bearer-ключи, free tier (N запросов/мес), rate
|
||||
@@ -63,7 +64,8 @@
|
||||
|
||||
## 3. Порядок и связи
|
||||
|
||||
- WASM-ядро, эталоны, CLI — `docs/roadmap.md` фазы 2–8 (не дублируются).
|
||||
- WASM-ядро, эталоны, CLI — `docs/roadmap.md` фазы 2–8; пайплайн как продуктовая
|
||||
фича — фаза 11 того же документа.
|
||||
- PWA — после S1 `plan-seo.md`; API — после фаз 5–7.
|
||||
- Синергия с дистрибуцией: «works offline, installable» и публичный API —
|
||||
аргументы для Product Hunt / alternative.to / GitHub (plan-seo S4c) и для
|
||||
@@ -71,11 +73,16 @@
|
||||
|
||||
## 4. Шрифты: лицензирование и DOM-free рендер текста
|
||||
|
||||
Текст — единственный класс операций, который roadmap (фаза 8) держит в TS из-за
|
||||
canvas. Для CLI/API его всё равно придётся рендерить в Rust, поэтому решение:
|
||||
**перевести text-инструменты в ядро** (в браузере canvas-рендер остаётся
|
||||
TS-фолбэком для A/B). Два вопроса — легальность шрифтов в дистрибутиве и рендер
|
||||
без DOM.
|
||||
Текст — один из canvas-зависимых классов, которые roadmap (фаза 8) держит в TS
|
||||
(там их четыре: текст, градиенты, штампы, `ctx.filter`); для текста выбран курс
|
||||
на реимплементацию, остальные классы не переносятся. Для CLI/API текст всё равно
|
||||
придётся рендерить в Rust, поэтому решение: **перевести text-инструменты в
|
||||
ядро** (в браузере canvas-рендер остаётся TS-фолбэком для A/B). Два вопроса —
|
||||
легальность шрифтов в дистрибутиве и рендер без DOM.
|
||||
|
||||
**Когда начинать:** блока F1–F4 нет — они не привязаны к фазе roadmap, но F5/F6
|
||||
без них бессмысленны (нечего рендерить). Реализуется всё это в фазе 8, поэтому
|
||||
лицензирование стоит закрыть до неё, а не после.
|
||||
|
||||
### Лицензирование (решить до выбора шрифтов, backlog «Font Style»)
|
||||
|
||||
@@ -90,8 +97,10 @@ TS-фолбэком для A/B). Два вопроса — легальност
|
||||
право класть TTF в дистрибутив CLI/API — у OFL/Apache таких ограничений
|
||||
нет, у прочих «free»-лицензий бывают.
|
||||
- [ ] **[F3]** Паспорт шрифта в `core/fonts/<name>/` (или эквивалент): файл(ы),
|
||||
LICENSE, источник, версия, хеш; CI-проверка «у каждого файла шрифта есть
|
||||
паспорт». Браузер грузит шрифты из бандла, не из ОС и не с
|
||||
LICENSE, источник, версия, хеш; **новый гейт** «у каждого файла шрифта
|
||||
есть паспорт» — его ещё нет, проектируется здесь и добавляется в
|
||||
`pnpm verify` по правилам `docs/quality-gates.md` (решение о fail-режиме —
|
||||
`docs/decisions.md`). Браузер грузит шрифты из бандла, не из ОС и не с
|
||||
`fonts.googleapis.com`-CDN (сторонний запрос = утечка IP пользователя,
|
||||
противоречит «no tracking»), — одинаковый результат у всех пользователей и
|
||||
во всех рантаймах.
|
||||
|
||||
Reference in New Issue
Block a user