Каталог та пошук ЗВО
Метадані
Section titled “Метадані”| Поле | Значення |
|---|---|
| Статус | 🟢 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) |
Призначення
Section titled “Призначення”Каталог усіх ЗВО України: абітурієнт знаходить університет за назвою чи регіоном, звужує вибір фільтрами (власність, акредитація, гуртожиток) і переходить на сторінку ЗВО. Головна «воронка» сайту в бік конкурсних пропозицій.
User flow
Section titled “User flow”Точка входу: https://abitly.org/universities (→ 307 на /uk/universities). Внутрішній роут збігається з публічним URL — у PATHNAMES шлях не локалізується (на відміну від /blog → /novyny).
- Каталог: картки ЗВО (назва, абревіатура, заяви, середні бали бюджет/контракт, фото) з пагінацією по 12.
- Пошуковий рядок → dropdown-саджести ЗВО та регіонів (
SearchDropdown):GET /universities/search-params← Typesense-колекціяuniversities-search-params. - Фільтри: регіони, форма власності (
state/private/municipal), рівень акредитації (1–4), гуртожиток. Панель показує лічильники зGET /universities/filter-stats. - Сортування:
rank(default, desc) · кількість заяв · бюджетні/контрактні місця · назва. - Весь стан живе в URL query (nuqs:
q,regions,ownership,accreditation,hostel,sort,order,page) — посилання з фільтрами шеряться; сервер прі-фетчить той самий стан (SSR + ISRrevalidate: 4500). - Клік на картку →
/universities/{slug}-{id}— далі сторінка ЗВО. Дотичні поверхні поза цією карткою:/top-universities(рейтинг, 🟢) і/compare(порівняння ЗВО) — карток ще немає, див. індекс.
Mermaid не потрібна: основний флоу — пара frontend↔api; шлях фото зі Strapi через Cloudflare уже намальований у data-flows.
Дані та API
Section titled “Дані та API”| Джерело | Ендпоінт / entity | Призначення |
|---|---|---|
| api-v2 | GET /universities (page, limit, phrase, regionIds, ownershipTypes, accreditationLevels, hasDormitory, sortBy, sortOrder) | лістинг; phrase — Postgres ILIKE по name/shortName (uk+en) |
| api-v2 | GET /universities/filter-stats | лічильники для панелі фільтрів |
| api-v2 | GET /universities/search-params | саджести ЗВО+регіонів через Typesense (колекція universities-search-params; sync — admin-ендпоінт universities-admin.controller.ts) |
| Strapi | content-type universities (external_id → id в api-v2) | фото ЗВО для карток; публічний REST (перевірено 2026-06-13) |
SEO: сторінка indexed, окремі sitemaps uk-universities.xml / en-universities.xml (обидва 200 у prod).
Зв’язки з іншими фічами
Section titled “Зв’язки з іншими фічами”- Сторінка ЗВО — ціль кліку з каталогу; формат slug
{name}-{id}. - Каталог спеціальностей / офферів — паралельна воронка; той самий Typesense-стек (окремі колекції
offers,search-params). - Порівняння ЗВО (
/compare) — використовує ті ж саджести (useUniversitySearchOptions); картки немає, див. індекс.
| Репо | Шлях | Примітка |
|---|---|---|
abitly-frontend-v2 | src/app/[locale]/(main)/universities/page.tsx | RSC, revalidate: 4500, prefetch лістингу + filter-stats + Strapi-фото |
abitly-frontend-v2 | src/components/pages/universities/UniversitiesPage/** | UI: SearchDropdown, фільтри, картки; hooks/searchParams.ts — nuqs-схема стану |
abitly-frontend-v2 | src/api/universities/{university.api,university.queries,university.types}.ts | axios-функції, TanStack Query hooks, типи |
abitly-frontend-v2 | docs/domains/universities/ | домен-доки (overview, api, components…) — першоджерело деталей |
abitly-frontend-v2 | src/app/(sitemaps)/{uk,en}-universities.xml/route.ts | sitemaps каталогу |
abitly-api-v2 | src/api/universities/**, src/api/typesense/** | контролер/сервіс ЗВО; Typesense-сервіс і схеми колекцій |
Обмеження та блокери
Section titled “Обмеження та блокери”- Жодного auth/tariff-гейтингу — фіча повністю публічна.
- Повнотекстовий пошук лише в саджестах (Typesense); сам лістинг фільтрується
ILIKEпо назві — одруки не прощає. - Домен-дока
docs/domains/universities/components.md(2026-05-15) відстає від main: описує старий client-side Fuse.js-пошук без пагінації, тоді як у prod — серверні фільтри (nuqs) + пагінація по 12. - Дані ЗВО (заяви, бали, місця) — періодичний знепшот, не live-фід ЄДЕБО;
TODO:зафіксувати періодичність оновлення та механізм sync Typesense-колекцій.
Історія змін
Section titled “Історія змін”| Дата | Подія | Джерело |
|---|---|---|
| 2026-05-15 | домен-доки universities у фронтенд-репо (ще з Fuse.js-пошуком) | abitly-frontend-v2 docs/domains/universities/ |
| 2026-06-13 | створено картку; пошук уже server-side (nuqs + filter-stats), звірено browse + код main | PR Wave 1 |