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

Каталог та пошук ЗВО

ПолеЗначення
Статус🟢 prod
Поверхніweb
Доступністьбезкоштовно, без акаунта
ВласникTODO:
Останнє підтвердження2026-06-13 · browse (abitly.org/universities → 307 → /uk/universities 200; фільтри/сортування в HTML; uk-/en-universities.xml 200) + код:main (abitly-frontend-v2, abitly-api-v2)

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

Точка входу: https://abitly.org/universities (→ 307 на /uk/universities). Внутрішній роут збігається з публічним URL — у PATHNAMES шлях не локалізується (на відміну від /blog/novyny).

  1. Каталог: картки ЗВО (назва, абревіатура, заяви, середні бали бюджет/контракт, фото) з пагінацією по 12.
  2. Пошуковий рядок → dropdown-саджести ЗВО та регіонів (SearchDropdown): GET /universities/search-params ← Typesense-колекція universities-search-params.
  3. Фільтри: регіони, форма власності (state/private/municipal), рівень акредитації (1–4), гуртожиток. Панель показує лічильники з GET /universities/filter-stats.
  4. Сортування: rank (default, desc) · кількість заяв · бюджетні/контрактні місця · назва.
  5. Весь стан живе в URL query (nuqs: q, regions, ownership, accreditation, hostel, sort, order, page) — посилання з фільтрами шеряться; сервер прі-фетчить той самий стан (SSR + ISR revalidate: 4500).
  6. Клік на картку → /universities/{slug}-{id} — далі сторінка ЗВО. Дотичні поверхні поза цією карткою: /top-universities (рейтинг, 🟢) і /compare (порівняння ЗВО) — карток ще немає, див. індекс.

Mermaid не потрібна: основний флоу — пара frontend↔api; шлях фото зі Strapi через Cloudflare уже намальований у data-flows.

ДжерелоЕндпоінт / entityПризначення
api-v2GET /universities (page, limit, phrase, regionIds, ownershipTypes, accreditationLevels, hasDormitory, sortBy, sortOrder)лістинг; phrase — Postgres ILIKE по name/shortName (uk+en)
api-v2GET /universities/filter-statsлічильники для панелі фільтрів
api-v2GET /universities/search-paramsсаджести ЗВО+регіонів через Typesense (колекція universities-search-params; sync — admin-ендпоінт universities-admin.controller.ts)
Strapicontent-type universities (external_id → id в api-v2)фото ЗВО для карток; публічний REST (перевірено 2026-06-13)

SEO: сторінка indexed, окремі sitemaps uk-universities.xml / en-universities.xml (обидва 200 у prod).

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

Section titled “Зв’язки з іншими фічами”
РепоШляхПримітка
abitly-frontend-v2src/app/[locale]/(main)/universities/page.tsxRSC, revalidate: 4500, prefetch лістингу + filter-stats + Strapi-фото
abitly-frontend-v2src/components/pages/universities/UniversitiesPage/**UI: SearchDropdown, фільтри, картки; hooks/searchParams.ts — nuqs-схема стану
abitly-frontend-v2src/api/universities/{university.api,university.queries,university.types}.tsaxios-функції, TanStack Query hooks, типи
abitly-frontend-v2docs/domains/universities/домен-доки (overview, api, components…) — першоджерело деталей
abitly-frontend-v2src/app/(sitemaps)/{uk,en}-universities.xml/route.tssitemaps каталогу
abitly-api-v2src/api/universities/**, src/api/typesense/**контролер/сервіс ЗВО; Typesense-сервіс і схеми колекцій
  • Жодного auth/tariff-гейтингу — фіча повністю публічна.
  • Повнотекстовий пошук лише в саджестах (Typesense); сам лістинг фільтрується ILIKE по назві — одруки не прощає.
  • Домен-дока docs/domains/universities/components.md (2026-05-15) відстає від main: описує старий client-side Fuse.js-пошук без пагінації, тоді як у prod — серверні фільтри (nuqs) + пагінація по 12.
  • Дані ЗВО (заяви, бали, місця) — періодичний знепшот, не live-фід ЄДЕБО; TODO: зафіксувати періодичність оновлення та механізм sync Typesense-колекцій.
ДатаПодіяДжерело
2026-05-15домен-доки universities у фронтенд-репо (ще з Fuse.js-пошуком)abitly-frontend-v2 docs/domains/universities/
2026-06-13створено картку; пошук уже server-side (nuqs + filter-stats), звірено browse + код mainPR Wave 1