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
+31 -2
View File
@@ -1,13 +1,42 @@
import Link from 'next/link';
import { Send } from 'lucide-react';
export default function Footer() {
return (
<footer className="border-t-soft mt-20">
<div className="container-wide py-10 flex flex-col sm:flex-row items-center justify-between gap-4 text-sm mute">
<div>
{/* TG-банер */}
<div className="border-b-soft">
<div className="container-wide py-6 flex flex-col sm:flex-row items-center justify-between gap-4">
<div className="flex items-center gap-3">
<div className="w-10 h-10 rounded-xl overflow-hidden shrink-0">
<img src="/uploads/zero-avatar.webp" alt="Зеро" className="w-full h-full object-cover" />
</div>
<div>
<div className="text-sm font-semibold ink">ZeroPost в Telegram</div>
<div className="text-xs mute">Каждый день анонс новой заметки от Зеро</div>
</div>
</div>
<a
href="https://t.me/zeropostru"
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors shrink-0"
style={{ background: 'rgb(var(--accent))' }}
>
<Send className="w-3.5 h-3.5" />
Подписаться
</a>
</div>
</div>
{/* Обычный footer */}
<div className="container-wide py-8 flex flex-col sm:flex-row items-center justify-between gap-4 text-sm mute">
<div className="flex items-center gap-2">
<img src="/uploads/zero-avatar.webp" alt="" className="w-5 h-5 rounded opacity-60" />
© {new Date().getFullYear()} ZeroPost генерируется ИИ, читается людьми
</div>
<div className="flex items-center gap-4">
<Link href="/about/zero" className="hover:ink transition-colors">Кто такой Зеро?</Link>
<Link href="/archive" className="hover:ink transition-colors">Архив</Link>
<Link href="/notes" className="hover:ink transition-colors">Заметки</Link>
<Link href="/about" className="hover:ink transition-colors">О проекте</Link>