Образовательный инструмент для локального анализа сырых ДНК-данных. Полностью клиентский — ничего не загружается на сервер.
Privacy-first веб-приложение: загружаете файл с результатами ДНК-теста (23andMe, AncestryDNA, MyHeritage), браузер анализирует его локально в Web Worker и показывает образовательные находки (спорт, метаболизм, фармакогенетика, клинические варианты со строгим режимом). Данные никуда не уходят.
Не является медицинским изделием. Только для образовательных целей.
- 100% клиентская обработка: файл читается через
FileReader, анализируется вWeb Worker— в UI передаются только матчи (ген, категория, текст), не сырые генотипы. - Ноль сторонних ресурсов: нет Google Fonts, CDN, аналитики. JSZip вендорится локально (
app/vendor/). - Работает полностью офлайн после первой загрузки.
- Строгий CSP:
connect-src 'none'— сеть закрыта для страницы. - Никакого localStorage / sessionStorage / IndexedDB с ДНК.
- Кнопка «Сбросить / очистить» завершает Worker и обнуляет DOM.
Детали и ограничения: docs/THREAT-MODEL.md.
# Самый простой способ — Python (есть в macOS/Linux):
cd app/
python3 -m http.server 8080
# Открыть: http://localhost:8080
# Или через Node (если установлен):
npx serve app/Прямое открытие app/index.html через file:// может не запустить Web Worker в Chrome (ограничение CORS для Workers на file://). Используйте локальный HTTP-сервер.
Готовый конфиг nginx с hardened CSP: docs/nginx-dna.ykv.lv.conf.
Скопируйте содержимое app/ в директорию деплоя:
rsync -av app/ user@server:/home/user/deployments/dna-local/Важно: в конфиге отключены access_log (посещения ДНК-инструмента — чувствительные метаданные).
app/
index.html — единственная страница, CSP-совместимый HTML
styles.css — все стили (без внешних шрифтов)
app.js — UI-логика (consent gate, drag-drop, рендеринг)
worker.js — парсинг + анализ (весь доступ к генотипам здесь)
data/
panel.seed.json — панель вариантов v0.1-seed (13 SNP + APOE combo)
vendor/
jszip.3.10.1.min.js — вендоренная локально (без CDN)
data/
panel.seed.json — оригинал панели
docs/
DISCLAIMER.md — текст дисклеймеров (источник для UI)
nginx-dna.ykv.lv.conf — конфиг nginx
THREAT-MODEL.md — модель угроз
| Провайдер | Формат | Колонки |
|---|---|---|
| 23andMe | TSV (с # заголовком) | rsid chr pos genotype |
| AncestryDNA | TSV | rsid chr pos allele1 allele2 |
| MyHeritage | CSV (quoted) | RSID,CHROMOSOME,POSITION,RESULT |
| Все | .zip | Внутри любой из форматов выше |
- 13 SNP панель (спорт, метаболизм, алкоголь, фармакогенетика, клинические) + APOE combo
- Строгий режим для клинических вариантов: без match = "не оценивается" (не "норма")
- Палиндромные SNP: показываются с предупреждением о неоднозначности цепи
- Blocking consent gate с текстом из DISCLAIMER.md
- Persistent disclaimer chip для каждой клинической строки
- Y-гаплогруппы и мтДНК гаплогруппы
- Расширенная панель ~150 SNP
- Подмножество ClinVar патогенных вариантов
- Нормализация цепи по провайдеру (важно для палиндромных)
- Сравнение с партнёром
MIT. Не является медицинским изделием.