3cc5dafc08
ZeroBlock переработан:
- full-width секция с amber-градиентом и border-y
- hero: квадратный аватар Зеро (kofeиная поза) 32-48px + заголовок + tagline
+ CTA-кнопки 'Все заметки' / '@zeropostru'
- notes карточки: квадратная обложка-поза (image_url из БД) с object-cover,
под ней цитата с line-clamp-6 + 'в Telegram' ссылка если опубликовано
- на главной (compact): 5/7 split — hero слева, 3 карточки справа
- на /zero: hero сверху во всю ширину, сетка из всех карточек ниже
- graceful empty state когда заметок ещё нет
/zero страница упрощена: вся структура внутри ZeroBlock (убран дублирующий
hero с био-bullets — текст консолидирован в один tagline).
26 lines
827 B
JavaScript
26 lines
827 B
JavaScript
import Header from '@/components/Header';
|
|
import Footer from '@/components/Footer';
|
|
import ZeroBlock from '@/components/ZeroBlock';
|
|
import { listZeroNotes } from '@/lib/engine';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
export const metadata = {
|
|
title: 'Заметки от Зеро',
|
|
description: 'Короткие посты от AI-персонажа Зеро — мысли программиста о работе, инструментах и забавных багах',
|
|
};
|
|
|
|
export default async function ZeroPage() {
|
|
const results = await Promise.allSettled([listZeroNotes({ limit: 100 })]);
|
|
const notes = results[0].status === 'fulfilled' ? results[0].value : [];
|
|
|
|
return (
|
|
<>
|
|
<Header />
|
|
<main>
|
|
<ZeroBlock notes={notes} compact={false} />
|
|
</main>
|
|
<Footer />
|
|
</>
|
|
);
|
|
}
|