Перейти до вмісту

Рекомендації блогу

ПолеЗначення
Статус🚧 в розробці — abitly-recsys Phase 0/1 на main, frontend-інтеграція deferred
Поверхніweb (планується — стрічка блогу)
Доступністьбезкоштовно
ВласникTODO:
Останнє підтвердження2026-06-14 · curl (live) + код:main (abitly-recsys)

Контроль порядку та курації контентних стрічок (Phase 1 — блог): редактор задає pin/boost/bury/hide/lock_order у адмінці, а сайт показує статті в обчисленому порядку замість «сирого» порядку Strapi. Базове ранжування Phase 1 — за свіжістю (recency); редакторські правила накладаються зверху (final = base_score ⊕ editorial).

Точка входу (планується): https://abitly.org/uk/novyny (внутрішній роут /uk/blog, next-intl rewrite).

Запланований flow інтеграції (Task 1.7, deferred — див. docs/integration-abitly-web.md у abitly-recsys):

  1. Server-компонент індексу блогу тягне статті зі Strapi для поточної локалі.
  2. Формує entityId = documentId@locale (Strapi v5 documentId + активна локаль — це identity-ключ read-model; slug per-locale не ключ).
  3. Викликає recsys rankIds({ surface: 'blog.articles', context: { locale }, candidates }).
  4. Перевпорядковує статті за відповіддю; рендерить.
  5. Fail-open: якщо recsys недоступний — rankIds повертає вхідні id незмінними → зберігається порядок Strapi (без регресії).
ДжерелоЕндпоінт / entityПризначення
abitly-recsys (окремий сервіс)POST /v1/rank (surface: blog.articles | blog.categories)обчислений порядок стрічки
abitly-recsysPOST /v1/ingest/strapi (webhook)синхронізація rankable-item зі Strapi (publish/update/unpublish/delete)
Strapicontent-types article, categoryпершоджерело контенту; recsys лише ранжує id, тіло статей далі віддає Strapi → data-flow

Внутрішня модель recsys (Phase 1): entities rankable-item, editorial-rule, editorial-version, audit-event; кеш рішень у Valkey за editorialVersion. Реєстр поверхонь у packages/contracts декларує і неблогові слоти (university.offers, search.offers, home.students, university.specialties), але в Phase 1 зареєстровані тільки blog.articles + blog.categories.

Зв’язки з іншими фічами

Section titled “Зв’язки з іншими фічами”
  • Статті / блог — поверхня, на яку recsys накладатиме порядок (зараз — порядок Strapi).
  • Track-events → lake-house — потенційне джерело engagement-сигналів для майбутніх фаз (зараз база ранжування — лише recency); data-flow аналітики.
РепоШляхПримітка
abitly-recsysapps/api/ (NestJS), apps/admin/ (Next.js адмінка)control plane: ranking + editorial + ingest
abitly-recsyspackages/contracts, packages/sdkреєстр поверхонь + клієнтський SDK (@abitly/recsys-sdk, ще не опублікований)
abitly-frontend-v2TODO: (планується src/lib/recsys.ts + reorder у server-компоненті блогу)інтеграція deferred — імпорт SDK у фронтенд не доданий
  • Web-інтеграція відкладена (Task 1.7). Залежить від двох умов, поки не виконаних: (1) @abitly/recsys-sdk має бути встановлюваним фронтендом (опублікувати в private registry / GitHub Packages або vendor — зараз це workspace-пакет); (2) recsys має бути задеплоєний із доступним RECSYS_API_URL. До того ж імпорт у фронтенд не додають — він зламав би білд.
  • Не задеплоєно в prod. docs/deploy.md — план (ECR + ECS Fargate, власна RDS, не shared studsearch-prod; Valkey; SSM /recsys/{env}/*). Жоден recsys-хост не відповідає на /health (перевірено curl 2026-06-14): web-поверхні немає. Env RECSYS_API_URL у фронтенді ще не заведено.
  • Phase 1 scope. База ранжування = recency; персоналізації/engagement-сигналів немає. Неблогові слоти задекларовані в контрактах, але не зареєстровані.
  • Блокери наступних фаз — знято 2026-07-12. Відкриті питання §13 design-spec 2026-06-06 закриті на grill-сесії: вироки — у spec docs/superpowers/specs/2026-07-12-recommendation-core-design.md (репо abitly-mc) §9; рішення — ADR-0012ADR-0015. abitly-recsys розширюється до рекомендаційного ядра всіх сценаріїв (similar/FBT/next-basket/персональні) за season-2026 cut.
  • pgvector-курс. Якщо/коли recsys знадобиться вектор-пошук — це CREATE EXTENSION vector на власній RDS, не Supabase (ADR-0010).
ДатаПодіяДжерело
2026-06-06Design-spec control plane (3 осі: retrieve/editorial/cache)abitly-recsys docs/superpowers/specs/2026-06-06-recsys-control-plane-design.md
TODO:Phase 0/1 побудовано на main (api + admin + contracts + sdk, CI зелений, blog spine end-to-end)abitly-recsys main (README, дерево репо)
2026-06-14Картка створена; web-інтеграція підтверджено відсутньою (live curl)PR картки
2026-07-12§13 закрито; recsys → рекомендаційне ядро всіх сценаріїв (spec 2026-07-12 + ADR-0012…0015); season-2026 cutgrill-сесія, цей PR