feat(subscriptions): personal AI subscriptions page #7

Closed
opened 2026-08-07 15:20:11 +03:00 by slaid098 · 0 comments
Owner

Контекст

Нужна статическая страница /subscriptions — личная подборка AI-подписок, которыми владелец пользуется сам («Подписки, которыми пользуюсь сам» / EN «Subscriptions I use myself»). Цель: SEO-трафик + реферальные ссылки. Контент принципиально стабильный: только личный опыт и механика лимитов, без конкретных цифр/моделей/сумм бонусов. Изменчивость покрывается сноской со звёздочкой. Никаких авто-проверок доступности — страница полностью статическая, как /contacts.

(Рекреация ишьюса #139, потерянного с забаненным GitHub-аккаунтом.)

Задача

  1. Роут src/app/[locale]/subscriptions/page.tsx — статическая страница, заголовок, 4 карточки, сноска.
  2. Конфиг src/lib/subscriptions.ts — массив из 4 сервисов (имя, URL):
    • OpenCode Gohttps://opencode.ai/go
    • Synthetic.newhttps://synthetic.new/?referral=KKPRqRfw
    • Ollamahttps://ollama.com
    • Umanshttps://app.umans.ai/register?ref=YZ78E3D7
  3. Секция subscriptions в словарях src/lib/i18n.ts (ru/en): заголовок страницы, тексты карточек, сноска.
  4. Карточка: кликабельный заголовок со стрелкой ↗ (ведёт на URL сервиса) + кнопка «Перейти →» / «Open →» (та же ссылка). Без пометок «рефка» — раскрытие через общую сноску.
  5. Сноска под списком: «* По ссылкам могут действовать бонусы для новых пользователей. Лимиты, тарифы и условия сервисов периодически меняются — актуальные детали уточняйте на сайтах сервисов.» (+ EN).
  6. Ссылка на страницу — только в футер (src/components/site-footer.tsx, текстовая рядом с «сделано Серёгой»). Шапку НЕ трогаем (редизайн — отдельная задача).
  7. src/app/sitemap.ts — добавить роут. Metadata страницы (title/description, ru/en).
  8. Тесты vitest: конфиг (4 сервиса, валидные URL), рендер словарей.

Контракты

Тексты карточек RU (EN — адаптированный перевод):

  • OpenCode Go: «Доступная подписка от авторов OpenCode. Надёжная, понятная, прозрачная. Лимиты работают по окнам: 5-часовое, недельное и месячное — какое окно израсходуешь первым, то и ограничивает.»
  • Synthetic.new: «Скользящие лимиты: 5-часовой и недельный, оба постоянно восстанавливаются. Лимиты можно масштабировать пакетами.»
  • Ollama: «Прозрачный расчёт за серверное время: экономишь токены — получаешь больше запросов. Пользовался обоими тарифами — Pro и Max.»
  • Umans: «Оплата за токены (pay-as-you-go), подписки открывают периодически — раньше были вплоть до безлимитной. Иногда дают кредиты на тестирование новых моделей. Из личного опыта: мою подписку однажды отменили без объяснений — но деньги вернули.»

Инварианты

  • Страница статическая (SSG/ISR как у /contacts), никаких cookies()/headers()/fetch к внешним API.
  • Никаких конкретных цен, сумм бонусов, списков моделей и чисел лимитов в текстах.
  • i18n через существующий словарь src/lib/i18n.ts, обе локали обязательны.

Граничные случаи

  • /en/subscriptions и /ru/subscriptions — обе локали рендерятся.
  • Внешние ссылки: target="_blank" rel="noopener noreferrer".
  • Прямой заход по URL без ссылок в шапке — страница доступна.

Влияние на связанные компоненты

  • src/lib/i18n.ts — новая секция subscriptions в типе Dict и обоих словарях.
  • src/components/site-footer.tsx — одна новая текстовая ссылка.
  • src/app/sitemap.ts — новый роут.
  • docs/project-map/ — дополнить карту проекта.

Вне scope

  • Редизайн шапки / меню навигации (отдельная задача — refactor(header): unified menu navigation).
  • Авто-проверки доступности подписок.
  • Страница 404 (уже влита в PR#138).

Критерии приемки

  • /ru/subscriptions и /en/subscriptions рендерятся статически с 4 карточками по утверждённым текстам.
  • Заголовки карточек и кнопки ведут на URL из конфига (реф-параметры сохранены).
  • Сноска со звёздочкой отображается под списком.
  • Ссылка «Подписки»/«Subscriptions» есть в футере, роут есть в sitemap.
  • Build, lint, тесты зелёные.
## Контекст Нужна статическая страница `/subscriptions` — личная подборка AI-подписок, которыми владелец пользуется сам («Подписки, которыми пользуюсь сам» / EN «Subscriptions I use myself»). Цель: SEO-трафик + реферальные ссылки. Контент принципиально стабильный: только личный опыт и механика лимитов, без конкретных цифр/моделей/сумм бонусов. Изменчивость покрывается сноской со звёздочкой. Никаких авто-проверок доступности — страница полностью статическая, как `/contacts`. (Рекреация ишьюса #139, потерянного с забаненным GitHub-аккаунтом.) ## Задача 1. Роут `src/app/[locale]/subscriptions/page.tsx` — статическая страница, заголовок, 4 карточки, сноска. 2. Конфиг `src/lib/subscriptions.ts` — массив из 4 сервисов (имя, URL): - **OpenCode Go** — `https://opencode.ai/go` - **Synthetic.new** — `https://synthetic.new/?referral=KKPRqRfw` - **Ollama** — `https://ollama.com` - **Umans** — `https://app.umans.ai/register?ref=YZ78E3D7` 3. Секция `subscriptions` в словарях `src/lib/i18n.ts` (ru/en): заголовок страницы, тексты карточек, сноска. 4. Карточка: кликабельный заголовок со стрелкой ↗ (ведёт на URL сервиса) + кнопка «Перейти →» / «Open →» (та же ссылка). Без пометок «рефка» — раскрытие через общую сноску. 5. Сноска под списком: «\* По ссылкам могут действовать бонусы для новых пользователей. Лимиты, тарифы и условия сервисов периодически меняются — актуальные детали уточняйте на сайтах сервисов.» (+ EN). 6. Ссылка на страницу — **только в футер** (`src/components/site-footer.tsx`, текстовая рядом с «сделано Серёгой»). Шапку НЕ трогаем (редизайн — отдельная задача). 7. `src/app/sitemap.ts` — добавить роут. Metadata страницы (title/description, ru/en). 8. Тесты vitest: конфиг (4 сервиса, валидные URL), рендер словарей. ## Контракты Тексты карточек RU (EN — адаптированный перевод): - **OpenCode Go**: «Доступная подписка от авторов OpenCode. Надёжная, понятная, прозрачная. Лимиты работают по окнам: 5-часовое, недельное и месячное — какое окно израсходуешь первым, то и ограничивает.» - **Synthetic.new**: «Скользящие лимиты: 5-часовой и недельный, оба постоянно восстанавливаются. Лимиты можно масштабировать пакетами.» - **Ollama**: «Прозрачный расчёт за серверное время: экономишь токены — получаешь больше запросов. Пользовался обоими тарифами — Pro и Max.» - **Umans**: «Оплата за токены (pay-as-you-go), подписки открывают периодически — раньше были вплоть до безлимитной. Иногда дают кредиты на тестирование новых моделей. Из личного опыта: мою подписку однажды отменили без объяснений — но деньги вернули.» ## Инварианты - Страница статическая (SSG/ISR как у `/contacts`), никаких `cookies()`/`headers()`/fetch к внешним API. - Никаких конкретных цен, сумм бонусов, списков моделей и чисел лимитов в текстах. - i18n через существующий словарь `src/lib/i18n.ts`, обе локали обязательны. ## Граничные случаи - `/en/subscriptions` и `/ru/subscriptions` — обе локали рендерятся. - Внешние ссылки: `target="_blank" rel="noopener noreferrer"`. - Прямой заход по URL без ссылок в шапке — страница доступна. ## Влияние на связанные компоненты - `src/lib/i18n.ts` — новая секция `subscriptions` в типе `Dict` и обоих словарях. - `src/components/site-footer.tsx` — одна новая текстовая ссылка. - `src/app/sitemap.ts` — новый роут. - `docs/project-map/` — дополнить карту проекта. ## Вне scope - Редизайн шапки / меню навигации (отдельная задача — refactor(header): unified menu navigation). - Авто-проверки доступности подписок. - Страница 404 (уже влита в PR#138). ## Критерии приемки - `/ru/subscriptions` и `/en/subscriptions` рендерятся статически с 4 карточками по утверждённым текстам. - Заголовки карточек и кнопки ведут на URL из конфига (реф-параметры сохранены). - Сноска со звёздочкой отображается под списком. - Ссылка «Подписки»/«Subscriptions» есть в футере, роут есть в sitemap. - Build, lint, тесты зелёные.
Sign in to join this conversation.
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#7
No description provided.