feat: журнальная главная, страница Зеро, TG-баннер, stats, auto-publish UI

- Журнальная главная: 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
This commit is contained in:
Nik (Claude)
2026-06-07 14:04:09 +03:00
parent 6f7c47a258
commit 334b2f51df
32 changed files with 2492 additions and 353 deletions
+28
View File
@@ -139,6 +139,34 @@ export default async function ArticlePage({ params }) {
</section>
)}
{/* TG-банер после контента */}
<section className="container-narrow pb-10">
<a
href="https://t.me/zeropostru"
target="_blank"
rel="noopener noreferrer"
className="flex flex-col sm:flex-row items-center gap-4 p-6 rounded-2xl no-underline group transition-all"
style={{ background: 'rgb(var(--accent) / 0.06)', border: '1px solid rgb(var(--accent) / 0.15)' }}
>
<img src="/uploads/zero-avatar.webp" alt="Зеро"
className="w-16 h-16 rounded-xl object-cover shrink-0" />
<div className="flex-1 text-center sm:text-left">
<div className="font-semibold ink mb-1">Понравилась заметка?</div>
<div className="text-sm mute">
Зеро публикует новые материалы каждый день в Telegram.
Подпишитесь следующая уже завтра.
</div>
</div>
<div
className="shrink-0 inline-flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium text-white"
style={{ background: 'rgb(var(--accent))' }}
>
В канал
</div>
</a>
</section>
<ScrollToTop />
<Footer />
</>