diff --git a/CHANGELOG.md b/CHANGELOG.md
index 01ad40f..9f86caa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,28 @@ All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and the project uses Semantic Versioning.
+## [0.2.0] - 2026-04-18
+
+### Changed
+
+- **BREAKING**: project fully rewritten in Go (goldmark + templUI); Python implementation moved to `archive/`.
+- **BREAKING**: heading anchors now use ASCII transliteration (`## Установка` → `id="ustanovka"`).
+- **BREAKING**: heading HTML markup simplified; `
` is no longer emitted.
+- Removed the GitHub Markdown API dependency; conversion now works fully offline.
+- Replaced the two-process runtime (uvicorn + Streamlit) with a single binary.
+- Preview and download links are now one-shot, UUID-backed, and expire after one hour.
+
+### Added
+
+- Syntax highlighting via chroma with inline styles for self-contained HTML output.
+- Footnote support in addition to baseline GFM features.
+- Cross-platform release binaries for `linux/amd64`, `linux/arm64`, and `darwin/arm64`.
+
+### Removed
+
+- `READY_CHECK_GITHUB` environment variable.
+- Streamlit UI on dedicated port `:8501`.
+
## [0.1.2] - 2026-04-18
### Added
diff --git a/README.md b/README.md
index 47ae0b0..f4da122 100644
--- a/README.md
+++ b/README.md
@@ -1,81 +1,90 @@
# md-to-html
-Сервис конвертации Markdown в самодостаточный HTML (через GitHub API).
+Сервис конвертации Markdown в самодостаточный HTML. Полностью офлайн, без обращений к внешним API.
-Текущая версия: `0.1.2`
+Текущая версия: `0.2.0` (Go + goldmark + templUI)
-Часто нужен адекватно (минималистично) выглядящий HTML из Markdown. HTML получем через открытый API GitHub, а стили просто захардкожены в шаблоне.
+## Возможности
-
+- GFM + footnote + emoji + подсветка кода через chroma.
+- Якоря в заголовках с ASCII-транслитом: `## Установка` → `#ustanovka`.
+- CLI: `md-to-html cli file.md`.
+- HTTP API: `POST /convert` совместим с `v0.1.x`.
+- Web UI на `http://localhost:8080/` с inline-preview в sandbox iframe и одноразовыми ссылками на preview/download.
-GITHUB_TOKEN не нужен, если не требуется массовая (поточная) конвертация. Но если нужно, то его можно передать через переменную окружения при запуске.
-
-Есть два интерфейса:
-
-- FastAPI на `http://localhost:8000`
-- Streamlit UI на `http://localhost:8501` с двумя режимами ввода: загрузка `.md` файла или вставка Markdown-текста из буфера обмена
-
-## Локальный запуск
+## Запуск через Docker
```bash
-uv venv .venv
-source .venv/bin/activate
-uv pip install -r requirements.txt
-uvicorn app.api:app --reload
-streamlit run app/streamlit_app.py
+docker run --rm -p 8080:8080 ghcr.io/fserg/md-to-html:latest
```
-CLI сохранился:
+## Локальная разработка
+
+Требования: Go 1.23+, `templ` CLI, Node.js для dev-режима Tailwind или standalone `tailwindcss`.
```bash
-python3 md_to_html.py /path/to/file.md
+go install github.com/a-h/templ/cmd/templ@v0.3.1001
+make tailwind
+make build
+./bin/md-to-html serve
```
-## Docker
+Для live-reload:
```bash
-docker build -t md-to-html .
-docker run --rm -p 8000:8000 -p 8501:8501 -e GITHUB_TOKEN=your_token md-to-html
+make dev
```
-## API
+## CLI
+
+```bash
+md-to-html cli file.md
+md-to-html cli file.md -o out.html
+md-to-html cli --stdin < file.md
+md-to-html cli - --title "Заголовок"
+```
+
+## HTTP API
`POST /convert`
```bash
-curl -X POST http://localhost:8000/convert \
- -H 'Content-Type: application/json' \
- -d '{"markdown":"# Hello"}'
+curl -X POST http://localhost:8080/convert \
+ -H 'content-type: application/json' \
+ -d '{"markdown":"# Привет"}'
```
-`GET /health`
+Прочие эндпоинты:
-```bash
-curl http://localhost:8000/health
-```
+- `GET /` — веб-интерфейс.
+- `GET /health`, `GET /version`, `GET /ready` — служебные эндпоинты.
+- `GET /preview/{id}`, `GET /download/{id}` — одноразовые ссылки из веб-формы.
-`GET /version`
+## Env-переменные
-```bash
-curl http://localhost:8000/version
-```
+| Переменная | По умолчанию | Назначение |
+|----------------------|--------------|------------|
+| `ADDR` | `:8080` | Адрес прослушивания |
+| `MAX_MARKDOWN_BYTES` | `1048576` | Лимит размера markdown |
+| `MAX_REQUEST_BYTES` | `1200000` | Лимит размера HTTP-запроса |
+| `PREVIEW_TTL` | `1h` | TTL одноразовых ссылок |
+
+## Миграция с v0.1.x
+
+- API-контракт `POST /convert` не изменился, существующие клиенты продолжают работать.
+- Якоря заголовков теперь используют ASCII-транслит. Ссылки вида `#установка` нужно заменить на `#ustanovka`.
+- HTML-разметка упрощена: больше нет `
`, поэтому ручные CSS-оверрайды нужно пересмотреть.
+- Переменная окружения `READY_CHECK_GITHUB` удалена: сервис больше не зависит от внешнего Markdown API.
+- UI работает на том же порту `8080`, отдельный UI-порт `:8501` больше не нужен.
+
+Python-реализация сохранена в `archive/`.
## Релизы
-Проект использует Semantic Versioning. Текущая версия хранится в файле `VERSION`, история изменений ведётся в `CHANGELOG.md`.
-
-Чтобы выпустить релиз:
-
```bash
-git add VERSION CHANGELOG.md
-git commit -m "Release v0.1.2"
-git tag v0.1.2
+git commit -am "Release vX.Y.Z"
+git tag vX.Y.Z
git push origin main --tags
-gh release create v0.1.2 --notes-file CHANGELOG.md
```
-После публикации релиза GitHub Actions автоматически собирает Docker-образ и публикует его в GitHub Container Registry:
-
-```bash
-docker pull ghcr.io/fserg/md-to-html:v0.1.2
-```
+GitHub Actions публикует Docker-образ для `linux/amd64` и `linux/arm64` в GHCR и прикладывает бинарники для `linux/amd64`, `linux/arm64` и `darwin/arm64` к GitHub Release.
diff --git a/VERSION b/VERSION
index d917d3e..0ea3a94 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.2
+0.2.0