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

Каталог спеціальностей

ПолеЗначення
Статус🟢 prod
Поверхніweb (дані офферів також споживає Telegram-бот — див. bot-flows)
Доступністьбезкоштовно, без акаунта; авторизованим — збагачення персональним конкурсним балом/позицією
ВласникTODO:
Останнє підтвердження2026-06-13 · browse (abitly.org/uk/offers/result, оффер /uk/offers/result/1448156 → 200) + код:main (abitly-frontend-v2, abitly-api-v2)

Каталог конкурсних пропозицій («офферів») — центральна фіча платформи: абітурієнт знаходить спеціальності за фільтрами (регіон, спеціальність, ЗВО, форма навчання…), дивиться деталі КП (прохідні бали, вартість, коефіцієнти, заявки) і зберігає цікаві у вступлісти (див. індекс).

Точка входу: https://abitly.org/uk/offers/result. Роут не локалізується; /offers → 307 /uk/offers → 307 /uk/offers/result. На каталог ведуть головний пошук (MainSearch) і лінки з головної сторінки.

  1. Каталог /offers/result — пошуковий рядок з autocomplete (ЗВО / регіони / спеціальності через Typesense) + 11 фільтрів: форми навчання, основи вступу, регіони, спеціальності, ЗВО, факультети, рік (2025/2024, дефолт 2025), держпідтримка, діапазони прохідного на бюджет/контракт і вартості контракту (з 20-bucket гістограмами filter-stats).
  2. Сортування: вартість контракту / мін. бал на бюджет / рейтинг ЗВО; групування результатів.
  3. Сторінка оффера /offers/result/[id] (indexed) — деталі, освітні програми, місця і бали, прохідні бали по роках (оффери 2024↔2025 пов’язані), коефіцієнти предметів, відгуки студентів зі Studsearch, блок заявок (ApplicantsCard) з 3 вкладками: реальні заявки / симуляція / змішаний режим.
  4. Дії на сторінці оффера: Зберегти (у вступлист, потрібен акаунт — див. автентифікація), Поділитись, Моніторитиdeep-link у Telegram-бот (getTelegramBotUrl({ type: 'offer', offerId })).
  5. Авторизованим відповідь GET /offers збагачується concursScore/concursPosition (guard OptionalJwtAuthGuard); анонімам усе працює без обмежень.

Відгуки студентів на сторінці оффера — крос-продуктовий виклик Studsearch API (GET /students), флоу вже намальований у data-flows.

ДжерелоЕндпоінт / entityПризначення
api-v2GET /offersсписок офферів: Typesense-пошук + manual Redis cache + user-enrichment
api-v2GET /offers/count · GET /offers/filter-statsпагінація; min/max + гістограми (WIDTH_BUCKET, 20 buckets) для слайдерів балів/ціни
api-v2GET /offers/search-paramsTypesense-autocomplete; виключення вже обраного через bannedIds з префіксами r-/s-/u-
api-v2GET /offers/{id} · POST /offers/{id}/admissionдеталі оффера; розрахунок конкурсного бала
api-v2GET /offers/{id}/applicants (+ /simulation, /mixed)вкладки заявок (модуль offerApplicants)
api-v2entity Offer (табл. offers)PK — з реєстру вступної кампанії (не autogenerated); роки пов’язані join-таблицею 24_to_25_offer_connection
Studsearch APIGET /students (studsearchApiClient)відгуки студентів на сторінці оффера
Strapiне використовується цією фічею

SEO: каталог noindex (dynamic metadata), сторінка оффера indexed (ISR); окремого offers-sitemap немає — у (sitemaps)/ лише universities/news/posts/tests/materials/pages.

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

Section titled “Зв’язки з іншими фічами”
  • Каталог / пошук ЗВО та сторінка ЗВО — той самий доменний граф (university → faculty → offer); вкладка спеціальностей ЗВО веде на оффери.
  • Калькулятор конкурсного бала — з результату калькулятора є перехід у каталог (SearchOffersCard); розрахунок на сторінці оффера — POST /offers/{id}/admission.
  • Автентифікація — збагачення відповіді персональним балом/позицією для залогінених.
  • Deep-links до бота — кнопка «Моніторити» на сторінці оффера.
  • Вступлісти (збережені оффери) та wizard «Куди я вступлю?» (GET /offers/admission-chances) — картки ще немає, див. індекс.
  • «Симуляція вступу» — вкладки ApplicantsCard («Симуляція / Симуляція + сортування») на сторінці оффера = безкоштовний тізер і верх воронки платної симуляції (анонімам розмито → реєстрація).
РепоШляхПримітка
abitly-frontend-v2src/app/[locale]/(main)/offers/result/**роути: каталог (filters) + сторінка [id]
abitly-frontend-v2src/components/pages/offers/pages/search/**OffersResult, OfferPage (Cards, ApplicantsTable, OfferActions)
abitly-frontend-v2src/api/{offers,offerApplicants,students}/axios-функції + TanStack Query hooks + типи
abitly-frontend-v2src/lib/constants/{filters,years}.tsDEFAULT_FILTERS (11 фільтрів), DEFAULT_YEAR = 2025
abitly-frontend-v2docs/domains/offers/домен-доки (overview, api, state, seo…) — першоджерело деталей
abitly-api-v2src/api/{offers,offerApplicants,admission}/, src/database/entities/offer.tsмодулі + entity
abitly-api-v2docs/modules/{offers,offer-applicants}/per-entity доки (search-and-filters, admission-score…) — першоджерело бекенд-деталей
  • Дані — річний снапшот вступної кампанії (роки 2025/2024), без live-фіду з реєстру; «реальні заявки» — історичні.
  • Білінг Free/Pro/Max в api-v2 змержений, але нічого не gate-ить — фіча повністю безкоштовна as-is.
  • docs/domains/offers/overview.md (2026-05-15) частково застарів щодо роутів: збережені колекції переїхали /offers/saved/profile/saved (за PATHNAMES), окремої сторінки фільтрів /offers більше немає (307 на /offers/result).
  • Cookie abitly_aid (анонімний ID для заявок/аналітики) — ніколи не очищати при логауті (інваріант домену).
  • Сторінки офферів indexed, але offers-sitemap відсутній — Google знаходить їх лише через внутрішні лінки.
ДатаПодіяДжерело
2026-05-15/16актуалізовано домен-доки offers у фронтенд-репоabitly-frontend-v2 docs/domains/offers/
2026-06-13створено картку; факти звірено browse + код mainPR Wave 1
2026-07-10інцидент: список читав Typesense-індекс річної давнини (лічильник — Postgres) → «Показати результати (N)» з порожньою видачею; реіндекс автоматизовано (bootstrap + nightly + адмін-тригер, api#574)пост-мортем