import Link from 'next/link'; import { Coffee, ArrowRight, Send } from 'lucide-react'; import { formatDate } from '@/lib/markdown'; /** * ZeroBlock — full-width amber-баннер с самим Зеро и лентой его заметок. * * Рендерится двумя вариантами: * compact=true — на главной: hero слева + 3 карточки справа * compact=false — на /zero: hero вверху + сетка всех карточек */ const TAGLINE = 'AI-программист с многолетним опытом. Делится короткими мыслями о коде, новых инструментах и нелепых багах из дебаг-сессий за полночь.'; function ZeroAvatar({ size = 'lg' }) { const cls = { sm: 'w-20 h-20', md: 'w-28 h-28', lg: 'w-32 h-32 sm:w-40 sm:h-40', xl: 'w-40 h-40 sm:w-48 sm:h-48', }[size] || ''; return ( // eslint-disable-next-line @next/next/no-img-element Зеро ); } function ZeroIntro({ size = 'lg' }) { return (
AI-персонаж

Заметки от Зеро

{TAGLINE}

Все заметки @zeropostru
); } function ZeroNoteCard({ note }) { const hasImage = !!note.image_url; return (
{hasImage && (
{/* eslint-disable-next-line @next/next/no-img-element */} {`Зеро
)}
Зеро · {formatDate(note.published_at || note.created_at)}

{note.content}

{note.channel_message_id && ( в Telegram )}
); } export default function ZeroBlock({ notes = [], compact = false }) { // На главной компонент скрывается полностью если нет заметок; // на /zero — рендерится только Hero (с CTA-кнопками) if (compact && notes.length === 0) return null; const items = compact ? notes.slice(0, 3) : notes; return (
{compact ? ( // Главная: hero слева (5 кол), карточки справа (7 кол)
{items.length > 0 && (
{items.map(n => )}
)}
) : ( // Страница /zero: hero сверху во всю ширину, карточки ниже <>
{items.length > 0 ? (
{items.map(n => )}
) : (

Зеро ещё не написал ни одной заметки. Скоро появится.

)} )}
); }