refactor(subscriptions): content update, remove footer link, forgejo svg #14
Labels
No labels
bug
performance
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
slaid098/slaid098-dev#14
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Контекст
Страница
/subscriptions(PR #9, issue #7) влита и в проде. При ревью заказчиком выявлены правки контента и UI:text-fgк классу заголовка. Сейчасtext-base font-semibold tracking-tight transition hover:text-accentнаследует серый от родителя, на тёмном фоне почти невидим.cards: { description: string }[](одно описание). Изменить наcards: { descriptions: string[] }[](массив абзацев), Umans получит 2 элемента.src/components/site-footer.tsx) ссылка «Подписки»/«Subscriptions» (добавлена в PR #9) не нужна — доступ через ☰-меню шапки (PR #11) достаточен.hrefведёт наgit.slaid098.dev(Forgejo). Визуальный диссонанс (GitHub-аккаунт забанен). Заменить на логотип Forgejo (упрощённая circular mark если точный path недоступен).Задача
src/lib/i18n.ts:footer.subscriptions(поле типа Dict + ruDict + enDict).subscriptions.openButton(поле типа Dict + ruDict + enDict).subscriptions.cards[].description: string→subscriptions.cards[].descriptions: string[](тип Dict + оба словаря).descriptions).src/app/[locale]/subscriptions/page.tsx::62): добавитьtext-fg.<a>, строки 67-74).card.descriptions.map((d, j) => <p ...>{d}</p>)с обёрткойspace-y-3(илиmt-2/mt-3по индексу).src/components/site-footer.tsx:<Link>на/subscriptions(весь блок: разделитель·+ Link).aria-labelостаётся «Forgejo»,hrefостаётсяgit.slaid098.dev/slaid098, размер 16x16.src/lib/subscriptions.ts— без изменений (URL/имена те же).src/__tests__/subscriptions-page.test.tsx— удалить файл (тестировал только footer-ссылку на /subscriptions).src/__tests__/subscriptions.test.ts—c.description→c.descriptions(длина массива + каждый элемент), удалить проверкиopenButton.src/__tests__/subscriptions-metadata.test.ts— новые title/description для ru/en.src/__tests__/contacts.test.tsx— проверить что не падает (SVG path меняется но<svg>count иaria-labelостаются — должно пройти).Контракты
Тексты RU (verbatim от заказчика)
* По ссылкам могут действовать бонусы для новых пользователей. Лимиты, тарифы и условия сервисов периодически меняются — актуальные детали уточняйте на сайтах сервисов.)Карточки RU (verbatim)
descriptions: ["Доступная подписка от авторов OpenCode. Лимиты по окнам: 5-часовое, недельное и месячное — какое израсходуешь первым, то и ограничивает."])descriptions: ["Скользящие лимиты: 5-часовой и недельный, оба постоянно восстанавливаются. Лимиты масштабируются пакетами. Внутри — Kimi K3."])descriptions: ["Прозрачный расчёт за серверное время: экономишь токены — получаешь больше запросов. Тестировал, как Pro так и Max."])descriptions: ["Успел попробовать подписку за 20 USD. Было 400 запросов на 5 часов без недельных лимитов. Code Max попробовать не успел. Единственным ограничением было количество одновременных потоков. Без 5-часовых и недельных лимитов.", "Есть оплата за токены (pay-as-you-go). Иногда дают кредиты на тестирование новых моделей. Мою подписку однажды отменили без объяснений за несколько дней до продления — но деньги вернули в полном объёме."])Тексты EN (адаптированные переводы, утверждены заказчиком)
* Bonuses for new users may apply via the links. Limits, pricing, and terms change periodically — check the services' sites for current details.)Карточки EN (адаптированные)
["An affordable subscription from the makers of OpenCode. Limits by windows: 5-hour, weekly, and monthly — whichever you exhaust first is the one that limits you."]["Sliding limits: 5-hour and weekly, both continuously refill. Limits scale in packages. Inside — Kimi K3."]["Transparent billing for server time: save tokens — get more requests. Tested both Pro and Max."]["Tried the $20 subscription. Had 400 requests per 5 hours with no weekly limits. Didn't get to try Code Max. The only constraint was the number of concurrent threads. No 5-hour or weekly limits.", "There's also pay-as-you-go token billing. Sometimes credits are given for testing new models. My subscription was once cancelled without explanation a few days before renewal — but the money was fully refunded."]Forgejo SVG (запасной план)
Точный SVG path Forgejo недоступен через webfetch (Codeberg anti-scraping, GitHub mirror 404). Fallback: упрощённая circular mark (круг с заливкой, схожая с Gitea/forgejo brand). Не бренд-точная, но однозначно не GitHub octocat.
aria-label="Forgejo", размер 16x16,fill="currentColor"(наследуетtext-muted).Инварианты
cookies()/headers()/fetch к внешним API.target="_blank" rel="noopener noreferrer".src/lib/subscriptions.ts.any.noUncheckedIndexedAccess(индексный доступT | undefined→ guard?? []/?? ""),exactOptionalPropertyTypes.Граничные случаи
/ru/subscriptionsи/en/subscriptions— обе локали рендерятся с новыми текстами.space-y-3илиmt-3на втором<p>).madeBy·heart(contacts)·forgejo-link(SVG). Разделители·сохраняются.contacts.test.tsxSVG-index тест (svgs[0]heart,svgs[1]forgejo) — если новый Forgejo SVG имеет несколько<path>элементов внутри одного<svg>, тестsvgs.length >= 2проходит (проверяет количество<svg>, не<path>).subscriptions-page.test.tsxудаляется — покрытые им 2 теста (footer-ссылка ru/en) больше не нужны.Влияние на связанные компоненты
src/lib/i18n.ts— секцияsubscriptions(тип, ruDict, enDict), полеfooter.subscriptions(тип, ruDict, enDict). Удаление полей → typecheck ловит stale-ссылки в потребителях.src/app/[locale]/subscriptions/page.tsx— рендер карточек, заголовок, кнопка удалена.src/components/site-footer.tsx— удаление subscriptions-Link, замена SVG.src/__tests__/subscriptions-page.test.tsx— удалить.src/__tests__/subscriptions.test.ts— обновить проверки (descriptionsвместоdescription, убратьopenButton).src/__tests__/subscriptions-metadata.test.ts— новые title/description.src/__tests__/contacts.test.tsx— проверить (должен пройти, SVG count/aria-label не меняются).src/components/site-header.tsx— НЕ трогать (☰-меню содержит «Подписки», остаётся).src/app/sitemap.ts— НЕ трогать (роут/subscriptionsуже есть).biome.json— НЕ трогать (override дляsubscriptions/page.tsxуже есть).Вне scope
Критерии приемки
/ru/subscriptionsи/en/subscriptionsрендерятся с новыми title/H1/description/карточками.text-fg), кликабельные (имя + ↗), ведут на URL из конфига.aria-label="Forgejo",href="git.slaid098.dev/slaid098"./subscriptions(не затронуто)..forgejo/workflows/, триггер восстановлен issue #10).