daily update 2026-03-31
This commit is contained in:
@@ -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 задача, P0–P3), 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, тёмная тема, форма обратной связи
|
||||
@@ -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 }} Антон Агальцов
|
||||
```
|
||||
@@ -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"
|
||||
```
|
||||
@@ -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 (уже встроен в хостинг)
|
||||
@@ -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 или убрать, если соцсеть не используется.
|
||||
Reference in New Issue
Block a user