From 334b2f51dfa7ca308b8f782ea3f3c65e06bd74bc Mon Sep 17 00:00:00 2001 From: "Nik (Claude)" Date: Sun, 7 Jun 2026 14:04:09 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B6=D1=83=D1=80=D0=BD=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F,=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0=20?= =?UTF-8?q?=D0=97=D0=B5=D1=80=D0=BE,=20TG-=D0=B1=D0=B0=D0=BD=D0=BD=D0=B5?= =?UTF-8?q?=D1=80,=20stats,=20auto-publish=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Журнальная главная: hero, CategoryRow, PopularBlock, RecentBlock (Сегодня/Вчера/Неделя) - ArticleCard: 3 размера (hero/regular/compact), цветной badge без дублей тегов - ArticleCoverSVG: 6 брендовых палитр, аватар Зеро в углу вместо #ZEROPOST - /about/zero: страница персонажа с галереей 8 поз - Footer: TG-баннер с аватаром Зеро на каждой странице - Конец статьи: блок «Понравилась? → Подписаться на канал» - ChannelEditor: 4 вкладки (Настройки/Расписание/Авто-публикация/Ручная) - AutoPublishTab: toggle, категории, delay, template, live preview - ArticlePicker: typeahead с was_sent_to_channel / next_scheduled_at флагами - /admin/channels/[id]/stats: график роста подписчиков (recharts) - Dashboard: блок TG-статистики (подписчики, delta 24h/7d, постов) - Header: упрощён до 2 пунктов desktop + расширенное мобильное меню - AutogenPanel: корректные time-picker'ы, calcNextRun с учётом last_run_at --- app/about/page.js | 20 +- app/about/zero/page.js | 137 ++++++ app/admin/(protected)/channels/[id]/page.js | 10 +- .../channels/[id]/stats/ChannelStatsClient.js | 194 ++++++++ .../(protected)/channels/[id]/stats/page.js | 50 ++ app/admin/(protected)/page.js | 44 +- .../(protected)/settings/SettingsForm.js | 155 +++++++ app/admin/(protected)/settings/page.js | 24 + app/admin/api/articles/search/route.js | 21 + .../api/channel-stats/[id]/history/route.js | 16 + .../api/channels/[id]/scheduled/route.js | 28 ++ app/admin/api/scheduled/[id]/route.js | 14 + app/admin/api/scheduled/preview/route.js | 15 + app/admin/api/settings/[key]/route.js | 11 + app/admin/api/settings/route.js | 9 + app/blog/[slug]/page.js | 28 ++ app/page.js | 112 +++-- components/ArticleCard.js | 90 +++- components/ArticleCoverSVG.js | 93 ++-- components/CategoryRow.js | 36 ++ components/Footer.js | 33 +- components/Header.js | 60 +-- components/PopularBlock.js | 23 + components/RecentBlock.js | 61 +++ components/admin/AdminNav.js | 3 +- components/admin/ArticlePicker.js | 217 +++++++++ components/admin/AutoPublishTab.js | 306 +++++++++++++ components/admin/AutogenPanel.js | 111 +++-- components/admin/ChannelEditor.js | 432 +++++++++++------- lib/engine.js | 68 +++ package-lock.json | 407 +++++++++++++++++ package.json | 17 +- 32 files changed, 2492 insertions(+), 353 deletions(-) create mode 100644 app/about/zero/page.js create mode 100644 app/admin/(protected)/channels/[id]/stats/ChannelStatsClient.js create mode 100644 app/admin/(protected)/channels/[id]/stats/page.js create mode 100644 app/admin/(protected)/settings/SettingsForm.js create mode 100644 app/admin/(protected)/settings/page.js create mode 100644 app/admin/api/articles/search/route.js create mode 100644 app/admin/api/channel-stats/[id]/history/route.js create mode 100644 app/admin/api/channels/[id]/scheduled/route.js create mode 100644 app/admin/api/scheduled/[id]/route.js create mode 100644 app/admin/api/scheduled/preview/route.js create mode 100644 app/admin/api/settings/[key]/route.js create mode 100644 app/admin/api/settings/route.js create mode 100644 components/CategoryRow.js create mode 100644 components/PopularBlock.js create mode 100644 components/RecentBlock.js create mode 100644 components/admin/ArticlePicker.js create mode 100644 components/admin/AutoPublishTab.js diff --git a/app/about/page.js b/app/about/page.js index ba26a02..778a3f3 100644 --- a/app/about/page.js +++ b/app/about/page.js @@ -1,6 +1,7 @@ import Header from '@/components/Header'; import Footer from '@/components/Footer'; -import { Sparkles } from 'lucide-react'; +import { Sparkles, ArrowRight } from 'lucide-react'; +import Link from 'next/link'; export const metadata = { title: 'О проекте' }; @@ -40,6 +41,23 @@ export default function AboutPage() { Если найдёшь в статьях ошибку или странность — это знак, что человеку всё ещё нужно следить за машиной. Пиши.

+ {/* Ссылка на страницу Зеро */} +
+ +
+ Зеро +
+
Познакомьтесь с Зеро
+
ИИ-маскот блога — кто он и почему от первого лица
+
+
+ + +