Каталог спеціальностей
Метадані
Section titled “Метадані”| Поле | Значення |
|---|---|
| Статус | 🟢 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) |
Призначення
Section titled “Призначення”Каталог конкурсних пропозицій («офферів») — центральна фіча платформи: абітурієнт знаходить спеціальності за фільтрами (регіон, спеціальність, ЗВО, форма навчання…), дивиться деталі КП (прохідні бали, вартість, коефіцієнти, заявки) і зберігає цікаві у вступлісти (див. індекс).
User flow
Section titled “User flow”Точка входу: https://abitly.org/uk/offers/result. Роут не локалізується; /offers → 307 /uk/offers → 307 /uk/offers/result. На каталог ведуть головний пошук (MainSearch) і лінки з головної сторінки.
- Каталог
/offers/result— пошуковий рядок з autocomplete (ЗВО / регіони / спеціальності через Typesense) + 11 фільтрів: форми навчання, основи вступу, регіони, спеціальності, ЗВО, факультети, рік (2025/2024, дефолт 2025), держпідтримка, діапазони прохідного на бюджет/контракт і вартості контракту (з 20-bucket гістограмамиfilter-stats). - Сортування: вартість контракту / мін. бал на бюджет / рейтинг ЗВО; групування результатів.
- Сторінка оффера
/offers/result/[id](indexed) — деталі, освітні програми, місця і бали, прохідні бали по роках (оффери 2024↔2025 пов’язані), коефіцієнти предметів, відгуки студентів зі Studsearch, блок заявок (ApplicantsCard) з 3 вкладками: реальні заявки / симуляція / змішаний режим. - Дії на сторінці оффера: Зберегти (у вступлист, потрібен акаунт — див. автентифікація), Поділитись, Моніторити → deep-link у Telegram-бот (
getTelegramBotUrl({ type: 'offer', offerId })). - Авторизованим відповідь
GET /offersзбагачуєтьсяconcursScore/concursPosition(guardOptionalJwtAuthGuard); анонімам усе працює без обмежень.
Відгуки студентів на сторінці оффера — крос-продуктовий виклик Studsearch API (GET /students), флоу вже намальований у data-flows.
Дані та API
Section titled “Дані та API”| Джерело | Ендпоінт / entity | Призначення |
|---|---|---|
| api-v2 | GET /offers | список офферів: Typesense-пошук + manual Redis cache + user-enrichment |
| api-v2 | GET /offers/count · GET /offers/filter-stats | пагінація; min/max + гістограми (WIDTH_BUCKET, 20 buckets) для слайдерів балів/ціни |
| api-v2 | GET /offers/search-params | Typesense-autocomplete; виключення вже обраного через bannedIds з префіксами r-/s-/u- |
| api-v2 | GET /offers/{id} · POST /offers/{id}/admission | деталі оффера; розрахунок конкурсного бала |
| api-v2 | GET /offers/{id}/applicants (+ /simulation, /mixed) | вкладки заявок (модуль offerApplicants) |
| api-v2 | entity Offer (табл. offers) | PK — з реєстру вступної кампанії (не autogenerated); роки пов’язані join-таблицею 24_to_25_offer_connection |
| Studsearch API | GET /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-v2 | src/app/[locale]/(main)/offers/result/** | роути: каталог (filters) + сторінка [id] |
abitly-frontend-v2 | src/components/pages/offers/pages/search/** | OffersResult, OfferPage (Cards, ApplicantsTable, OfferActions) |
abitly-frontend-v2 | src/api/{offers,offerApplicants,students}/ | axios-функції + TanStack Query hooks + типи |
abitly-frontend-v2 | src/lib/constants/{filters,years}.ts | DEFAULT_FILTERS (11 фільтрів), DEFAULT_YEAR = 2025 |
abitly-frontend-v2 | docs/domains/offers/ | домен-доки (overview, api, state, seo…) — першоджерело деталей |
abitly-api-v2 | src/api/{offers,offerApplicants,admission}/, src/database/entities/offer.ts | модулі + entity |
abitly-api-v2 | docs/modules/{offers,offer-applicants}/ | per-entity доки (search-and-filters, admission-score…) — першоджерело бекенд-деталей |
Обмеження та блокери
Section titled “Обмеження та блокери”- Дані — річний снапшот вступної кампанії (роки 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 знаходить їх лише через внутрішні лінки.
Історія змін
Section titled “Історія змін”| Дата | Подія | Джерело |
|---|---|---|
| 2026-05-15/16 | актуалізовано домен-доки offers у фронтенд-репо | abitly-frontend-v2 docs/domains/offers/ |
| 2026-06-13 | створено картку; факти звірено browse + код main | PR Wave 1 |
| 2026-07-10 | інцидент: список читав Typesense-індекс річної давнини (лічильник — Postgres) → «Показати результати (N)» з порожньою видачею; реіндекс автоматизовано (bootstrap + nightly + адмін-тригер, api#574) | пост-мортем |