AspansQulyp/notes/DECISIONS.md
deni.reyton 55c98747e3
Some checks failed
CI / windows (push) Waiting to run
CI / linux (push) Failing after 1m5s
Строгий дизайн: графитовая палитра и векторные иконки
- Одна приглушённая акцентная краска, скругления 4–6 px, плоские панели без теней
- Свой набор векторных иконок вместо эмодзи-глифов (src/icons.rs)
- Кнопки с иконкой, состояниями наведения и кольцом фокуса
- Нейтральные монограммы вместо цветных аватаров

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:24:47 +05:00

2.5 KiB
Raw Blame History

Решения

egui/eframe вместо Tauri/Qt. Чистый Rust, один бинарник, без WebView и Node; одинаково на Windows и Linux. Рендер glow (OpenGL) — легче wgpu и быстрее собирается.

Свой формат, а не .kdbx. KDBX сложен (XML, много версий KDF/шифров). Свой формат — 60 байт заголовка

  • зашифрованный JSON, легко проверить. Импорт KDBX — отдельной задачей (см. PLAN).

Argon2id 64 МиБ / 3 прохода / p=4. Рекомендация OWASP-уровня, ~0.5 с на разблокировку. Параметры пишутся в заголовок — можно усилить позже без смены формата.

XChaCha20-Poly1305. 24-байтный случайный nonce на каждое сохранение — без риска повтора. Весь заголовок — AAD, подмена параметров ломает расшифровку.

Синхронизация = файл в облачной папке. Никакого своего сервера. Перед записью файл на диске сливается с памятью; раз в 2 с проверяется внешнее изменение. Слияние — по записям, свежая побеждает, старый пароль уходит в историю, удаления — через надгробия.

Автосохранение после каждого изменения. Нет кнопки «Сохранить» и риска забыть. Старая версия → .qulyp.bak.

RustCrypto старых стабильных версий (argon2 0.5, chacha20poly1305 0.10, hmac 0.12): новые мажорные версии меняют API, а эти широко проверены.

Язык интерфейса — русский. Локализация — если понадобится.

Строгий визуальный стиль. Нейтрали делают работу, акцент (стальной синий) — только главная кнопка, выделение, фокус и ссылки. Иконки рисуются вектором (src/icons.rs, сетка 16×16, одна толщина линии) — шрифтовые эмодзи на разных системах выглядят по-разному.