title: Снижение AI-расходов: anti-repeat review + single scheduler

description: Убрали дублирующий hourly запуск через cron (оставили systemd timer как single source of truth), добавили throttle для AI-модерации pending очереди: cooldown по часам и лимит попыток на запись. Также добавили alert по оценке AI-расхода за окно (tokens->USD) для раннего контроля затрат.


title: Unified MV refresh helper + DB retention cleanup

description: Убрали дублирование refresh materialized views: добавили единый helper scripts/analytics/refresh_mviews.sh и подключили его в hourly, daily и post-deploy. Также внедрили retention cleanup для alert_events и review_queue_pending_history (defaults: 180/365 дней) через scripts/ops/retention_cleanup.php.


title: PageSpeed pass: reduced layout-shift risk from feedback modal

description: Для снижения вероятности CLS до загрузки CSS добавили нативное hidden-состояние feedback modal и базовое fixed-позиционирование feedback button inline. Также для Market Pulse подключен stylesheet preload. После обновления mobile PSI по /market-pulse/ стабилен на high-score диапазоне.


title: PageSpeed tuning: Market Pulse CLS stabilization

description: Для /market-pulse/ добавили preload основного CSS и стабилизировали высоты ключевых блоков (stats, KPI, trend, compact-list), чтобы уменьшить mobile CLS и снизить вероятность layout shift при первичной отрисовке.


title: Hourly rollup window optimized (14d default)

description: Снизили вычислительную нагрузку hourly pipeline: пересчет rollups теперь по умолчанию идет за 14 дней (настраивается через HOURLY_ROLLUP_DAYS), вместо полного 90-дневного окна каждый час. Глубокий пересчет оставлен в daily maintenance.


title: Daily pipeline split from hourly ingest

description: Убрали дублирование: daily timer больше не гоняет hourly ingest. Добавлен отдельный run_daily_pipeline.sh для maintenance-задач (rollups, MV refresh, SEO audit/smoke, monitoring). Также в install_on_vps.sh добавлен daemon-reload сразу после установки daily systemd unit для надежной синхронизации ExecStart.


title: SEO smoke log retention control

description: Добавили ретеншн для SEO smoke NDJSON-лога: после записи автоматически удерживаются только последние N строк (по умолчанию 2000, настраивается через LOG_MAX_LINES). Это предотвращает бесконечный рост файла мониторинга.


title: SEO smoke fail alerts via Telegram events

description: Для SEO smoke-check добавили алерт при статусе fail через существующий канал send_telegram_alerts.php с дедупликацией по event_key/event_bucket. Также укрепили fail-path скрипта: даже при сетевых ошибках и пустом HTML теперь гарантированно сохраняется NDJSON/JSON запись с причинами.


title: API cache-hardening: ETag/304 + no-store on errors

description: Завершили rollout кэширования на публичных JSON API: успешные ответы теперь унифицированно отдаются через site_send_json_cached() с ETag/Cache-Control (60-300s), а error/rate-limit ответы принудительно помечаются no-store. Это снижает лишний трафик на повторных запросах и убирает риск кэширования 4xx/5xx.


title: SEO Smoke Monitor в админке + NDJSON лог

description: Добавили запись результатов SEO smoke-check в /var/www/aff-job/shared/metrics/seo_smoke.ndjson (и latest JSON) и вывели в админке аналитики отдельный блок последних 10 прогонов: статус, время, errors/warns/checks и краткие детали.


title: Post-deploy SEO smoke checks automated

description: В remote post-deploy checks добавили отдельный SEO smoke-блок: проверка ключевых URL (HTTP 200), наличия title/canonical/h1, Sitemap в robots.txt и контроль дубликатов BreadcrumbList на taxonomy. Это снижает риск тихих SEO-регрессий после релизов.


title: Cloudflare selective purge in post-deploy flow

description: Добавили ops-скрипт selective purge для Cloudflare (главная, robots, sitemap и ключевые аналитические страницы) и подключили его в remote post-deploy checks. При отсутствии CF credentials шаг автоматически пропускается, поэтому деплой остаётся безопасным.


title: Taxonomy breadcrumbs cleanup (single schema)

description: Убрали дублирующуюся BreadcrumbList разметку на страницах taxonomy и перевели breadcrumb trail на корректную иерархию (Главная -> Вакансии -> Роли/Вертикали/Форматы -> Текущий раздел). Это улучшает чистоту SEO-сигналов без изменения URL-структуры.


title: Robots.txt normalization for Google parsing

description: Привели robots.txt к более совместимому формату для парсера Google/PSI: убрали Host-директиву и унифицировали query-правила через wildcard-шаблоны. Это снижает риск false-positive ошибки “robots.txt недействителен” в технических аудитах.


title: SQL profiler in pipeline + admin visibility

description: Добавили lightweight SQL-профайлер (EXPLAIN ANALYZE) для ключевых read-query. В hourly pipeline он запускается в best-effort режиме с TTL skip, пишет JSON-отчёт в shared metrics, а в админке аналитики теперь отображается сводка latency и статус по каждому запросу.


title: DB index pack for catalog filters and analytics

description: Применили дополнительный набор PostgreSQL-индексов для фильтров/сортировок каталога вакансий (work_format, salary expression, role/vertical tags) и поддерживающих analytics/review-запросов. Это снижает latency на /jobs-фильтрах и тяжёлых аналитических страницах при росте нагрузки.


title: Homepage TTFB cache layer (120s)

description: Добавили короткий серверный кэш для агрегатов главной страницы (статистика, топ ролей/вертикалей/каналов, последние вакансии), чтобы снизить нагрузку на БД и стабилизировать first-byte под нагрузкой. Кэш хранится в /tmp и обновляется каждые 120 секунд.


