refactor(subscriptions): content update, remove footer link, forgejo svg #15

Merged
slaid098 merged 1 commit from refactor/subscriptions-content into main 2026-08-07 17:54:07 +03:00
Owner

Что сделано

Правки страницы /subscriptions (issue #14) — контент, UI, футер.

Изменённые файлы (5)

  • src/lib/i18n.ts — Dict тип (footer.subscriptions удалён, subscriptions.openButton удалён, cards[].description: stringcards[].descriptions: string[]), RU/EN словари обновлены (новые title/description/heading, 4 карточки новыми текстами, Umans — 2 абзаца).
  • src/app/[locale]/subscriptions/page.tsxtext-fg на заголовке карточки (видимый), рендер descriptions.map() (массив абзацев с space-y-3), кнопка «Перейти →» удалена (ссылки только в заголовках).
  • src/components/site-footer.tsx<Link> на /subscriptions удалён (доступ через ☰-меню шапки), GitHub octocat SVG → Forgejo circular mark (упрощённая иконка, aria-label="Forgejo", 16x16).
  • src/__tests__/subscriptions.test.tsc.descriptionc.descriptions (длина массива + каждый элемент), проверки openButton удалены.
  • src/__tests__/subscriptions-metadata.test.ts — новые title/description/OG-title для ru/en.

Удалённые файлы (1)

  • src/__tests__/subscriptions-page.test.tsx — тестировал только footer-ссылку на /subscriptions (удалена).

Карточки RU (verbatim от заказчика)

  • OpenCode Go: «Доступная подписка от авторов OpenCode. Лимиты по окнам: 5-часовое, недельное и месячное — какое израсходуешь первым, то и ограничивает.»
  • Synthetic.new: «Скользящие лимиты: 5-часовой и недельный, оба постоянно восстанавливаются. Лимиты масштабируются пакетами. Внутри — Kimi K3.»
  • Ollama: «Прозрачный расчёт за серверное время: экономишь токены — получаешь больше запросов. Тестировал, как Pro так и Max.»
  • Umans (2 абзаца): «Успел попробовать подписку за 20 USD. Было 400 запросов на 5 часов без недельных лимитов. Code Max попробовать не успел. Единственным ограничением было количество одновременных потоков. Без 5-часовых и недельных лимитов.» + «Есть оплата за токены (pay-as-you-go). Иногда дают кредиты на тестирование новых моделей. Мою подписку однажды отменили без объяснений за несколько дней до продления — но деньги вернули в полном объёме.»

Почему

Заказчик выявил правки при ревью: title «Проверенные подписки» точнее, H1 «...которые я проверил на себе» естественнее, кнопка «Перейти →» избыточна (заголовок-ссылка достаточно), заголовки карточек серые (не видно на тёмном фоне), footer-ссылка на /subscriptions не нужна (доступ через ☰-меню), GitHub-SVG вводит в заблуждение (ссылка на Forgejo).

Watch out

  • biome-ignore lint/suspicious/noArrayIndexKey для key={j} в descriptions.map() — Biome 1.9.4 правило в suspicious (не correctness). Массивы статичные (не переупорядочиваются), index-key безопасен.
  • contacts.test.tsx SVG-index тест (svgs[0] heart, svgs[1] forgejo) — проходит: новый Forgejo SVG один <svg> элемент (несколько <path> внутри), svgs.length >= 2 сохраняется, aria-label="Forgejo" без изменений.
  • subscriptions-metadata.test.ts — дополнительно обновлены OG-title проверки (строки 38/44), не упомянутые в ТЗ, но ссылались на старые «Подписки»/«Subscriptions» и упали бы.
  • Удаление footer.subscriptions — typecheck ловит stale-ссылки. site-footer.tsx был единственным потребителем (обновлён).
  • Forgejo SVG — упрощённая circular mark (точный path недоступен: Codeberg anti-scraping). Не бренд-точная, но однозначно не GitHub octocat.

Pending

  • CI на PR должен запуститься (issue #10 закрыт, ci.yml в .forgejo/workflows/, триггер pull_request восстановлен). Если CI упал на npm cache (issue #13) — это инфра-баг, не блокер review.
  • EN переводы — адаптированные (утверждены заказчиком).

Closes #14

## Что сделано Правки страницы `/subscriptions` (issue #14) — контент, UI, футер. ### Изменённые файлы (5) - `src/lib/i18n.ts` — Dict тип (`footer.subscriptions` удалён, `subscriptions.openButton` удалён, `cards[].description: string` → `cards[].descriptions: string[]`), RU/EN словари обновлены (новые title/description/heading, 4 карточки новыми текстами, Umans — 2 абзаца). - `src/app/[locale]/subscriptions/page.tsx` — `text-fg` на заголовке карточки (видимый), рендер `descriptions.map()` (массив абзацев с `space-y-3`), кнопка «Перейти →» удалена (ссылки только в заголовках). - `src/components/site-footer.tsx` — `<Link>` на `/subscriptions` удалён (доступ через ☰-меню шапки), GitHub octocat SVG → Forgejo circular mark (упрощённая иконка, `aria-label="Forgejo"`, 16x16). - `src/__tests__/subscriptions.test.ts` — `c.description` → `c.descriptions` (длина массива + каждый элемент), проверки `openButton` удалены. - `src/__tests__/subscriptions-metadata.test.ts` — новые title/description/OG-title для ru/en. ### Удалённые файлы (1) - `src/__tests__/subscriptions-page.test.tsx` — тестировал только footer-ссылку на /subscriptions (удалена). ### Карточки RU (verbatim от заказчика) - **OpenCode Go**: «Доступная подписка от авторов OpenCode. Лимиты по окнам: 5-часовое, недельное и месячное — какое израсходуешь первым, то и ограничивает.» - **Synthetic.new**: «Скользящие лимиты: 5-часовой и недельный, оба постоянно восстанавливаются. Лимиты масштабируются пакетами. Внутри — Kimi K3.» - **Ollama**: «Прозрачный расчёт за серверное время: экономишь токены — получаешь больше запросов. Тестировал, как Pro так и Max.» - **Umans** (2 абзаца): «Успел попробовать подписку за 20 USD. Было 400 запросов на 5 часов без недельных лимитов. Code Max попробовать не успел. Единственным ограничением было количество одновременных потоков. Без 5-часовых и недельных лимитов.» + «Есть оплата за токены (pay-as-you-go). Иногда дают кредиты на тестирование новых моделей. Мою подписку однажды отменили без объяснений за несколько дней до продления — но деньги вернули в полном объёме.» ## Почему Заказчик выявил правки при ревью: title «Проверенные подписки» точнее, H1 «...которые я проверил на себе» естественнее, кнопка «Перейти →» избыточна (заголовок-ссылка достаточно), заголовки карточек серые (не видно на тёмном фоне), footer-ссылка на /subscriptions не нужна (доступ через ☰-меню), GitHub-SVG вводит в заблуждение (ссылка на Forgejo). ## Watch out - **`biome-ignore lint/suspicious/noArrayIndexKey`** для `key={j}` в `descriptions.map()` — Biome 1.9.4 правило в `suspicious` (не `correctness`). Массивы статичные (не переупорядочиваются), index-key безопасен. - **`contacts.test.tsx`** SVG-index тест (`svgs[0]` heart, `svgs[1]` forgejo) — проходит: новый Forgejo SVG один `<svg>` элемент (несколько `<path>` внутри), `svgs.length >= 2` сохраняется, `aria-label="Forgejo"` без изменений. - **`subscriptions-metadata.test.ts`** — дополнительно обновлены OG-title проверки (строки 38/44), не упомянутые в ТЗ, но ссылались на старые «Подписки»/«Subscriptions» и упали бы. - **Удаление `footer.subscriptions`** — typecheck ловит stale-ссылки. `site-footer.tsx` был единственным потребителем (обновлён). - **Forgejo SVG** — упрощённая circular mark (точный path недоступен: Codeberg anti-scraping). Не бренд-точная, но однозначно не GitHub octocat. ## Pending - CI на PR должен запуститься (issue #10 закрыт, ci.yml в `.forgejo/workflows/`, триггер `pull_request` восстановлен). Если CI упал на `npm cache` (issue #13) — это инфра-баг, не блокер review. - EN переводы — адаптированные (утверждены заказчиком). Closes #14
refactor(subscriptions): content update, remove footer link, forgejo svg
All checks were successful
CI / check (pull_request) Successful in 1m58s
be9daf8e91
- title «Проверенные подписки»/«Verified Subscriptions», h1 «...которые я проверил на себе»
- карточки: новые тексты RU (verbatim) + EN (адаптированные), Umans — 2 абзаца (descriptions: string[])
- заголовки карточек: text-fg (видимые), кнопка «Перейти →» удалена (ссылки только в заголовках)
- footer: удалена ссылка «Подписки» (доступ через ☰-меню шапки)
- footer: GitHub octocat SVG → Forgejo circular mark (branding consistency)
- i18n: удалены footer.subscriptions, subscriptions.openButton; cards[].description → cards[].descriptions
- тесты: удалён subscriptions-page.test.tsx, обновлены subscriptions.test.ts + subscriptions-metadata.test.ts
Closes #14
Author
Owner

Code Review Summary

Ревью PR #15 (issue #14) — правки контента /subscriptions, UI карточек, футер. Все контракты выполнены: RU-тексты совпадают verbatim с ТЗ, UI корректный, cross-file связи обновлены, тесты зелёные.

Positives

  • Тексты RU verbatim — все 9 текстов (title, description, H1, 4 карточки, 2 абзаца Umans, сноска) совпадают с ТЗ посимвольно, включая тире (—), точки, запятые. Проверено по src/lib/i18n.ts:161-185.
  • EN-тексты — title/description/H1 exact match, 4 карточки presence + разумные адаптированные переводы (src/lib/i18n.ts:276-301).
  • UI карточек — заголовок-ссылка с text-fg (видимый, page.tsx:62), target="_blank" rel="noopener noreferrer", ↗ с aria-hidden. Кнопка «Перейти →» удалена. Umans рендерится через descriptions.map() с space-y-3 (page.tsx:66-73).
  • Футер — ссылка «Подписки»/«Subscriptions» удалена, порядок madeBy · heart(contacts) · forgejo-link верный (site-footer.tsx:7-33). Forgejo SVG — круг с точкой (не GitHub octocat), aria-label="Forgejo", href="https://git.slaid098.dev/slaid098", 16x16.
  • header.subscriptions сохранён — критическая проверка пройдена: ключ ☰-меню не тронут (тип i18n.ts:21, ru :96, en :211, reader site-header.tsx:116). Частая ошибка при удалении footer.subscriptions — избегнута.
  • Структура i18nfooter.subscriptions удалён (тип+ru+en), openButton удалён, cards[].description: stringcards[].descriptions: string[] (тип+ru+en). noUncheckedIndexedAccess соблюдён: card?.descriptions ?? [] (page.tsx:55).
  • Cross-file impactfooter.subscriptions, openButton, card.description (singular) — 0 dangling readers (grep подтвердил). Paired updates в одном PR (writer i18n.ts + readers page.tsx, site-footer.tsx, тесты). Окно сломанного main закрыто.
  • Тестыsubscriptions-page.test.tsx удалён (glob подтвердил отсутствие). subscriptions.test.tsc.descriptions (массив), нет openButton. subscriptions-metadata.test.ts — новые title/description/OG-title для ru/en. contacts.test.tsx — проходит с новым SVG (svgs≥2, aria-label, href, 16x16).
  • biome-ignore для key={j} — обоснован: статичные иммуттабельные массивы, index-key безопасен (page.tsx:68).
  • PR hygiene — title conventional < 72 chars, body 4 heading'а (## Что сделано, ## Почему, ## Watch out, ## Pending) заполнены осмысленно, CI green (run id=130).

Suggestions (info, not blocking)

  • src/tests/contacts.test.tsx:143 [style] Переменная github для второго SVG теперь устарела (это Forgejo SVG, не GitHub). Тест проходит корректно, но имя вводит в заблуждение. Можно переименовать в forgejo для читаемости — косметика, не блокер.
  • src/tests/subscriptions.test.ts:27,34 [style] expect(c.descriptions.length > 0 && c.descriptions.every((d) => d.length > 0)).toBe(true) работает, но менее идиоматично чем раздельные expect(c.descriptions.length).toBeGreaterThan(0) + expect(c.descriptions.every(...)).toBe(true). Косметика, не блокер.

Verdict: APPROVE

## Code Review Summary Ревью PR #15 (issue #14) — правки контента `/subscriptions`, UI карточек, футер. Все контракты выполнены: RU-тексты совпадают verbatim с ТЗ, UI корректный, cross-file связи обновлены, тесты зелёные. ### Positives - **Тексты RU verbatim** — все 9 текстов (title, description, H1, 4 карточки, 2 абзаца Umans, сноска) совпадают с ТЗ посимвольно, включая тире (—), точки, запятые. Проверено по `src/lib/i18n.ts:161-185`. - **EN-тексты** — title/description/H1 exact match, 4 карточки presence + разумные адаптированные переводы (`src/lib/i18n.ts:276-301`). - **UI карточек** — заголовок-ссылка с `text-fg` (видимый, `page.tsx:62`), `target="_blank" rel="noopener noreferrer"`, ↗ с `aria-hidden`. Кнопка «Перейти →» удалена. Umans рендерится через `descriptions.map()` с `space-y-3` (`page.tsx:66-73`). - **Футер** — ссылка «Подписки»/«Subscriptions» удалена, порядок `madeBy · heart(contacts) · forgejo-link` верный (`site-footer.tsx:7-33`). Forgejo SVG — круг с точкой (не GitHub octocat), `aria-label="Forgejo"`, `href="https://git.slaid098.dev/slaid098"`, 16x16. - **`header.subscriptions` сохранён** — критическая проверка пройдена: ключ ☰-меню не тронут (тип `i18n.ts:21`, ru `:96`, en `:211`, reader `site-header.tsx:116`). Частая ошибка при удалении `footer.subscriptions` — избегнута. - **Структура i18n** — `footer.subscriptions` удалён (тип+ru+en), `openButton` удалён, `cards[].description: string` → `cards[].descriptions: string[]` (тип+ru+en). `noUncheckedIndexedAccess` соблюдён: `card?.descriptions ?? []` (`page.tsx:55`). - **Cross-file impact** — `footer.subscriptions`, `openButton`, `card.description` (singular) — 0 dangling readers (grep подтвердил). Paired updates в одном PR (writer `i18n.ts` + readers `page.tsx`, `site-footer.tsx`, тесты). Окно сломанного main закрыто. - **Тесты** — `subscriptions-page.test.tsx` удалён (glob подтвердил отсутствие). `subscriptions.test.ts` — `c.descriptions` (массив), нет `openButton`. `subscriptions-metadata.test.ts` — новые title/description/OG-title для ru/en. `contacts.test.tsx` — проходит с новым SVG (svgs≥2, aria-label, href, 16x16). - **biome-ignore** для `key={j}` — обоснован: статичные иммуттабельные массивы, index-key безопасен (`page.tsx:68`). - **PR hygiene** — title conventional < 72 chars, body 4 heading'а (`## Что сделано`, `## Почему`, `## Watch out`, `## Pending`) заполнены осмысленно, CI green (run id=130). ### Suggestions (info, not blocking) - **src/__tests__/contacts.test.tsx:143** [style] Переменная `github` для второго SVG теперь устарела (это Forgejo SVG, не GitHub). Тест проходит корректно, но имя вводит в заблуждение. Можно переименовать в `forgejo` для читаемости — косметика, не блокер. - **src/__tests__/subscriptions.test.ts:27,34** [style] `expect(c.descriptions.length > 0 && c.descriptions.every((d) => d.length > 0)).toBe(true)` работает, но менее идиоматично чем раздельные `expect(c.descriptions.length).toBeGreaterThan(0)` + `expect(c.descriptions.every(...)).toBe(true)`. Косметика, не блокер. ### Verdict: APPROVE
slaid098 deleted branch refactor/subscriptions-content 2026-08-07 17:54:07 +03:00
Sign in to join this conversation.
No reviewers
No labels
bug
performance
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
slaid098/slaid098-dev!15
No description provided.