20b67f11e0
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
19 lines
760 B
JavaScript
19 lines
760 B
JavaScript
import Link from 'next/link';
|
||
|
||
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>
|
||
© {new Date().getFullYear()} ZeroPost — генерируется ИИ, читается людьми
|
||
</div>
|
||
<div className="flex items-center gap-4">
|
||
<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>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
);
|
||
}
|