Сторінка «Про нас»
Метадані
Section titled “Метадані”| Поле | Значення |
|---|---|
| Статус | 🟢 prod (контент зі Strapi) |
| Поверхні | web |
| Доступність | безкоштовно, без акаунта |
| Власник | @Vladbandurin |
| Останнє підтвердження | 2026-06-14 · curl (abitly.org/uk/about, cms.abitly.org/api/about-page) + код:main (abitly-frontend-v2, abitly-strapi) |
Призначення
Section titled “Призначення”Маркетингова сторінка-візитівка: розповідає, що Abitly — студентський проєкт для абітурієнтів, показує мотивацію («Що нас рухає?»), цінності та команду (фото, ролі, соцмережі). Головна роль — довіра та E-E-A-T-сигнал для SEO.
User flow
Section titled “User flow”Точка входу: https://abitly.org/uk/about (uk) · https://abitly.org/en/about (en). Внутрішній роут — /[locale]/about; мапа PATHNAMES (next-intl) лишає шлях без локалізації (/about → /about, на відміну від блогу /blog → /novyny). Лінк «Про нас» — у головній навігації/футері сайту.
⚠️
abitly.org/uk/pro-nasтеж віддає200, але це не ця сторінка — це загальний catch-all із заголовком головної (Abitly — Допомога абітурієнтам…). Канонічний URL сторінки — лише/{locale}/about(<link rel="canonical" href="https://abitly.org/uk/about">).
- Сервер (
page.tsx, server component) викликаєgetAboutPageData({ locale })→ один запит до Strapi single-typeabout-pageз глибокимpopulate. AboutUs.tsxрендерить 6 секцій із типізованих Strapi-пропсів:HeaderSection(header) ·AbitlySection(intro + preview-зображення) ·MotivationSection(motivation.cards) ·ValuesSection(values.cards з іконками) ·ParticipantsSection(team.participants — фото, роль, соцмережі) ·FooterSection.- Тексти карток/інтро рендеряться через
RichText(markdown-to-jsx) — редактор у Strapi пише форматований текст замість старого i18n-розбиття наpart1/<b>/part2. - ISR:
revalidate = 3600(сторінка пересобирається не частіше разу на годину).
Мережевий шлях Web → Cloudflare (Authenticated Origin Pulls) → Strapi → Postgres уже намальований — див. data-flows, тут не дублюємо.
Дані та API
Section titled “Дані та API”| Джерело | Ендпоінт / entity | Призначення |
|---|---|---|
| Strapi | GET /api/about-page (single-type, locale, deep populate) | весь контент тіла сторінки |
| Strapi | content-type about-page (singleType, draftAndPublish, i18n) | компоненти about.header, about.intro, about.motivation, about.values, about.team, about.footer |
Тіло сторінки — повністю зі Strapi. SEO-метадані (title/description/OG) — окремий шлях: i18n-ключі meta.about.* через getTranslations, не зі Strapi (тому <title> = «Про проєкт…», а Strapi header.title = «Хто ми?» — це різні поля). Альтернативи uk/en — getAlternates(locale, '/about').
Strapi-клієнт — той самий публічний axios instance, що й Статті (strapiApiClient, без auth-interceptors): single-type читається анонімно (перевірено 2026-06-14 на cms.abitly.org/api/about-page, 200, опубліковано в обох локалях id 14/15).
Зв’язки з іншими фічами
Section titled “Зв’язки з іншими фічами”- Статті / блог — той самий Strapi-канал контенту й той самий публічний REST-клієнт.
- Навчальні матеріали — також контент зі Strapi.
| Репо | Шлях | Примітка |
|---|---|---|
abitly-frontend-v2 | src/app/[locale]/(main)/about/page.tsx | server component, ISR revalidate=3600 |
abitly-frontend-v2 | src/components/pages/about-us/** | AboutUs + 6 секцій, RichText, PersonCard, getAboutPageData |
abitly-frontend-v2 | src/components/pages/about-us/metadata/aboutPageMetadata.ts | SEO-метадані з i18n meta.about.* |
abitly-frontend-v2 | src/lib/types/strapi/about-page.ts | TS-типи Strapi-відповіді |
abitly-frontend-v2 | src/api/strapi/{strapi.api,strapi.queries}.ts | getAboutPage() → getSingle('about-page') |
abitly-strapi | src/api/about-page/ + компоненти about.* | single-type «AboutPage», i18n + draftAndPublish |
Обмеження та блокери
Section titled “Обмеження та блокери”- EN-локаль опублікована, але не перекладена: запис
locale=en(id 15) існує іpublished, проте поля містять український текст (header.title= «Хто ми?», intro/values — українською). Тобто/en/aboutпоказує UA-контент.TODO:локалізувати англійський single-type у Strapi. - Метадані ≠ тіло:
<title>/description/OG беруться з i18n (meta.about.*), а не зі Strapi — зміна контенту в CMS не оновлює SEO-теги. За дизайном, але враховувати при правках. - Constraint «Strapi-deploys-first»: фронтенд гейтить порожній single-type (
if (!data) … null); якщо локаль не опублікована — секції просто не рендеряться. Будь-яка зміна структури компонентівabout.*має спершу викотитись у Strapi, потім у фронт. - Застарілий PR #409 (
feat/about-page-strapi, 57 комітів позадуmain) — дубль уже виконаної міграції;TODO:закрити, щоб не плутати.
Історія змін
Section titled “Історія змін”| Дата | Подія | Джерело |
|---|---|---|
| 2025-04 | первинна hardcoded-версія сторінки (i18n + статичний масив команди) | PR #59 «Feat/about us» |
| 2026-06-09 | контент тіла переведено на Strapi single-type about-page; hardcoded-джерела видалено з main; single-type опубліковано (uk+en) | abitly-frontend-v2 commit c3939230 + abitly-strapi src/api/about-page/ |
| 2026-06-14 | створено картку; стан звірено curl + код main (Strapi-driven, live) | PR Wave 1 |