daily update 2026-03-31

This commit is contained in:
Агальцов Антон
2026-04-01 00:00:56 +03:00
parent b96c893f7d
commit c2cc439fc5
107 changed files with 3714 additions and 65 deletions
+50
View File
@@ -0,0 +1,50 @@
---
title: "31 марта 2026"
date: 2026-03-31
tags: ["system-utils", "opencode", "leadera", "gantt", "canvas", "github", "roadmap"]
---
## Timeline
- **Утро** — Обсуждали аналоги htop: порекомендовал btm, btop, glances. Создан конфиг `~/.config/bottom/bottom.toml`
- **День** — Разбирались со скиллами OpenCode: как работают, автоматический подбор по description
- **День** — Созданы скиллы для Leadera проектов (Go: build-and-fix, restart-api; Angular: build-and-fix)
- **День** — Обсудили миграцию Ганта с DOM на Canvas 2D (Konva.js) — real-time коллаборация, экспорт PDF/PNG, 500+ задач
- **Вечер** — Установлен gh CLI, авторизован как agaltsovav
- **Вечер** — Созданы GitHub Projects: Leadera Roadmap (21 задача, P0P3), agaltsovav.ru Roadmap (7 задач)
## Системные утилиты
- **bottom** (btm) — выбранный мониторинг, конфиг в `~/.config/bottom/bottom.toml`
- Альтернативы: btop, glances
## OpenCode Skills
Созданы скиллы:
- `app-leadera-api/.opencode/skills/build-and-fix/` — сборка Go проекта + автофикс ошибок (до 10 итераций)
- `app-leadera-api/.opencode/skills/restart-api/` — swagger генерация + pm2 restart
- `app-leadera-fe/.opencode/skills/build-and-fix/` — сборка Angular + автофикс
## Gantt Canvas миграция
- Переход с DOM на Canvas 2D через **Konva.js**
- Цели: real-time коллаборация, экспорт PDF/PNG, 500+ задач
- Промт: `GANTT_CANVAS_MIGRATION_PROMPT.md` в app-leadera-fe
## GitHub
- CLI: `gh` авторизован (agaltsovav)
- Репо: app-leadera-fe, app-leadera-api, agaltsovav.ru
- Старые: leadera-fe/leadera-api (на VPS, leadera.ru)
- modece.ru — заброшен, планируется возвращение
## GitHub Projects — Roadmaps
### Leadera Roadmap (project #2) — 21 задача
- **P0:** JWT secret, CORS, bcrypt, ContextRole fallback, RegisterProtectedRoutes
- **P1:** Rate limiting, editor role check, MembersModal rewrite
- **P2:** HttpOnly cookies, CSRF, CSP, password policy, audit log, health-check, CI/CD, Canvas миграция, DnD
- **P3:** Code cleanup, тесты, email verification, поиск
### agaltsovav.ru Roadmap (project #1) — 7 задач
- Редизайн, мобильная версия, мультиязычность, блог, CI/CD, тёмная тема, форма обратной связи
+6
View File
@@ -0,0 +1,6 @@
---
title: "Личный сайт (agaltsovav.ru)"
date: 2026-03-31
tags: ["personal-site", "hugo", "audit"]
weight: 90
---
@@ -0,0 +1,24 @@
---
title: "Бинарный файл в репозитории"
date: 2026-03-31
tags: ["audit", "personal-site"]
---
## Проблема
В корне репозитория лежат два файла, которые не должны быть в git:
- **`Шаблоны для сайта.key`** — Apple Keynote файл (бинарный)
- **`logo.psd`** — Photoshop файл (бинарный)
### Что не так
- Увеличивают размер репозитория
- Git неэффективно хранит бинарные файлы (каждая версия — полностью)
- `.key` файлы могут содержать конфиденциальные данные шаблонов
### Рекомендация
1. Перенести в отдельное хранилище (Google Drive, облако)
2. Удалить из git-истории через `git filter-repo`
3. Добавить в `.gitignore`: `*.key`, `*.psd`, `*.sketch`
@@ -0,0 +1,21 @@
---
title: "Copyright без 2026 года"
date: 2026-03-31
tags: ["audit", "personal-site"]
---
## Проблема
В `params.toml`:
```
copyRight = "Copyright (c) 2020-2025 Антон Агальцов"
```
Сейчас 2026 год — нужно обновить.
### Рекомендация
Обновить на `2020-2026`. Или сделать динамическим через Hugo template:
```
Copyright (c) 2020-{{ now.Year }} Антон Агальцов
```
+24
View File
@@ -0,0 +1,24 @@
---
title: "Digest не обновлялся с февраля 2025"
date: 2026-03-31
tags: ["audit", "personal-site"]
---
## Проблема
Последний дайджест — **февраль 2025**. С тех пор 12+ месяцев без новых выпусков.
### Что есть
- 27 файлов дайджестов (январь 2023 — февраль 2025)
- Автоматизация через `digest.js` — скрипт для генерации
- Но скрипт не запускается автоматически
### Риск
Low — контент устаревает, SEO-позиции падают для страниц дайджестов.
### Рекомендация
1. Настроить cron/CI для ежемесячной генерации дайджеста
2. Или интегрировать с OpenClaw — авто-сборка дайджеста на основе новых публикаций
@@ -0,0 +1,22 @@
---
title: "Устаревший Node.js 16 в Netlify"
date: 2026-03-31
tags: ["audit", "personal-site", "infrastructure"]
severity: high
status: open
---
# Устаревший Node.js 16 в Netlify
**Файл:** `netlify.toml:5`
```
NODE_VERSION = "16.16.0"
```
Node.js 16 вышел из поддержки (EOL) в сентябре 2023. Сборка на Netlify может начать падать или работать некорректно.
**Рекомендация:** Обновить до Node.js 20 LTS:
```toml
NODE_VERSION = "20"
```
+17
View File
@@ -0,0 +1,17 @@
---
title: "Yandex Metrika отключена"
date: 2026-03-31
tags: ["audit", "personal-site"]
---
## Проблема
В `params.toml`: `yandexMetrika = false`
Аналитика с сайта не собирается. Непонятно, есть ли вообще посетители и какие страницы популярны.
### Рекомендация
1. Включить Yandex Metrika или перейти на **Plausible** / **Umami** (privacy-friendly)
2. Если сайт не нуждается в аналитике — оставить как есть
3. Альтернатива: Netlify Analytics (уже встроен в хостинг)
+23
View File
@@ -0,0 +1,23 @@
---
title: "Отсутствуют node_modules — нужна установка"
date: 2026-03-31
tags: ["audit", "personal-site"]
---
## Проблема
`node_modules/` отсутствует — проект нельзя собрать без `npm install`.
### Риск
Low — стандартная ситуация. Но:
- `package-lock.json` привязан к Node 16, а на Mac Studio текущий Node v24
- Могут быть конфликты зависимостей (canvas, babel, postcss)
- Hugo 0.148.2 ставится через `hugo-installer` в npm — может не совпасть с глобальным Hugo
### Рекомендация
1. Убедиться что `npm install` проходит без ошибок на текущем Node
2. Если нет — обновить зависимости или использовать nvm для Node 16
3. Рассмотреть переход на глобальный Hugo вместо `exec-bin`
@@ -0,0 +1,24 @@
---
title: "Hugo Doks 0.5 — сильно устарел"
date: 2026-03-31
tags: ["audit", "personal-site"]
---
## Проблема
Проект использует тему **Hyas/Doks v0.5.0** (package.json). Актуальная версия Doks — **1.x** с полной переработкой архитектуры.
### Что не так
- Doks 0.5 использует устаревший Bootstrap 5.2.0-beta1
- Hugo 0.148.2 в зависимостях — новый, но интеграция с темой старая
- Конфигурация через `theme.toml` — в новых версиях перешли на другой формат
- `exec-bin` для вызова Hugo — устаревший подход, текущие версии Hugo ставятся глобально
### Риск
Medium — работает, но миграция на Doks 1.x потребует значительного рефакторинга layout-ов и конфигурации. Чем дольше откладывать — тем сложнее.
### Рекомендация
Запланировать миграцию на Doks 1.x или перейти на чистый Hugo + Bootstrap без зависимости от темы-фреймворка.
@@ -0,0 +1,26 @@
---
title: "Twitter handle не соответствует имени"
date: 2026-03-31
tags: ["audit", "personal-site"]
---
## Проблема
В `params.toml` указан Twitter: `@AntonTotoshkin`
Но владелец сайта — **Антон Агальцов**. Ники не совпадают.
### Два варианта
1. Это твой старый/другой аккаунт — тогда ок, но стоит указать актуальный
2. Это чужой аккаунт — тогда нужно убрать или исправить
### Затронутые места
- `twitterSite = "@AntonTotoshkin"`
- `schemaAuthorTwitter = "https://twitter.com/AntonTotoshkin"`
- `schemaTwitter = "https://twitter.com/AntonTotoshkin"`
### Рекомендация
Указать актуальный Twitter/X или убрать, если соцсеть не используется.
+4
View File
@@ -38,6 +38,10 @@ canonifyURLs = false
name = "Креды"
url = "/creds/"
weight = 5
[[menu.main]]
name = "Личный сайт"
url = "/personal-site/"
weight = 6
[outputs]
home = ["HTML", "JSON"]
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../personal-site/">Личный сайт</a></li>
</ul>
</div>
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+33 -1
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -105,6 +109,22 @@
@@ -129,10 +149,22 @@
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/vikunja/">vikunja</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/system-utils/">system-utils</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/leadera/">leadera</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/gantt/">gantt</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/canvas/">canvas</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/github/">github</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/roadmap/">roadmap</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/vikunja/">vikunja</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/tasktracker/">tasktracker</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/ollama/">ollama</a></li>
+33 -1
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -105,6 +109,22 @@
@@ -129,10 +149,22 @@
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/vikunja/">vikunja</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/system-utils/">system-utils</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/leadera/">leadera</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/gantt/">gantt</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/canvas/">canvas</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/github/">github</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/roadmap/">roadmap</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/vikunja/">vikunja</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/tasktracker/">tasktracker</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/ollama/">ollama</a></li>
+301
View File
@@ -0,0 +1,301 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>31 марта 2026 — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Все записи</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/system-utils/">system-utils</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/leadera/">leadera</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/gantt/">gantt</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/canvas/">canvas</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/github/">github</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/roadmap/">roadmap</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/vikunja/">vikunja</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/tasktracker/">tasktracker</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/ollama/">ollama</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/qwen/">qwen</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/mtproxy/">mtproxy</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/infrastructure/">infrastructure</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docker/">docker</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/eversolo/">eversolo</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/hugo/">hugo</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docs/">docs</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/identity/">identity</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/companion/">companion</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>31 марта 2026</h1>
<p class="diary-date">31.03.2026</p>
<h2 id="timeline">Timeline</h2>
<ul>
<li><strong>Утро</strong> — Обсуждали аналоги htop: порекомендовал btm, btop, glances. Создан конфиг <code>~/.config/bottom/bottom.toml</code></li>
<li><strong>День</strong> — Разбирались со скиллами OpenCode: как работают, автоматический подбор по description</li>
<li><strong>День</strong> — Созданы скиллы для Leadera проектов (Go: build-and-fix, restart-api; Angular: build-and-fix)</li>
<li><strong>День</strong> — Обсудили миграцию Ганта с DOM на Canvas 2D (Konva.js) — real-time коллаборация, экспорт PDF/PNG, 500+ задач</li>
<li><strong>Вечер</strong> — Установлен gh CLI, авторизован как agaltsovav</li>
<li><strong>Вечер</strong> — Созданы GitHub Projects: Leadera Roadmap (21 задача, P0P3), agaltsovav.ru Roadmap (7 задач)</li>
</ul>
<h2 id="системные-утилиты">Системные утилиты</h2>
<ul>
<li><strong>bottom</strong> (btm) — выбранный мониторинг, конфиг в <code>~/.config/bottom/bottom.toml</code></li>
<li>Альтернативы: btop, glances</li>
</ul>
<h2 id="opencode-skills">OpenCode Skills</h2>
<p>Созданы скиллы:</p>
<ul>
<li><code>app-leadera-api/.opencode/skills/build-and-fix/</code> — сборка Go проекта + автофикс ошибок (до 10 итераций)</li>
<li><code>app-leadera-api/.opencode/skills/restart-api/</code> — swagger генерация + pm2 restart</li>
<li><code>app-leadera-fe/.opencode/skills/build-and-fix/</code> — сборка Angular + автофикс</li>
</ul>
<h2 id="gantt-canvas-миграция">Gantt Canvas миграция</h2>
<ul>
<li>Переход с DOM на Canvas 2D через <strong>Konva.js</strong></li>
<li>Цели: real-time коллаборация, экспорт PDF/PNG, 500+ задач</li>
<li>Промт: <code>GANTT_CANVAS_MIGRATION_PROMPT.md</code> в app-leadera-fe</li>
</ul>
<h2 id="github">GitHub</h2>
<ul>
<li>CLI: <code>gh</code> авторизован (agaltsovav)</li>
<li>Репо: app-leadera-fe, app-leadera-api, agaltsovav.ru</li>
<li>Старые: leadera-fe/leadera-api (на VPS, leadera.ru)</li>
<li>modece.ru — заброшен, планируется возвращение</li>
</ul>
<h2 id="github-projects--roadmaps">GitHub Projects — Roadmaps</h2>
<h3 id="leadera-roadmap-project-2--21-задача">Leadera Roadmap (project #2) — 21 задача</h3>
<ul>
<li><strong>P0:</strong> JWT secret, CORS, bcrypt, ContextRole fallback, RegisterProtectedRoutes</li>
<li><strong>P1:</strong> Rate limiting, editor role check, MembersModal rewrite</li>
<li><strong>P2:</strong> HttpOnly cookies, CSRF, CSP, password policy, audit log, health-check, CI/CD, Canvas миграция, DnD</li>
<li><strong>P3:</strong> Code cleanup, тесты, email verification, поиск</li>
</ul>
<h3 id="agaltsovavru-roadmap-project-1--7-задач">agaltsovav.ru Roadmap (project #1) — 7 задач</h3>
<ul>
<li>Редизайн, мобильная версия, мультиязычность, блог, CI/CD, тёмная тема, форма обратной связи</li>
</ul>
<div class="tags">
<a href="../../tags/system-utils/" class="tag">system-utils</a>
<a href="../../tags/opencode/" class="tag">opencode</a>
<a href="../../tags/leadera/" class="tag">leadera</a>
<a href="../../tags/gantt/" class="tag">gantt</a>
<a href="../../tags/canvas/" class="tag">canvas</a>
<a href="../../tags/github/" class="tag">github</a>
<a href="../../tags/roadmap/" class="tag">roadmap</a>
</div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+57 -1
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -105,6 +109,22 @@
@@ -129,10 +149,22 @@
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../tags/vikunja/">vikunja</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/system-utils/">system-utils</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/leadera/">leadera</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/gantt/">gantt</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/canvas/">canvas</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/github/">github</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/roadmap/">roadmap</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/vikunja/">vikunja</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/tasktracker/">tasktracker</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/ollama/">ollama</a></li>
@@ -176,6 +208,30 @@
<div class="diary-timeline">
<div class="diary-entry">
<div class="diary-date">31.03.2026</div>
<h3><a href="../diary/2026-03-31/">31 марта 2026</a></h3>
<div class="tags">
<a href="../tags/system-utils/" class="tag">system-utils</a>
<a href="../tags/opencode/" class="tag">opencode</a>
<a href="../tags/leadera/" class="tag">leadera</a>
<a href="../tags/gantt/" class="tag">gantt</a>
<a href="../tags/canvas/" class="tag">canvas</a>
<a href="../tags/github/" class="tag">github</a>
<a href="../tags/roadmap/" class="tag">roadmap</a>
</div>
</div>
<div class="diary-entry">
<div class="diary-date">30.03.2026</div>
<h3><a href="../diary/2026-03-30/">30 марта 2026</a></h3>
File diff suppressed because one or more lines are too long
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+6
View File
@@ -47,6 +47,10 @@
<a class="nav-link" href="./creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -95,6 +99,8 @@
<li class="nav-item"><a class="nav-link" href="./creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="./personal-site/">Личный сайт</a></li>
</ul>
</div>
+1 -1
View File
File diff suppressed because one or more lines are too long
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -0,0 +1,158 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Бинарный файл в репозитории — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Бинарный файл в репозитории</h1>
<h2 id="проблема">Проблема</h2>
<p>В корне репозитория лежат два файла, которые не должны быть в git:</p>
<ul>
<li><strong><code>Шаблоны для сайта.key</code></strong> — Apple Keynote файл (бинарный)</li>
<li><strong><code>logo.psd</code></strong> — Photoshop файл (бинарный)</li>
</ul>
<h3 id="что-не-так">Что не так</h3>
<ul>
<li>Увеличивают размер репозитория</li>
<li>Git неэффективно хранит бинарные файлы (каждая версия — полностью)</li>
<li><code>.key</code> файлы могут содержать конфиденциальные данные шаблонов</li>
</ul>
<h3 id="рекомендация">Рекомендация</h3>
<ol>
<li>Перенести в отдельное хранилище (Google Drive, облако)</li>
<li>Удалить из git-истории через <code>git filter-repo</code></li>
<li>Добавить в <code>.gitignore</code>: <code>*.key</code>, <code>*.psd</code>, <code>*.sketch</code></li>
</ol>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
@@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Copyright без 2026 года — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Copyright без 2026 года</h1>
<h2 id="проблема">Проблема</h2>
<p>В <code>params.toml</code>:</p>
<pre tabindex="0"><code>copyRight = &#34;Copyright (c) 2020-2025 Антон Агальцов&#34;
</code></pre><p>Сейчас 2026 год — нужно обновить.</p>
<h3 id="рекомендация">Рекомендация</h3>
<p>Обновить на <code>2020-2026</code>. Или сделать динамическим через Hugo template:</p>
<pre tabindex="0"><code>Copyright (c) 2020-{{ now.Year }} Антон Агальцов
</code></pre>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
@@ -0,0 +1,155 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Digest не обновлялся с февраля 2025 — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Digest не обновлялся с февраля 2025</h1>
<h2 id="проблема">Проблема</h2>
<p>Последний дайджест — <strong>февраль 2025</strong>. С тех пор 12+ месяцев без новых выпусков.</p>
<h3 id="что-есть">Что есть</h3>
<ul>
<li>27 файлов дайджестов (январь 2023 — февраль 2025)</li>
<li>Автоматизация через <code>digest.js</code> — скрипт для генерации</li>
<li>Но скрипт не запускается автоматически</li>
</ul>
<h3 id="риск">Риск</h3>
<p>Low — контент устаревает, SEO-позиции падают для страниц дайджестов.</p>
<h3 id="рекомендация">Рекомендация</h3>
<ol>
<li>Настроить cron/CI для ежемесячной генерации дайджеста</li>
<li>Или интегрировать с OpenClaw — авто-сборка дайджеста на основе новых публикаций</li>
</ol>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+160
View File
@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Личный сайт (agaltsovav.ru) — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Личный сайт (agaltsovav.ru)</h1>
<ul>
<li><a href="../personal-site/copyright-outdated/">Copyright без 2026 года</a></li>
<li><a href="../personal-site/digest-stale/">Digest не обновлялся с февраля 2025</a></li>
<li><a href="../personal-site/outdated-doks-theme/">Hugo Doks 0.5 — сильно устарел</a></li>
<li><a href="../personal-site/twitter-handle-mismatch/">Twitter handle не соответствует имени</a></li>
<li><a href="../personal-site/no-analytics/">Yandex Metrika отключена</a></li>
<li><a href="../personal-site/binary-files-in-repo/">Бинарный файл в репозитории</a></li>
<li><a href="../personal-site/no-node-modules/">Отсутствуют node_modules — нужна установка</a></li>
<li><a href="../personal-site/netlify-node-version/">Устаревший Node.js 16 в Netlify</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Устаревший Node.js 16 в Netlify — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Устаревший Node.js 16 в Netlify</h1>
<h1 id="устаревший-nodejs-16-в-netlify">Устаревший Node.js 16 в Netlify</h1>
<p><strong>Файл:</strong> <code>netlify.toml:5</code></p>
<pre tabindex="0"><code>NODE_VERSION = &#34;16.16.0&#34;
</code></pre><p>Node.js 16 вышел из поддержки (EOL) в сентябре 2023. Сборка на Netlify может начать падать или работать некорректно.</p>
<p><strong>Рекомендация:</strong> Обновить до Node.js 20 LTS:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span><span style="color:#a6e22e">NODE_VERSION</span> = <span style="color:#e6db74">&#34;20&#34;</span>
</span></span></code></pre></div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
@@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Yandex Metrika отключена — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Yandex Metrika отключена</h1>
<h2 id="проблема">Проблема</h2>
<p>В <code>params.toml</code>: <code>yandexMetrika = false</code></p>
<p>Аналитика с сайта не собирается. Непонятно, есть ли вообще посетители и какие страницы популярны.</p>
<h3 id="рекомендация">Рекомендация</h3>
<ol>
<li>Включить Yandex Metrika или перейти на <strong>Plausible</strong> / <strong>Umami</strong> (privacy-friendly)</li>
<li>Если сайт не нуждается в аналитике — оставить как есть</li>
<li>Альтернатива: Netlify Analytics (уже встроен в хостинг)</li>
</ol>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
@@ -0,0 +1,155 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Отсутствуют node_modules — нужна установка — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Отсутствуют node_modules — нужна установка</h1>
<h2 id="проблема">Проблема</h2>
<p><code>node_modules/</code> отсутствует — проект нельзя собрать без <code>npm install</code>.</p>
<h3 id="риск">Риск</h3>
<p>Low — стандартная ситуация. Но:</p>
<ul>
<li><code>package-lock.json</code> привязан к Node 16, а на Mac Studio текущий Node v24</li>
<li>Могут быть конфликты зависимостей (canvas, babel, postcss)</li>
<li>Hugo 0.148.2 ставится через <code>hugo-installer</code> в npm — может не совпасть с глобальным Hugo</li>
</ul>
<h3 id="рекомендация">Рекомендация</h3>
<ol>
<li>Убедиться что <code>npm install</code> проходит без ошибок на текущем Node</li>
<li>Если нет — обновить зависимости или использовать nvm для Node 16</li>
<li>Рассмотреть переход на глобальный Hugo вместо <code>exec-bin</code></li>
</ol>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
@@ -0,0 +1,153 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hugo Doks 0.5 — сильно устарел — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Hugo Doks 0.5 — сильно устарел</h1>
<h2 id="проблема">Проблема</h2>
<p>Проект использует тему <strong>Hyas/Doks v0.5.0</strong> (package.json). Актуальная версия Doks — <strong>1.x</strong> с полной переработкой архитектуры.</p>
<h3 id="что-не-так">Что не так</h3>
<ul>
<li>Doks 0.5 использует устаревший Bootstrap 5.2.0-beta1</li>
<li>Hugo 0.148.2 в зависимостях — новый, но интеграция с темой старая</li>
<li>Конфигурация через <code>theme.toml</code> — в новых версиях перешли на другой формат</li>
<li><code>exec-bin</code> для вызова Hugo — устаревший подход, текущие версии Hugo ставятся глобально</li>
</ul>
<h3 id="риск">Риск</h3>
<p>Medium — работает, но миграция на Doks 1.x потребует значительного рефакторинга layout-ов и конфигурации. Чем дольше откладывать — тем сложнее.</p>
<h3 id="рекомендация">Рекомендация</h3>
<p>Запланировать миграцию на Doks 1.x или перейти на чистый Hugo + Bootstrap без зависимости от темы-фреймворка.</p>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
@@ -0,0 +1,156 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Twitter handle не соответствует имени — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Twitter handle не соответствует имени</h1>
<h2 id="проблема">Проблема</h2>
<p>В <code>params.toml</code> указан Twitter: <code>@AntonTotoshkin</code></p>
<p>Но владелец сайта — <strong>Антон Агальцов</strong>. Ники не совпадают.</p>
<h3 id="два-варианта">Два варианта</h3>
<ol>
<li>Это твой старый/другой аккаунт — тогда ок, но стоит указать актуальный</li>
<li>Это чужой аккаунт — тогда нужно убрать или исправить</li>
</ol>
<h3 id="затронутые-места">Затронутые места</h3>
<ul>
<li><code>twitterSite = &quot;@AntonTotoshkin&quot;</code></li>
<li><code>schemaAuthorTwitter = &quot;https://twitter.com/AntonTotoshkin&quot;</code></li>
<li><code>schemaTwitter = &quot;https://twitter.com/AntonTotoshkin&quot;</code></li>
</ul>
<h3 id="рекомендация">Рекомендация</h3>
<p>Указать актуальный Twitter/X или убрать, если соцсеть не используется.</p>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+4
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
+72 -24
View File
@@ -2,32 +2,89 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>/personal-site/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/guides/leadera-audit/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/diary/2026-03-31/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/audit/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/canvas/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/personal-site/copyright-outdated/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/diary/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/personal-site/digest-stale/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/gantt/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/github/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/hugo/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/personal-site/outdated-doks-theme/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/infrastructure/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/leadera/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/opencode/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/personal-site/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/roadmap/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/system-utils/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/personal-site/twitter-handle-mismatch/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/personal-site/no-analytics/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/personal-site/binary-files-in-repo/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/personal-site/no-node-modules/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/personal-site/netlify-node-version/</loc>
<lastmod>2026-03-31T00:00:00+00:00</lastmod>
</url><url>
<loc>/diary/2026-03-30/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/architecture/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/audit/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/diary/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/guides/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/infrastructure/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/leadera/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/mtproxy/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
@@ -40,9 +97,6 @@
</url><url>
<loc>/tags/security/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/tasktracker/</loc>
<lastmod>2026-03-30T00:00:00+00:00</lastmod>
@@ -100,9 +154,6 @@
</url><url>
<loc>/tags/go/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/hugo/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/identity/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
@@ -127,9 +178,6 @@
</url><url>
<loc>/tags/openclaw/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/opencode/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/plans/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+24
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
@@ -109,8 +115,26 @@
<ul>
<li><a href="../../personal-site/">Личный сайт (agaltsovav.ru)</a></li>
<li><a href="../../guides/leadera-audit/">Аудит Leadera — полный отчёт</a></li>
<li><a href="../../personal-site/copyright-outdated/">Copyright без 2026 года</a></li>
<li><a href="../../personal-site/digest-stale/">Digest не обновлялся с февраля 2025</a></li>
<li><a href="../../personal-site/outdated-doks-theme/">Hugo Doks 0.5 — сильно устарел</a></li>
<li><a href="../../personal-site/twitter-handle-mismatch/">Twitter handle не соответствует имени</a></li>
<li><a href="../../personal-site/no-analytics/">Yandex Metrika отключена</a></li>
<li><a href="../../personal-site/binary-files-in-repo/">Бинарный файл в репозитории</a></li>
<li><a href="../../personal-site/no-node-modules/">Отсутствуют node_modules — нужна установка</a></li>
<li><a href="../../personal-site/netlify-node-version/">Устаревший Node.js 16 в Netlify</a></li>
</ul>
</div>
+64 -1
View File
@@ -6,8 +6,15 @@
<description>Recent content in Audit on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Mon, 30 Mar 2026 00:00:00 +0000</lastBuildDate>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/audit/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Личный сайт (agaltsovav.ru)</title>
<link>/personal-site/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/</guid>
<description></description>
</item>
<item>
<title>Аудит Leadera — полный отчёт</title>
<link>/guides/leadera-audit/</link>
@@ -15,5 +22,61 @@
<guid>/guides/leadera-audit/</guid>
<description>&lt;h1 id=&#34;аудит-проекта-leadera&#34;&gt;Аудит проекта Leadera&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Дата:&lt;/strong&gt; 30.03.2026&lt;br&gt;&#xA;&lt;strong&gt;Версия:&lt;/strong&gt; pre-production, миграции 15&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-обзор-проекта&#34;&gt;1. Обзор проекта&lt;/h2&gt;&#xA;&lt;p&gt;Leadera — SaaS-система управления IT-ландшафтом с диаграммами Ганта.&lt;/p&gt;&#xA;&lt;h3 id=&#34;стек&#34;&gt;Стек&lt;/h3&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Компонент&lt;/th&gt;&#xA; &lt;th&gt;Технологии&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Backend&lt;/td&gt;&#xA; &lt;td&gt;Go 1.21+, Gin, PostgreSQL 16, pgx/v5 + sqlx, JWT (HMAC-SHA256)&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Frontend&lt;/td&gt;&#xA; &lt;td&gt;Angular 21.1, Bootstrap 5, NgBootstrap, RxJS, Signals&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Инфраструктура&lt;/td&gt;&#xA; &lt;td&gt;Docker (Colima), pm2, nginx reverse proxy, VPS reg.ru&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;доменная-модель&#34;&gt;Доменная модель&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;User ──┬── Space (через space_members с role)&#xA;&#xA; └── GanttChart (принадлежит Space)&#xA; ├── GanttSection&#xA; └── GanttTask&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Роли:&lt;/strong&gt; admin, editor, viewer — назначаются &lt;strong&gt;на уровне Space&lt;/strong&gt; через таблицу &lt;code&gt;space_members&lt;/code&gt;.&lt;/p&gt;</description>
</item>
<item>
<title>Copyright без 2026 года</title>
<link>/personal-site/copyright-outdated/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/copyright-outdated/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;В &lt;code&gt;params.toml&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;copyRight = &amp;#34;Copyright (c) 2020-2025 Антон Агальцов&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Сейчас 2026 год — нужно обновить.&lt;/p&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;p&gt;Обновить на &lt;code&gt;2020-2026&lt;/code&gt;. Или сделать динамическим через Hugo template:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Copyright (c) 2020-{{ now.Year }} Антон Агальцов&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
</item>
<item>
<title>Digest не обновлялся с февраля 2025</title>
<link>/personal-site/digest-stale/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/digest-stale/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;Последний дайджест — &lt;strong&gt;февраль 2025&lt;/strong&gt;. С тех пор 12+ месяцев без новых выпусков.&lt;/p&gt;&#xA;&lt;h3 id=&#34;что-есть&#34;&gt;Что есть&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;27 файлов дайджестов (январь 2023 — февраль 2025)&lt;/li&gt;&#xA;&lt;li&gt;Автоматизация через &lt;code&gt;digest.js&lt;/code&gt; — скрипт для генерации&lt;/li&gt;&#xA;&lt;li&gt;Но скрипт не запускается автоматически&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;риск&#34;&gt;Риск&lt;/h3&gt;&#xA;&lt;p&gt;Low — контент устаревает, SEO-позиции падают для страниц дайджестов.&lt;/p&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Настроить cron/CI для ежемесячной генерации дайджеста&lt;/li&gt;&#xA;&lt;li&gt;Или интегрировать с OpenClaw — авто-сборка дайджеста на основе новых публикаций&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
<item>
<title>Hugo Doks 0.5 — сильно устарел</title>
<link>/personal-site/outdated-doks-theme/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/outdated-doks-theme/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;Проект использует тему &lt;strong&gt;Hyas/Doks v0.5.0&lt;/strong&gt; (package.json). Актуальная версия Doks — &lt;strong&gt;1.x&lt;/strong&gt; с полной переработкой архитектуры.&lt;/p&gt;&#xA;&lt;h3 id=&#34;что-не-так&#34;&gt;Что не так&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Doks 0.5 использует устаревший Bootstrap 5.2.0-beta1&lt;/li&gt;&#xA;&lt;li&gt;Hugo 0.148.2 в зависимостях — новый, но интеграция с темой старая&lt;/li&gt;&#xA;&lt;li&gt;Конфигурация через &lt;code&gt;theme.toml&lt;/code&gt; — в новых версиях перешли на другой формат&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;exec-bin&lt;/code&gt; для вызова Hugo — устаревший подход, текущие версии Hugo ставятся глобально&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;риск&#34;&gt;Риск&lt;/h3&gt;&#xA;&lt;p&gt;Medium — работает, но миграция на Doks 1.x потребует значительного рефакторинга layout-ов и конфигурации. Чем дольше откладывать — тем сложнее.&lt;/p&gt;</description>
</item>
<item>
<title>Twitter handle не соответствует имени</title>
<link>/personal-site/twitter-handle-mismatch/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/twitter-handle-mismatch/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;В &lt;code&gt;params.toml&lt;/code&gt; указан Twitter: &lt;code&gt;@AntonTotoshkin&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Но владелец сайта — &lt;strong&gt;Антон Агальцов&lt;/strong&gt;. Ники не совпадают.&lt;/p&gt;&#xA;&lt;h3 id=&#34;два-варианта&#34;&gt;Два варианта&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Это твой старый/другой аккаунт — тогда ок, но стоит указать актуальный&lt;/li&gt;&#xA;&lt;li&gt;Это чужой аккаунт — тогда нужно убрать или исправить&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;затронутые-места&#34;&gt;Затронутые места&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;twitterSite = &amp;quot;@AntonTotoshkin&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;schemaAuthorTwitter = &amp;quot;https://twitter.com/AntonTotoshkin&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;schemaTwitter = &amp;quot;https://twitter.com/AntonTotoshkin&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;p&gt;Указать актуальный Twitter/X или убрать, если соцсеть не используется.&lt;/p&gt;</description>
</item>
<item>
<title>Yandex Metrika отключена</title>
<link>/personal-site/no-analytics/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/no-analytics/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;В &lt;code&gt;params.toml&lt;/code&gt;: &lt;code&gt;yandexMetrika = false&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Аналитика с сайта не собирается. Непонятно, есть ли вообще посетители и какие страницы популярны.&lt;/p&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Включить Yandex Metrika или перейти на &lt;strong&gt;Plausible&lt;/strong&gt; / &lt;strong&gt;Umami&lt;/strong&gt; (privacy-friendly)&lt;/li&gt;&#xA;&lt;li&gt;Если сайт не нуждается в аналитике — оставить как есть&lt;/li&gt;&#xA;&lt;li&gt;Альтернатива: Netlify Analytics (уже встроен в хостинг)&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
<item>
<title>Бинарный файл в репозитории</title>
<link>/personal-site/binary-files-in-repo/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/binary-files-in-repo/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;В корне репозитория лежат два файла, которые не должны быть в git:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;Шаблоны для сайта.key&lt;/code&gt;&lt;/strong&gt; — Apple Keynote файл (бинарный)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;logo.psd&lt;/code&gt;&lt;/strong&gt; — Photoshop файл (бинарный)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;что-не-так&#34;&gt;Что не так&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Увеличивают размер репозитория&lt;/li&gt;&#xA;&lt;li&gt;Git неэффективно хранит бинарные файлы (каждая версия — полностью)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.key&lt;/code&gt; файлы могут содержать конфиденциальные данные шаблонов&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Перенести в отдельное хранилище (Google Drive, облако)&lt;/li&gt;&#xA;&lt;li&gt;Удалить из git-истории через &lt;code&gt;git filter-repo&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Добавить в &lt;code&gt;.gitignore&lt;/code&gt;: &lt;code&gt;*.key&lt;/code&gt;, &lt;code&gt;*.psd&lt;/code&gt;, &lt;code&gt;*.sketch&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
<item>
<title>Отсутствуют node_modules — нужна установка</title>
<link>/personal-site/no-node-modules/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/no-node-modules/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;node_modules/&lt;/code&gt; отсутствует — проект нельзя собрать без &lt;code&gt;npm install&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;риск&#34;&gt;Риск&lt;/h3&gt;&#xA;&lt;p&gt;Low — стандартная ситуация. Но:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;package-lock.json&lt;/code&gt; привязан к Node 16, а на Mac Studio текущий Node v24&lt;/li&gt;&#xA;&lt;li&gt;Могут быть конфликты зависимостей (canvas, babel, postcss)&lt;/li&gt;&#xA;&lt;li&gt;Hugo 0.148.2 ставится через &lt;code&gt;hugo-installer&lt;/code&gt; в npm — может не совпасть с глобальным Hugo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Убедиться что &lt;code&gt;npm install&lt;/code&gt; проходит без ошибок на текущем Node&lt;/li&gt;&#xA;&lt;li&gt;Если нет — обновить зависимости или использовать nvm для Node 16&lt;/li&gt;&#xA;&lt;li&gt;Рассмотреть переход на глобальный Hugo вместо &lt;code&gt;exec-bin&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
<item>
<title>Устаревший Node.js 16 в Netlify</title>
<link>/personal-site/netlify-node-version/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/netlify-node-version/</guid>
<description>&lt;h1 id=&#34;устаревший-nodejs-16-в-netlify&#34;&gt;Устаревший Node.js 16 в Netlify&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Файл:&lt;/strong&gt; &lt;code&gt;netlify.toml:5&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NODE_VERSION = &amp;#34;16.16.0&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Node.js 16 вышел из поддержки (EOL) в сентябре 2023. Сборка на Netlify может начать падать или работать некорректно.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Рекомендация:&lt;/strong&gt; Обновить до Node.js 20 LTS:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;NODE_VERSION&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;20&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
</item>
</channel>
</rss>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+146
View File
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Canvas — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Canvas</h1>
<ul>
<li><a href="../../diary/2026-03-31/">31 марта 2026</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Canvas on docs.a2v.space</title>
<link>/tags/canvas/</link>
<description>Recent content in Canvas on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/canvas/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>31 марта 2026</title>
<link>/diary/2026-03-31/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-31/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Утро&lt;/strong&gt; — Обсуждали аналоги htop: порекомендовал btm, btop, glances. Создан конфиг &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Разбирались со скиллами OpenCode: как работают, автоматический подбор по description&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Созданы скиллы для Leadera проектов (Go: build-and-fix, restart-api; Angular: build-and-fix)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Обсудили миграцию Ганта с DOM на Canvas 2D (Konva.js) — real-time коллаборация, экспорт PDF/PNG, 500+ задач&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Установлен gh CLI, авторизован как agaltsovav&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Созданы GitHub Projects: Leadera Roadmap (21 задача, P0P3), agaltsovav.ru Roadmap (7 задач)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;системные-утилиты&#34;&gt;Системные утилиты&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;bottom&lt;/strong&gt; (btm) — выбранный мониторинг, конфиг в &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Альтернативы: btop, glances&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;opencode-skills&#34;&gt;OpenCode Skills&lt;/h2&gt;&#xA;&lt;p&gt;Созданы скиллы:&lt;/p&gt;</description>
</item>
</channel>
</rss>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+146
View File
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Gantt — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Gantt</h1>
<ul>
<li><a href="../../diary/2026-03-31/">31 марта 2026</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Gantt on docs.a2v.space</title>
<link>/tags/gantt/</link>
<description>Recent content in Gantt on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/gantt/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>31 марта 2026</title>
<link>/diary/2026-03-31/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-31/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Утро&lt;/strong&gt; — Обсуждали аналоги htop: порекомендовал btm, btop, glances. Создан конфиг &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Разбирались со скиллами OpenCode: как работают, автоматический подбор по description&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Созданы скиллы для Leadera проектов (Go: build-and-fix, restart-api; Angular: build-and-fix)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Обсудили миграцию Ганта с DOM на Canvas 2D (Konva.js) — real-time коллаборация, экспорт PDF/PNG, 500+ задач&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Установлен gh CLI, авторизован как agaltsovav&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Созданы GitHub Projects: Leadera Roadmap (21 задача, P0P3), agaltsovav.ru Roadmap (7 задач)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;системные-утилиты&#34;&gt;Системные утилиты&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;bottom&lt;/strong&gt; (btm) — выбранный мониторинг, конфиг в &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Альтернативы: btop, glances&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;opencode-skills&#34;&gt;OpenCode Skills&lt;/h2&gt;&#xA;&lt;p&gt;Созданы скиллы:&lt;/p&gt;</description>
</item>
</channel>
</rss>
+146
View File
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Github — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Github</h1>
<ul>
<li><a href="../../diary/2026-03-31/">31 марта 2026</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Github on docs.a2v.space</title>
<link>/tags/github/</link>
<description>Recent content in Github on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/github/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>31 марта 2026</title>
<link>/diary/2026-03-31/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-31/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Утро&lt;/strong&gt; — Обсуждали аналоги htop: порекомендовал btm, btop, glances. Создан конфиг &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Разбирались со скиллами OpenCode: как работают, автоматический подбор по description&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Созданы скиллы для Leadera проектов (Go: build-and-fix, restart-api; Angular: build-and-fix)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Обсудили миграцию Ганта с DOM на Canvas 2D (Konva.js) — real-time коллаборация, экспорт PDF/PNG, 500+ задач&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Установлен gh CLI, авторизован как agaltsovav&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Созданы GitHub Projects: Leadera Roadmap (21 задача, P0P3), agaltsovav.ru Roadmap (7 задач)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;системные-утилиты&#34;&gt;Системные утилиты&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;bottom&lt;/strong&gt; (btm) — выбранный мониторинг, конфиг в &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Альтернативы: btop, glances&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;opencode-skills&#34;&gt;OpenCode Skills&lt;/h2&gt;&#xA;&lt;p&gt;Созданы скиллы:&lt;/p&gt;</description>
</item>
</channel>
</rss>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+8
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
@@ -109,6 +115,8 @@
<ul>
<li><a href="../../personal-site/">Личный сайт (agaltsovav.ru)</a></li>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
</ul>
+8 -1
View File
@@ -6,8 +6,15 @@
<description>Recent content in Hugo on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/hugo/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Личный сайт (agaltsovav.ru)</title>
<link>/personal-site/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/</guid>
<description></description>
</item>
<item>
<title>29 марта 2026</title>
<link>/diary/2026-03-29/</link>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+24 -6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../personal-site/">Личный сайт</a></li>
</ul>
</div>
@@ -109,14 +115,30 @@
<ul>
<li><a href="../tags/architecture/">Architecture</a></li>
<li><a href="../tags/audit/">Audit</a></li>
<li><a href="../tags/canvas/">Canvas</a></li>
<li><a href="../tags/gantt/">Gantt</a></li>
<li><a href="../tags/github/">Github</a></li>
<li><a href="../tags/hugo/">Hugo</a></li>
<li><a href="../tags/infrastructure/">Infrastructure</a></li>
<li><a href="../tags/leadera/">Leadera</a></li>
<li><a href="../tags/opencode/">Opencode</a></li>
<li><a href="../tags/personal-site/">Personal-Site</a></li>
<li><a href="../tags/roadmap/">Roadmap</a></li>
<li><a href="../tags/system-utils/">System-Utils</a></li>
<li><a href="../tags/architecture/">Architecture</a></li>
<li><a href="../tags/mtproxy/">Mtproxy</a></li>
<li><a href="../tags/ollama/">Ollama</a></li>
@@ -153,8 +175,6 @@
<li><a href="../tags/go/">Go</a></li>
<li><a href="../tags/hugo/">Hugo</a></li>
<li><a href="../tags/identity/">Identity</a></li>
<li><a href="../tags/llm/">Llm</a></li>
@@ -165,8 +185,6 @@
<li><a href="../tags/openclaw/">Openclaw</a></li>
<li><a href="../tags/opencode/">Opencode</a></li>
<li><a href="../tags/postgresql/">Postgresql</a></li>
<li><a href="../tags/reg.ru/">Reg.ru</a></li>
+67 -25
View File
@@ -6,36 +6,92 @@
<description>Recent content in Tags on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Mon, 30 Mar 2026 00:00:00 +0000</lastBuildDate>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Architecture</title>
<link>/tags/architecture/</link>
<pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/architecture/</guid>
<description></description>
</item>
<item>
<title>Audit</title>
<link>/tags/audit/</link>
<pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/audit/</guid>
<description></description>
</item>
<item>
<title>Canvas</title>
<link>/tags/canvas/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/canvas/</guid>
<description></description>
</item>
<item>
<title>Gantt</title>
<link>/tags/gantt/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/gantt/</guid>
<description></description>
</item>
<item>
<title>Github</title>
<link>/tags/github/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/github/</guid>
<description></description>
</item>
<item>
<title>Hugo</title>
<link>/tags/hugo/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/hugo/</guid>
<description></description>
</item>
<item>
<title>Infrastructure</title>
<link>/tags/infrastructure/</link>
<pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/infrastructure/</guid>
<description></description>
</item>
<item>
<title>Leadera</title>
<link>/tags/leadera/</link>
<pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/leadera/</guid>
<description></description>
</item>
<item>
<title>Opencode</title>
<link>/tags/opencode/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/opencode/</guid>
<description></description>
</item>
<item>
<title>Personal-Site</title>
<link>/tags/personal-site/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/personal-site/</guid>
<description></description>
</item>
<item>
<title>Roadmap</title>
<link>/tags/roadmap/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/roadmap/</guid>
<description></description>
</item>
<item>
<title>System-Utils</title>
<link>/tags/system-utils/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/system-utils/</guid>
<description></description>
</item>
<item>
<title>Architecture</title>
<link>/tags/architecture/</link>
<pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/architecture/</guid>
<description></description>
</item>
<item>
<title>Mtproxy</title>
<link>/tags/mtproxy/</link>
@@ -162,13 +218,6 @@
<guid>/tags/go/</guid>
<description></description>
</item>
<item>
<title>Hugo</title>
<link>/tags/hugo/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/hugo/</guid>
<description></description>
</item>
<item>
<title>Identity</title>
<link>/tags/identity/</link>
@@ -204,13 +253,6 @@
<guid>/tags/openclaw/</guid>
<description></description>
</item>
<item>
<title>Opencode</title>
<link>/tags/opencode/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/opencode/</guid>
<description></description>
</item>
<item>
<title>Postgresql</title>
<link>/tags/postgresql/</link>
+8
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
@@ -109,6 +115,8 @@
<ul>
<li><a href="../../personal-site/netlify-node-version/">Устаревший Node.js 16 в Netlify</a></li>
<li><a href="../../diary/2026-03-30/">30 марта 2026</a></li>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
+8 -1
View File
@@ -6,8 +6,15 @@
<description>Recent content in Infrastructure on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Mon, 30 Mar 2026 00:00:00 +0000</lastBuildDate>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/infrastructure/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Устаревший Node.js 16 в Netlify</title>
<link>/personal-site/netlify-node-version/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/netlify-node-version/</guid>
<description>&lt;h1 id=&#34;устаревший-nodejs-16-в-netlify&#34;&gt;Устаревший Node.js 16 в Netlify&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Файл:&lt;/strong&gt; &lt;code&gt;netlify.toml:5&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NODE_VERSION = &amp;#34;16.16.0&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Node.js 16 вышел из поддержки (EOL) в сентябре 2023. Сборка на Netlify может начать падать или работать некорректно.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Рекомендация:&lt;/strong&gt; Обновить до Node.js 20 LTS:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;NODE_VERSION&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;20&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
</item>
<item>
<title>30 марта 2026</title>
<link>/diary/2026-03-30/</link>
+8
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
@@ -111,6 +117,8 @@
<li><a href="../../guides/leadera-audit/">Аудит Leadera — полный отчёт</a></li>
<li><a href="../../diary/2026-03-31/">31 марта 2026</a></li>
<li><a href="../../diary/2026-03-30/">30 марта 2026</a></li>
<li><a href="../../creds/leadera-db-docker/">Mac Studio — leadera-api БД (docker-compose)</a></li>
+8 -1
View File
@@ -6,7 +6,7 @@
<description>Recent content in Leadera on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Mon, 30 Mar 2026 00:00:00 +0000</lastBuildDate>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/leadera/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Аудит Leadera — полный отчёт</title>
@@ -15,6 +15,13 @@
<guid>/guides/leadera-audit/</guid>
<description>&lt;h1 id=&#34;аудит-проекта-leadera&#34;&gt;Аудит проекта Leadera&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Дата:&lt;/strong&gt; 30.03.2026&lt;br&gt;&#xA;&lt;strong&gt;Версия:&lt;/strong&gt; pre-production, миграции 15&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-обзор-проекта&#34;&gt;1. Обзор проекта&lt;/h2&gt;&#xA;&lt;p&gt;Leadera — SaaS-система управления IT-ландшафтом с диаграммами Ганта.&lt;/p&gt;&#xA;&lt;h3 id=&#34;стек&#34;&gt;Стек&lt;/h3&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Компонент&lt;/th&gt;&#xA; &lt;th&gt;Технологии&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Backend&lt;/td&gt;&#xA; &lt;td&gt;Go 1.21+, Gin, PostgreSQL 16, pgx/v5 + sqlx, JWT (HMAC-SHA256)&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Frontend&lt;/td&gt;&#xA; &lt;td&gt;Angular 21.1, Bootstrap 5, NgBootstrap, RxJS, Signals&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Инфраструктура&lt;/td&gt;&#xA; &lt;td&gt;Docker (Colima), pm2, nginx reverse proxy, VPS reg.ru&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;доменная-модель&#34;&gt;Доменная модель&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;User ──┬── Space (через space_members с role)&#xA;&#xA; └── GanttChart (принадлежит Space)&#xA; ├── GanttSection&#xA; └── GanttTask&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Роли:&lt;/strong&gt; admin, editor, viewer — назначаются &lt;strong&gt;на уровне Space&lt;/strong&gt; через таблицу &lt;code&gt;space_members&lt;/code&gt;.&lt;/p&gt;</description>
</item>
<item>
<title>31 марта 2026</title>
<link>/diary/2026-03-31/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-31/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Утро&lt;/strong&gt; — Обсуждали аналоги htop: порекомендовал btm, btop, glances. Создан конфиг &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Разбирались со скиллами OpenCode: как работают, автоматический подбор по description&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Созданы скиллы для Leadera проектов (Go: build-and-fix, restart-api; Angular: build-and-fix)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Обсудили миграцию Ганта с DOM на Canvas 2D (Konva.js) — real-time коллаборация, экспорт PDF/PNG, 500+ задач&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Установлен gh CLI, авторизован как agaltsovav&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Созданы GitHub Projects: Leadera Roadmap (21 задача, P0P3), agaltsovav.ru Roadmap (7 задач)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;системные-утилиты&#34;&gt;Системные утилиты&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;bottom&lt;/strong&gt; (btm) — выбранный мониторинг, конфиг в &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Альтернативы: btop, glances&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;opencode-skills&#34;&gt;OpenCode Skills&lt;/h2&gt;&#xA;&lt;p&gt;Созданы скиллы:&lt;/p&gt;</description>
</item>
<item>
<title>30 марта 2026</title>
<link>/diary/2026-03-30/</link>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+8
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
@@ -109,6 +115,8 @@
<ul>
<li><a href="../../diary/2026-03-31/">31 марта 2026</a></li>
<li><a href="../../guides/code-a2v-space/">Подключение code.a2v.space (OpenCode)</a></li>
</ul>
+8 -1
View File
@@ -6,8 +6,15 @@
<description>Recent content in Opencode on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/opencode/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>31 марта 2026</title>
<link>/diary/2026-03-31/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-31/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Утро&lt;/strong&gt; — Обсуждали аналоги htop: порекомендовал btm, btop, glances. Создан конфиг &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Разбирались со скиллами OpenCode: как работают, автоматический подбор по description&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Созданы скиллы для Leadera проектов (Go: build-and-fix, restart-api; Angular: build-and-fix)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Обсудили миграцию Ганта с DOM на Canvas 2D (Konva.js) — real-time коллаборация, экспорт PDF/PNG, 500+ задач&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Установлен gh CLI, авторизован как agaltsovav&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Созданы GitHub Projects: Leadera Roadmap (21 задача, P0P3), agaltsovav.ru Roadmap (7 задач)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;системные-утилиты&#34;&gt;Системные утилиты&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;bottom&lt;/strong&gt; (btm) — выбранный мониторинг, конфиг в &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Альтернативы: btop, glances&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;opencode-skills&#34;&gt;OpenCode Skills&lt;/h2&gt;&#xA;&lt;p&gt;Созданы скиллы:&lt;/p&gt;</description>
</item>
<item>
<title>Подключение code.a2v.space (OpenCode)</title>
<link>/guides/code-a2v-space/</link>
+162
View File
@@ -0,0 +1,162 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Personal-Site — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Personal-Site</h1>
<ul>
<li><a href="../../personal-site/">Личный сайт (agaltsovav.ru)</a></li>
<li><a href="../../personal-site/copyright-outdated/">Copyright без 2026 года</a></li>
<li><a href="../../personal-site/digest-stale/">Digest не обновлялся с февраля 2025</a></li>
<li><a href="../../personal-site/outdated-doks-theme/">Hugo Doks 0.5 — сильно устарел</a></li>
<li><a href="../../personal-site/twitter-handle-mismatch/">Twitter handle не соответствует имени</a></li>
<li><a href="../../personal-site/no-analytics/">Yandex Metrika отключена</a></li>
<li><a href="../../personal-site/binary-files-in-repo/">Бинарный файл в репозитории</a></li>
<li><a href="../../personal-site/no-node-modules/">Отсутствуют node_modules — нужна установка</a></li>
<li><a href="../../personal-site/netlify-node-version/">Устаревший Node.js 16 в Netlify</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+75
View File
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Personal-Site on docs.a2v.space</title>
<link>/tags/personal-site/</link>
<description>Recent content in Personal-Site on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/personal-site/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Личный сайт (agaltsovav.ru)</title>
<link>/personal-site/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/</guid>
<description></description>
</item>
<item>
<title>Copyright без 2026 года</title>
<link>/personal-site/copyright-outdated/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/copyright-outdated/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;В &lt;code&gt;params.toml&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;copyRight = &amp;#34;Copyright (c) 2020-2025 Антон Агальцов&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Сейчас 2026 год — нужно обновить.&lt;/p&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;p&gt;Обновить на &lt;code&gt;2020-2026&lt;/code&gt;. Или сделать динамическим через Hugo template:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Copyright (c) 2020-{{ now.Year }} Антон Агальцов&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
</item>
<item>
<title>Digest не обновлялся с февраля 2025</title>
<link>/personal-site/digest-stale/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/digest-stale/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;Последний дайджест — &lt;strong&gt;февраль 2025&lt;/strong&gt;. С тех пор 12+ месяцев без новых выпусков.&lt;/p&gt;&#xA;&lt;h3 id=&#34;что-есть&#34;&gt;Что есть&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;27 файлов дайджестов (январь 2023 — февраль 2025)&lt;/li&gt;&#xA;&lt;li&gt;Автоматизация через &lt;code&gt;digest.js&lt;/code&gt; — скрипт для генерации&lt;/li&gt;&#xA;&lt;li&gt;Но скрипт не запускается автоматически&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;риск&#34;&gt;Риск&lt;/h3&gt;&#xA;&lt;p&gt;Low — контент устаревает, SEO-позиции падают для страниц дайджестов.&lt;/p&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Настроить cron/CI для ежемесячной генерации дайджеста&lt;/li&gt;&#xA;&lt;li&gt;Или интегрировать с OpenClaw — авто-сборка дайджеста на основе новых публикаций&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
<item>
<title>Hugo Doks 0.5 — сильно устарел</title>
<link>/personal-site/outdated-doks-theme/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/outdated-doks-theme/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;Проект использует тему &lt;strong&gt;Hyas/Doks v0.5.0&lt;/strong&gt; (package.json). Актуальная версия Doks — &lt;strong&gt;1.x&lt;/strong&gt; с полной переработкой архитектуры.&lt;/p&gt;&#xA;&lt;h3 id=&#34;что-не-так&#34;&gt;Что не так&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Doks 0.5 использует устаревший Bootstrap 5.2.0-beta1&lt;/li&gt;&#xA;&lt;li&gt;Hugo 0.148.2 в зависимостях — новый, но интеграция с темой старая&lt;/li&gt;&#xA;&lt;li&gt;Конфигурация через &lt;code&gt;theme.toml&lt;/code&gt; — в новых версиях перешли на другой формат&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;exec-bin&lt;/code&gt; для вызова Hugo — устаревший подход, текущие версии Hugo ставятся глобально&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;риск&#34;&gt;Риск&lt;/h3&gt;&#xA;&lt;p&gt;Medium — работает, но миграция на Doks 1.x потребует значительного рефакторинга layout-ов и конфигурации. Чем дольше откладывать — тем сложнее.&lt;/p&gt;</description>
</item>
<item>
<title>Twitter handle не соответствует имени</title>
<link>/personal-site/twitter-handle-mismatch/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/twitter-handle-mismatch/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;В &lt;code&gt;params.toml&lt;/code&gt; указан Twitter: &lt;code&gt;@AntonTotoshkin&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Но владелец сайта — &lt;strong&gt;Антон Агальцов&lt;/strong&gt;. Ники не совпадают.&lt;/p&gt;&#xA;&lt;h3 id=&#34;два-варианта&#34;&gt;Два варианта&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Это твой старый/другой аккаунт — тогда ок, но стоит указать актуальный&lt;/li&gt;&#xA;&lt;li&gt;Это чужой аккаунт — тогда нужно убрать или исправить&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;затронутые-места&#34;&gt;Затронутые места&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;twitterSite = &amp;quot;@AntonTotoshkin&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;schemaAuthorTwitter = &amp;quot;https://twitter.com/AntonTotoshkin&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;schemaTwitter = &amp;quot;https://twitter.com/AntonTotoshkin&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;p&gt;Указать актуальный Twitter/X или убрать, если соцсеть не используется.&lt;/p&gt;</description>
</item>
<item>
<title>Yandex Metrika отключена</title>
<link>/personal-site/no-analytics/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/no-analytics/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;В &lt;code&gt;params.toml&lt;/code&gt;: &lt;code&gt;yandexMetrika = false&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Аналитика с сайта не собирается. Непонятно, есть ли вообще посетители и какие страницы популярны.&lt;/p&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Включить Yandex Metrika или перейти на &lt;strong&gt;Plausible&lt;/strong&gt; / &lt;strong&gt;Umami&lt;/strong&gt; (privacy-friendly)&lt;/li&gt;&#xA;&lt;li&gt;Если сайт не нуждается в аналитике — оставить как есть&lt;/li&gt;&#xA;&lt;li&gt;Альтернатива: Netlify Analytics (уже встроен в хостинг)&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
<item>
<title>Бинарный файл в репозитории</title>
<link>/personal-site/binary-files-in-repo/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/binary-files-in-repo/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;В корне репозитория лежат два файла, которые не должны быть в git:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;Шаблоны для сайта.key&lt;/code&gt;&lt;/strong&gt; — Apple Keynote файл (бинарный)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;logo.psd&lt;/code&gt;&lt;/strong&gt; — Photoshop файл (бинарный)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;что-не-так&#34;&gt;Что не так&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Увеличивают размер репозитория&lt;/li&gt;&#xA;&lt;li&gt;Git неэффективно хранит бинарные файлы (каждая версия — полностью)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.key&lt;/code&gt; файлы могут содержать конфиденциальные данные шаблонов&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Перенести в отдельное хранилище (Google Drive, облако)&lt;/li&gt;&#xA;&lt;li&gt;Удалить из git-истории через &lt;code&gt;git filter-repo&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Добавить в &lt;code&gt;.gitignore&lt;/code&gt;: &lt;code&gt;*.key&lt;/code&gt;, &lt;code&gt;*.psd&lt;/code&gt;, &lt;code&gt;*.sketch&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
<item>
<title>Отсутствуют node_modules — нужна установка</title>
<link>/personal-site/no-node-modules/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/no-node-modules/</guid>
<description>&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;node_modules/&lt;/code&gt; отсутствует — проект нельзя собрать без &lt;code&gt;npm install&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;риск&#34;&gt;Риск&lt;/h3&gt;&#xA;&lt;p&gt;Low — стандартная ситуация. Но:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;package-lock.json&lt;/code&gt; привязан к Node 16, а на Mac Studio текущий Node v24&lt;/li&gt;&#xA;&lt;li&gt;Могут быть конфликты зависимостей (canvas, babel, postcss)&lt;/li&gt;&#xA;&lt;li&gt;Hugo 0.148.2 ставится через &lt;code&gt;hugo-installer&lt;/code&gt; в npm — может не совпасть с глобальным Hugo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;рекомендация&#34;&gt;Рекомендация&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Убедиться что &lt;code&gt;npm install&lt;/code&gt; проходит без ошибок на текущем Node&lt;/li&gt;&#xA;&lt;li&gt;Если нет — обновить зависимости или использовать nvm для Node 16&lt;/li&gt;&#xA;&lt;li&gt;Рассмотреть переход на глобальный Hugo вместо &lt;code&gt;exec-bin&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
<item>
<title>Устаревший Node.js 16 в Netlify</title>
<link>/personal-site/netlify-node-version/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/personal-site/netlify-node-version/</guid>
<description>&lt;h1 id=&#34;устаревший-nodejs-16-в-netlify&#34;&gt;Устаревший Node.js 16 в Netlify&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Файл:&lt;/strong&gt; &lt;code&gt;netlify.toml:5&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NODE_VERSION = &amp;#34;16.16.0&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Node.js 16 вышел из поддержки (EOL) в сентябре 2023. Сборка на Netlify может начать падать или работать некорректно.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Рекомендация:&lt;/strong&gt; Обновить до Node.js 20 LTS:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;NODE_VERSION&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;20&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
</item>
</channel>
</rss>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+146
View File
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Roadmap — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Roadmap</h1>
<ul>
<li><a href="../../diary/2026-03-31/">31 марта 2026</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Roadmap on docs.a2v.space</title>
<link>/tags/roadmap/</link>
<description>Recent content in Roadmap on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/roadmap/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>31 марта 2026</title>
<link>/diary/2026-03-31/</link>
<pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-31/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Утро&lt;/strong&gt; — Обсуждали аналоги htop: порекомендовал btm, btop, glances. Создан конфиг &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Разбирались со скиллами OpenCode: как работают, автоматический подбор по description&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Созданы скиллы для Leadera проектов (Go: build-and-fix, restart-api; Angular: build-and-fix)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;День&lt;/strong&gt; — Обсудили миграцию Ганта с DOM на Canvas 2D (Konva.js) — real-time коллаборация, экспорт PDF/PNG, 500+ задач&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Установлен gh CLI, авторизован как agaltsovav&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Вечер&lt;/strong&gt; — Созданы GitHub Projects: Leadera Roadmap (21 задача, P0P3), agaltsovav.ru Roadmap (7 задач)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;системные-утилиты&#34;&gt;Системные утилиты&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;bottom&lt;/strong&gt; (btm) — выбранный мониторинг, конфиг в &lt;code&gt;~/.config/bottom/bottom.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Альтернативы: btop, glances&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;opencode-skills&#34;&gt;OpenCode Skills&lt;/h2&gt;&#xA;&lt;p&gt;Созданы скиллы:&lt;/p&gt;</description>
</item>
</channel>
</rss>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>
+6
View File
@@ -46,6 +46,10 @@
<a class="nav-link" href="../../creds/">Креды</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../personal-site/">Личный сайт</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
@@ -94,6 +98,8 @@
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
<li class="nav-item"><a class="nav-link" href="../../personal-site/">Личный сайт</a></li>
</ul>
</div>

Some files were not shown because too many files have changed in this diff Show More