diff --git a/History/how-to-convert-doc.md b/History/how-to-convert-doc.md
new file mode 100644
index 0000000..f2fd0ea
--- /dev/null
+++ b/History/how-to-convert-doc.md
@@ -0,0 +1,89 @@
+# Как подключить конвертацию .doc → .docx
+
+Сервис: **https://liberta.containerk8s.dev.nubes.ru**
+
+## API
+
+**Конвертация:**
+```bash
+curl -X POST -F "file=@документ.doc" https://liberta.containerk8s.dev.nubes.ru/convert -o результат.docx
+```
+
+**Проверка:**
+```bash
+curl https://liberta.containerk8s.dev.nubes.ru/health
+# → {"ok":true,"version":"1.0.0"}
+```
+
+## Интеграция в Python (как в Сверке)
+
+### 1. config.py — URL сервиса
+```python
+CONVERT_SERVICE_URL = os.getenv(
+ "CONVERT_SERVICE_URL",
+ "http://containerk8s.df36c8af-1a95-4623-b551-0d37b731ccca.svc.cluster.local:5000"
+)
+```
+
+### 2. upload_bp.py — замена subprocess на HTTP
+```python
+import httpx
+import config
+
+@upload_bp.route("/convert-doc", methods=["POST"])
+def convert_doc():
+ f = request.files.get("files")
+ if not f:
+ return jsonify(ok=False, error="no file"), 400
+ try:
+ resp = httpx.post(
+ config.CONVERT_SERVICE_URL + "/convert",
+ files={"file": (f.filename, f.read(), f.content_type or "application/msword")},
+ timeout=120,
+ )
+ if resp.status_code == 200:
+ return send_file(io.BytesIO(resp.content), mimetype="...docx")
+ return jsonify(ok=False, error=resp.json().get("error")), 500
+ except httpx.TimeoutException:
+ return jsonify(ok=False, error="conversion timeout"), 500
+```
+
+### 3. files.js — фронтенд
+```javascript
+var CONVERT_URL = '/convert-doc';
+
+// Перед uploadFile: если .doc → сначала convertDoc()
+async function convertDoc(file, onProgress) {
+ var fd = new FormData();
+ fd.append('files', file, file.name);
+ var resp = await fetch(CONVERT_URL, { method: 'POST', body: fd });
+ if (!resp.ok) throw new Error('Конвертация: HTTP ' + resp.status);
+ var blob = await resp.blob();
+ return new File([blob], file.name.replace(/\.doc$/i, '.docx'), {
+ type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+ });
+}
+```
+
+## Топология
+
+```
+Браузер → POST /convert-doc (Flask-сервер)
+ ↓ httpx
+ liberta:5000/convert (libreoffice)
+ ↓
+ .docx обратно
+ ↓
+ обычный upload + парсинг
+```
+
+## Деплой liberta
+
+Образ: `gitea.services.ngcloud.ru/nail/contractor-convert:latest`
+Рецепт: `~/nubes/contracts/convert-service/`
+- Dockerfile: python:3.12 + libreoffice + flask
+- Платформа: pythonk8s
+- Порт: 5000
+- Память: 1024 MB
+- CPU: 500m
+- Реплики: 1
diff --git a/History/how-to-logo.md b/History/how-to-logo.md
new file mode 100644
index 0000000..a8b2777
--- /dev/null
+++ b/History/how-to-logo.md
@@ -0,0 +1,39 @@
+# Как подключить лого Nubes в веб-сервис
+
+## Правильный способ (как в Сверке)
+
+Использовать `
` — браузер рендерит как картинку,
+"b" в слове nubes не закрашивается.
+
+## Файлы
+
+- `~/nubes/design/logo.svg` — правильный логотип (CorelDRAW, 5 путей)
+- `~/nubes/design/nubes-favicon.svg` — фавикон U-арка с nubes.ru
+
+## В Python (Flask)
+
+```python
+# Читаем SVG как строку
+_LOGO_SVG = """"""
+
+# Отдаём через эндпоинт
+@app.route("/static/logo.svg")
+def logo():
+ from flask import Response
+ return Response(_LOGO_SVG, mimetype="image/svg+xml")
+```
+
+## В HTML
+
+```html
+
+```
+
+## НЕПРАВИЛЬНО
+
+- ❌ Инлайн `