title: CWV boost + real client IP rate limiting

description: Перевели загрузку аналитических скриптов на interaction/late-load стратегию для снижения mobile JS overhead и улучшения PSI. Добавили определение реального client IP (CF-Connecting-IP/X-Forwarded-For) для rate-limit на feedback/API, чтобы исключить коллизии по edge-IP Cloudflare.


title: Company normalization cleanup for role-noise

description: Улучшили нормализацию компаний: удаляется типичный role-сuffix в формате «Company. Media Buyer ...». Это снижает шум в аналитике и улучшает качество company-страниц/поиска.


title: Sitemap freshness + archived jobs index policy

description: Улучшили точность sitemap lastmod: для статических роутов используется filemtime, для динамики остаётся DB-driven lastmod. Ввели SEO-политику для архивных вакансий: noindex на карточках и JobPosting schema только для активных вакансий.


title: Deploy safety fix for hourly pipeline timer

description: Исправили install_on_vps.sh: деплой больше не выключает aff-job-hourly.timer. Теперь hourly ingest/moderation/publish и daily analytics таймеры стабильно работают параллельно после каждого релиза.


title: Stability + Mobile UX + API Limits

description: Добавили общий rate-limit для feedback и API v1 endpoint’ов, перевели header в hamburger до tablet-ширины, увеличили touch-target для навигации/футера/ярлыков каналов, выровняли feedback-виджет справа и обновили RU-названия Market Pulse.


title: Переведены языковые URL на чистый формат /en/...

description: Убрали зависимость от ?lang=en: теперь локализованные страницы используют чистые EN-адреса (/en/...), добавили совместимость со старыми ссылками через 301 и обновили hreflang/canonical генерацию.


title: Добавлены GEO/AEO comparison-страницы и FAQ schema

description: Запущен раздел /comparisons/affiliate-jobs-channels/ с публичным бенчмарком каналов. Расширили FAQPage schema на jobs/channels/reports и улучшили discoverability в sitemap/навигации.


title: Импортирован локальный набор AI/SEO/UI skills в проект

description: Подключили и задокументировали 6 skill-пакетов (UI/UX, frontend design, content, pSEO, SEO audit, GEO/AEO) с агентными манифестами для дальнейшей работы по продукту.


title: Усилена безопасность админки: включен ADMIN_PASSWORD_HASH

description: На проде отключили plaintext ADMIN_PASSWORD, включили вход через bcrypt-хеш и сохранили пороги AI apply в env (publish=0.75, reject=0.80).


title: Запущен RU/EN слой интерфейса

description: Для технических страниц добавили двуязычные мета-данные, hreflang-ссылки и EN-локаль через lang=en (тексты вакансий остаются в исходном языке).


title: Глобальный header + breadcrumbs на всех страницах

description: Добавили единый верхний хедер с выпадающей навигацией, переключателем RU/EN и SEO-breadcrumbs (включая BreadcrumbList schema). Убрали дублирующее меню из hero-блоков внутренних страниц.


title: Калибровка AI-модерации добавлена в админку

description: В разделе AI review появилась метрика точности по ручным решениям, confidence buckets, рекомендации по порогам publish/reject и список расхождений для ручного разбора.


title: Добавлен product changelog feed и CLI для релиз-логов

description: Сделали отдельный фид обновлений продукта /feeds/product-changelog.ndjson.php и скрипт scripts/changelog/add_entry.php для быстрого добавления записей после релизов.


title: Запущен публичный research-отчёт по рынку вакансий

description: Добавили раздел /research/ в формате воспроизводимого исследования: executive summary, зарплаты, роли, вертикали, quality/noise-метрики, формулы и ограничения. Плюс открытые датасеты JSON/CSV и PDF-версия отчёта.


title: Обновлена главная и мобильная навигация

description: Добавили блок с 5 последними вакансиями, секции в табах на главной, переименовали H2, перевели footer-навигацию в drop-up, увеличили touch-target ссылок и закрепили feedback-виджет. Также подтвердили валидный robots.txt и включили long-cache заголовки для статики.


title: Переключено превью соцсетей на v2

description: Обновили мета-картинку для og:image и twitter:image на новый бренд-вариант. Это влияет на карточку сайта при публикации ссылок в Telegram и других соцсетях.


title: Добавлен Weekly Reports Monitor в админку

description: В админке аналитики появился блок со статусом weekly-отчетов, покрытием по дням и быстрыми ссылками на страницы недель.


title: Запущены weekly-отчеты /reports/weekly-YYYY-WW/

description: Добавили публичный раздел weekly-отчетов с архивом недель, метриками прозрачности и топами каналов/skills.


title: Materialized views для аналитики

description: Ввели analytics_mv_market_daily, analytics_mv_channel_daily и analytics_mv_weekly_rollup для ускорения тяжелых витрин и отчетов.


title: Алерт на рост pending в review_queue

description: Добавили снимки очереди и Telegram-алерт при устойчивом росте pending, чтобы ловить деградацию модерации.


title: Улучшен SEO аудит и интеграция PageSpeed API

description: Подключили ключ PageSpeed API, расширили диагностику CWV и стабилизировали аудит в админке.


title: Публичные аналитические фиды JSON/CSV

description: Добавили daily-выгрузки аналитики рынка и каналов в машинных форматах для внешних интеграций.


title: Публичные страницы Market Pulse и Channels

description: Собрали витрины индексов рынка и качества каналов на данных Telegram-парсинга.


title: Hourly pipeline + Telegram summary

description: Настроили часовой systemd-проход: ingest -> AI-review -> publish -> rollups + итоговый отчет в Telegram.


title: Добавлены Contact / Privacy / Terms

description: Собрали базовые юридические и контактные страницы и подключили в общий footer.