// Testimonials v2: Text-first — текст главное, скрин маленький в углу const SUBMISSIONS = [ { id: '#047', handle: 'ramil.din', dz: 'дз #3', project: 'личный портфолио-лендинг', caption: 'мой лендинг. спасибо за уроки, было интересно посмотреть, как работает claude — собрал всё вайбом за пару вечеров.', img: window.__IMG['testimonial-1.jpg'], stack: ['landing', 'portfolio'], shipped: '17:47' }, { id: '#052', handle: 'iskander.nuridinov', dz: 'дз #3', project: 'личный финансист (tg-бот)', caption: 'сделал бота финансиста — помню, как Лёша выкладывал такого в инсте, тоже захотелось. парсит расходы голосом и группирует по категориям.', img: window.__IMG['testimonial-2.jpg'], stack: ['tg-bot', 'llm', 'voice'], shipped: '19:44' }, { id: '#063', handle: 'alexandr.k', dz: 'дз #2', project: 'sportai leads — мультиязычный бот', caption: 'бот ведёт диалог с лидами в нише прогнозы на спорт. лид оставляет контакты — заявки прилетают в тг-группу. на 3 языках.', img: window.__IMG['testimonial-3.jpg'], stack: ['tg-bot', 'crm', 'multi-lang'], shipped: '01:01' }, { id: '#071', handle: 'eldar.design', dz: 'дз #3', project: 'mikey pizza nyc — бот-персонаж', caption: 'telegram-бот для доставки пиццы в нью-йорке с характером. общается как бренд-персонаж и собирает заказ в courier-ready формате + промо-лендинг.', img: window.__IMG['testimonial-4.jpg'], stack: ['tg-bot', 'landing', 'character'], shipped: '22:33' }, { id: '#078', handle: 'eldar.a', dz: 'дз #3', project: 'atlantic company — tg + whatsapp бот', caption: 'telegram и whatsapp бот, который консультирует клиентов по остеклению балконов и собирает заказ в телеграм-группу замерщиков.', img: window.__IMG['testimonial-5.jpg'], stack: ['tg-bot', 'whatsapp', 'crm'], shipped: '11:14' }, { id: '#085', handle: 'pavel.lobashkin', dz: 'дз #2', project: 'subpulse — трекер подписок', caption: 'сделал бота, который отслеживает все подписки и напоминает о ближайших списаниях. честно — офигел сколько я трачу в месяц. @paydayforget_bot', img: window.__IMG['testimonial-6.jpg'], stack: ['tg-bot', 'analytics'], shipped: '23:36' }]; function TextCard({ s }) { const [hover, setHover] = React.useState(false); const [openImg, setOpenImg] = React.useState(false); return ( <>
setHover(true)} onMouseLeave={() => setHover(false)} style={{ background: 'var(--bg-1)', border: '1px solid var(--line)', borderRadius: 16, padding: '24px 26px', display: 'flex', flexDirection: 'column', gap: 16, transition: 'border-color .2s, transform .2s', borderColor: hover ? 'var(--accent)' : 'var(--line)', transform: hover ? 'translateY(-2px)' : 'none', minHeight: 240 }}> {/* header */}
{s.id} @{s.handle} · ● shipped {s.shipped}
{/* main row: text + thumb */}
{s.project}
«{s.caption}»
{/* thumbnail */}
{/* stack tags */}
{s.stack.map((t, j) => {t} )} {s.dz}
{openImg &&
setOpenImg(false)} style={{ position: 'fixed', inset: 0, zIndex: 1000, background: 'rgba(0,0,0,0.92)', backdropFilter: 'blur(8px)', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 24, cursor: 'zoom-out' }}> {s.project}
} ); } function Testimonials() { return (
git log --submissions --last=30d } />
{SUBMISSIONS.map((s) => )}
● +40 сдач в чате потока за последние две недели — это не вся группа.
); } window.Testimonials = Testimonials;