Commit Graph

26 Commits

Author SHA1 Message Date
Nik (Claude) 036ee28025 feat: settings page with sidebar categories + secret fields toggle 2026-06-16 09:36:17 +03:00
Nik (Claude) ef5d5f45ff fix: remove metadata export from use client drafts page 2026-06-16 09:34:45 +03:00
Nik (Claude) b9abbc4246 feat: /admin/drafts — draft review page with approve/regen cover 2026-06-16 09:19:13 +03:00
Ник (Claude) d6cf4d3f0e fix: channelStats not defined on admin dashboard 2026-06-10 09:16:35 +03:00
Ник (Claude) 290fc160cc feat: Заметки редактора в admin zeropost.ru
- app/admin/(protected)/notes/page.js: управление заметками
- app/admin/api/notes/route.js: GET+POST прокси к engine
- app/admin/api/notes/[id]/route.js: PATCH+DELETE
- lib/engine.js: createNote, updateNote, deleteNote
- components/admin/AdminNav.js: пункт «Заметки» с иконкой
2026-06-09 11:55:55 +03:00
Nik (Claude) 334b2f51df 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
2026-06-07 14:04:09 +03:00
Alexey Pavlov 6f7c47a258 feat: hero, metadata, OG — extend to AI + cybersec + automation + dev 2026-06-01 12:24:04 +03:00
Alexey Pavlov 9c9758865b feat: default to light theme on zeropost.ru 2026-05-31 18:57:26 +03:00
Alexey Pavlov 14e1fd14df feat: autogen time picker, channel schedule tab with publish slots 2026-05-31 16:45:16 +03:00
Alexey Pavlov 980d39c6a0 feat: autogen admin panel — schedule, queue, topic bank, run controls 2026-05-31 14:48:38 +03:00
Alexey Pavlov 14053131cd feat: categories — pages, nav, home block, admin editor select 2026-05-31 14:43:28 +03:00
Alexey Pavlov 80325b4435 feat: admin channels — list, editor, publish panel, TG/VK/Max support 2026-05-31 14:37:50 +03:00
Alexey Pavlov 4d425ec201 fix: move admin pages to (protected) group layout to fix login redirect loop 2026-05-31 14:23:36 +03:00
Alexey Pavlov 5fc85a31d4 feat: admin panel — dashboard, articles list, editor, auth, cover regen, AI generate 2026-05-31 14:17:58 +03:00
Alexey Pavlov e968dbfd1f feat: favicon, webmanifest, og-default, improved SEO metadata + twitter cards + canonical 2026-05-31 13:46:42 +03:00
Alexey Pavlov 20b67f11e0 feat: TOC оглавление + SVG-обложки-фоллбеки + /archive
TOC:
- renderMarkdownWithToc: парсит h2/h3, генерит транслит-якоря для кириллицы, возвращает {html, toc}
- TableOfContents компонент: sticky на десктопе, раскрывающийся блок на мобиле
- IntersectionObserver-free подсветка активной секции через scroll listener
- Двухколоночный layout статьи на lg+: 240px TOC + контент

SVG-обложки:
- ArticleCoverSVG: процедурно сгенерированная композиция (curve/circle/arc/rect) по seed = id статьи
- 6 палитр на выбор (emerald/teal/yellow/blue/purple/orange), seed детерминированный
- Используется в ArticleCard как fallback когда cover_url пусто
- На странице статьи тоже SVG если обложки нет
- Тег статьи отображается лейблом в углу

Архив:
- /archive: все статьи сгруппированы по месяцам, компактный список
- В Header добавлен пункт Архив (desktop+mobile)
- В Footer ссылки на Архив, Заметки, О проекте
- В sitemap.xml включён /archive
2026-05-31 10:54:34 +03:00
Alexey Pavlov 03c10eab6e feat: серии + count-up в Stats
- SeriesGrid: карточки серий с иконками (Sparkles/Plug/Zap/Layers) и цветовыми темами
- /series/[slug]: страница серии с интро и сеткой статей в порядке из article_ids
- Stats: count-up анимация (easeOutQuart 1.2s) при появлении в viewport через IntersectionObserver
- sitemap.xml: добавлены /notes и все серии
2026-05-31 10:10:18 +03:00
Alexey Pavlov c27985614e feat: блок «Сейчас» + «Заметки редактора» + ArticleMeta
- NowBlock: live indicator (последняя статья / идёт генерация) + bar-чарт за 7 дней
- NotesBlock: карточки заметок редактора с pin
- /notes: отдельная страница со всеми заметками
- ArticleMeta: раскрывающийся блок «Как сделана эта статья» на странице статьи
- В шапку добавлена ссылка «Заметки» (desktop и mobile)
2026-05-31 10:05:28 +03:00
Alexey Pavlov 3154b47578 fix(mobile): hero — картинка как фон секции, текст поверх
- HeroImage: на мобилке картинка позиционируется фоном за текстом, opacity 0.45
- Сильный mask-gradient к левому-нижнему углу, чтобы заголовок читался
- Софт-вуаль поверх фона (background var(--bg) с убывающей прозрачностью)
- Секция hero: min-h-[88vh] на мобиле, текст по центру по вертикали
- В тёмной теме мобильная opacity ещё ниже (0.32)
- Десктоп без изменений
2026-05-31 10:00:25 +03:00
Alexey Pavlov 6aff8cd6d9 feat: hero illustration — настоящая картинка вместо blob-фона
- HeroImage компонент: WebP с 3 размерами (800/1280/1920) + <picture> srcset
- На десктопе: справа, fade с левого края, lёгкий parallax при скролле
- На мобиле: сверху, фейд к контенту, без parallax
- В тёмной теме картинка приглушается opacity 0.55 + filter
- max-width текстового блока скорректирован чтобы не наезжать на иллюстрацию
2026-05-31 09:58:01 +03:00
Alexey Pavlov 4702614896 feat: мобильная версия + поиск + SEO-инфраструктура
Мобилка:
- Header: hide-on-scroll, мобильный burger-menu, тонкая адаптация
- Hero: текст и кнопки оптимизированы под узкие экраны (full-width buttons)
- ArticleCard featured: на мобилке в столбик, картинка сверху
- Stats: компактная сетка 2x2 с уменьшенным шрифтом
- Глобально: scroll-behavior smooth, safe-area-inset, tap targets 40px+
- prefers-reduced-motion respected

Страница статьи:
- ReadingProgress: прогресс-бар сверху при скролле
- ScrollToTop: круглая кнопка наверху после 800px скролла
- ShareButton: Web Share API на мобилках, копирование URL на десктопе
- Related articles: подбираем по пересечению тегов (max 3)
- Мобильная типографика: prose-base sm:prose-lg, leading-relaxed

SEO/инфра:
- /api/search: простой поиск по title/excerpt/tags с подсветкой и скорингом
- SearchBox: оверлей с / хоткеем, дебаунс 250ms, мобиле-friendly
- /rss.xml: полноценный RSS-фид
- sitemap.xml: динамический через next sitemap()
- robots.txt: динамический
- viewport metadata + theme-color для светлой/тёмной темы
- alternates rel=alternate type=application/rss+xml
2026-05-31 09:43:11 +03:00
Alexey Pavlov 9e77f920c1 ui: убрана кнопка "Кабинет" и упоминания сервиса как продукта
- Header: убрана кнопка "Кабинет" → только статьи / о проекте / переключатель темы
- Hero: вторая кнопка теперь ведёт на /about ("Как это работает"), убрано рекламное упоминание сервиса
- Страница статьи: убран CTA-блок "Открыть ZeroPost" в конце, оставлена только короткая заметка
- Footer: убрана ссылка на app.zeropost.ru
- About: переписан текст — это блог-эксперимент, не лендинг продукта
2026-05-31 09:25:10 +03:00
Alexey Pavlov b1c09aa53f feat: оживление сайта — обложки, hero-фон, статистика, анимации
- ArticleCard: реальные обложки с fallback на детерминированный градиент по id статьи
- HeroBackground: 3 анимированных blob'а + dot-grid + плавный fade к контенту
- Stats компонент: 4 карточки — статьи / минуты чтения / токены / просмотры
- Reveal компонент: IntersectionObserver-based fade-in при скролле, respect prefers-reduced-motion
- next.config: rewrites /uploads/* → engine, чтобы картинки работали с относительными путями
- На странице статьи — обложка над контентом
2026-05-31 09:17:08 +03:00
Alexey Pavlov a16bf812e4 feat: светлая тема как основная + переключатель тем
- CSS-переменные --bg, --surface, --ink, --mute, --accent для обеих тем
- darkMode: 'class' в Tailwind config
- ThemeToggle компонент с Sun/Moon, сохраняет выбор в localStorage
- Inline-скрипт в layout.js защищает от FOUC (FlashOfUnstyledContent)
- Авто-определение по prefers-color-scheme как fallback
- not-found.js: красивая 404 страница вместо дефолтной Next
- Обновлены все компоненты и страницы — Header, Footer, ArticleCard, page.js, blog, tag, about
2026-05-31 09:07:44 +03:00
Alexey Pavlov d8d1affcc8 fix: force-dynamic rendering on content pages — engine может отвечать с задержкой 2026-05-31 08:58:59 +03:00
Alexey Pavlov 6dfe8b8afa feat: zeropost-web — публичный AI-блог на zeropost.ru
- Next.js 16, Tailwind с @tailwindcss/typography
- Главная: hero, featured-статья, сетка карточек, облако тегов
- /blog/[slug]: статья со SSG + revalidate 60s, prose typography
- /tag/[name]: фильтр по тегам
- /about: про проект
- /api/cron/generate: endpoint для авто-генерации (защищён x-cron-token)
- SEO: dynamic metadata, OG, sitemap-ready
- Лента грузится с zeropost-engine /api/articles
2026-05-31 08:50:35 +03:00