惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
L
LangChain Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Recent Announcements
Recent Announcements
U
Unit 42
Recorded Future
Recorded Future
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
A
Arctic Wolf
N
News and Events Feed by Topic
AI
AI
TaoSecurity Blog
TaoSecurity Blog
S
Security Archives - TechRepublic
美团技术团队
小众软件
小众软件
Blog — PlanetScale
Blog — PlanetScale
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Scott Helme
Scott Helme
N
News and Events Feed by Topic
Webroot Blog
Webroot Blog
Hacker News: Ask HN
Hacker News: Ask HN
V
V2EX
人人都是产品经理
人人都是产品经理
量子位
云风的 BLOG
云风的 BLOG
T
The Blog of Author Tim Ferriss
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog RSS Feed
宝玉的分享
宝玉的分享
I
InfoQ
S
Secure Thoughts
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security @ Cisco Blogs
Microsoft Security Blog
Microsoft Security Blog
IT之家
IT之家
F
Fortinet All Blogs
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threatpost
J
Java Code Geeks
L
LINUX DO - 最新话题
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Афиша для 175 городов без единой строки кода руками: разбираю архитектуру, парсер и спецификацию
Николай · 2026-06-15 · via Все публикации подряд на Хабре

Простой

6 мин

494

Ктоя и почему вообще взялся за код

18 лет я служил в армии и ушёл на пенсию с высокой должности. С 2019 года занимаюсь бизнесом — открыл больше 10 направлений. В IT и программировании опыта у меня не было.

Вайбкодингом я занялся плотно всего четыре месяца назад. Учился, ошибался, пробовал — и сразу на реальных проектах, а не на учебных демках. Дисциплина и привычка разбирать процесс по шагам остались с прежней работы, и они пригодились здесь больше, чем я ожидал.

Первые недели результата почти не было. Я кидал нейросети расплывчатые запросы, она генерировала что‑то, оно ломалось, я просил починить — ломалось другое. Токены уходили тоннами. Перелом случился, когда я перестал смотреть на это как на «накодить по приколу» и начал относиться как к проектированию.

Главное, что я понял: 80% результата это спецификация

Сдвиг в голове простой: код это не 80% работы, а 20%. Остальное — документ, который я пишу до того, как нейросеть что‑то соберёт.

Сначала я сажусь и расписываю продукт целиком. Не «человек ищет событие», а по шагам: открыл приложение, выбрал город, нажал «фильтры», выбрал «эти выходные» и «бесплатное», увидел счётчик «найдено 7 событий», тапнул на карточку. К каждому сценарию — критерии приёмки и ветки ошибок: что показать, если пропала сеть, если результатов ноль, если сервер отдал ошибку.

В спецификации EventMap расписаны:

  • сценарии пользователей — по шагам, с критериями приёмки на каждый;

  • модель данных — какие таблицы, какие связи, кто что имеет право видеть и менять;

  • бизнес‑логика — например, что цену размещения нельзя подделать с фронта, она зашита на сервере;

  • крайние случаи — отдельный блок, который я считаю самым важным. Что делать, если интернет пропал на странице оплаты. Если платёжка прислала уведомление дважды. Если одно событие попало в два канала. Если событие в полночь по Москве, а смотрит его человек из Калининграда. Сюда же — юридические случаи: удаление персональных данных по 152-ФЗ, маркировка рекламы по 38-ФЗ.

Когда документ написан хорошо, Claude Code не придумывает решения на ходу, а реализует ровно то, что описано. Баги перестают быть бесконечными, токены — улетать в пустоту. Это и есть разница между вайбкодером и AI‑архитектором: первый кидает вайбы и надеется, второй сначала проектирует, потом строит. Инструмент один и тот же.

Что получилось сделать

Первым настоящим продуктом по этой системе стал EventMap — афиша городских мероприятий.

Афиши разбросаны по десяткам Telegram-каналов, сайтов и пабликов. Крупные сервисы заточены под стадионные концерты в Москве, а лекция в коворкинге или локальный фестиваль там теряются. Я собрал всё в одном месте — для всей страны, а не для двух столиц.

EventMap живёт сразу на двух площадках из единого кода:

  • сайт events-map.ru — его индексирует Яндекс, люди приходят по запросам вроде «афиша Краснодар»;

  • приложение в Telegram @EventsMapbot — Mini App, открывается в один тап прямо в мессенджере.

Сейчас в каталоге около 175 городов и больше 6000 событий. Наполняется он почти без моего ручного труда — этим занимается AI-парсер. На сборку ушёл месяц, и ни одной строчки кода я не написал руками: я писал спецификацию и правил результат на человеческом языке — «перенеси кнопку», «добавь фильтр по цене», «почини отображение на телефоне».

Дальше — разбор, как это устроено под капотом. Код я не пишу, но проектирую структуру и принимаю инженерные решения. Их и показываю, вместе с тем, на чём наступил.

Архитектура: на чём всё держится

Фронт и Mini App работают на едином стеке: Next.js 16 на App Router, TypeScript в strict-режиме, Tailwind v4, компоненты на shadcn/ui. Деплой — на Vercel.

Бэкенд — Supabase: PostgreSQL 15, около 22 таблиц, на каждой включён RLS (row-level security), то есть права доступа проверяет сама база, а не код приложения. Схему меняю только через миграции, никаких ручных правок в проде. Свойство, которое это даёт: схема всегда восстанавливается из истории миграций и не расходится с тем, что лежит на сервере.

VPS-сервисы — админ-бот на grammy, parser-worker и scheduler — крутятся на Beget под PM2 через tsx и rsync. Без Docker и без сборки в dist: код заливается как есть и запускается напрямую. Для одиночного проекта это меньше слоёв, в которых можно запутаться.

Авторизация организатора идёт через Telegram initData. Роли разведены: visitor, organizer, admin и отдельная ai_parser — у парсера свой уровень доступа, он не равен живому пользователю.

Парсер: где красивая идея встретилась с реальностью

Самая интересная часть — парсер, который наполняет каталог. В спецификации он описан как отдельный AI-агент.

Первый план был через gram.js и MTProto — официальный протокол Telegram. Он не взлетел. Поэтому парсер скрапит web-превью каналов по адресу t.me/s/<username> через cheerio. У решения есть честное ограничение: так видны только публичные каналы. Я выбрал работающий вариант по крайней мене на сегодня так.

Дальше — очередь на BullMQ поверх Redis. Каждый пост уходит в Anthropic Messages API с задачей вытащить структуру события: название, дату, место, цену, категорию. Если это не анонс — модель так и говорит. Основную работу делает claude-sonnet-4-6, лёгкие задачи уходят на claude-haiku-4-5, плюс включён prompt caching, чтобы не платить за одно и то же повторно. Дубликаты одного события из разных каналов система распознаёт и не плодит.

Итог по наполнению честный и неожиданный: supply здоров, событий хватает. Узкое место — не контент, а спрос и выручка. Органических заявок от организаторов почти нет. Это и есть моя реальная задача сейчас, а не «добавить ещё городов».

Монетизация и баг, который полгода ел подсветку

Платёжную модель я упростил до одного тарифа: любая публикация — 999 ₽, всегда с подсветкой (зелёная рамка и приоритет в ленте до даты события). Любое объявление выходит сразу на обеих площадках.

Цены зашиты прямо в роутах и хранятся в копейках целым числом — так их нельзя подделать с фронта. Отдельного lib/pricing.ts нет, источник истины — сами роуты. Решение спорное, и когда я поднимал цену, всплыл спящий баг: флаг boost_priority_until для веб‑флоу не выставлялся нигде. То есть подсветка, за которую платили, де‑факто не работала почти полгода. Сейчас её ставит approve‑роут. Старый тариф на 300 ₽ ушёл в архив, историю заказов я не переписывал.

Платежи лежат в таблице orders. Рекламные баннеры маркирую по закону — поле erid и реквизиты рекламодателя, на странице это рендерит отдельный компонент AdDisclosure.

Свежий ход — YML‑фид /events-feed.xml для блока «Рекомендации событий» в поиске Яндекса. Ключевое решение: фид это привилегия платящих, а не парсера. Критерий «наше размещение» — source='manual', его ставят и форма сайта, и бот. Таргетинг сделал колонкой show_in_yandex_feed плюс триггер BEFORE INSERT — так оба кодовых пути закрылись без правок формы и бота и без передеплоя VPS. В фид попадают около 146 наших размещений, а 1475 спарсенных исключены: раздавать чужим бесплатный поисковый трафик смысла нет.

Принцип, который спас меня от вранья самому себе

Один сквозной принцип всех сессий: факты сверяю с кодом и продом, а не с заметками. Документация дрейфует и не раз вводила в заблуждение — где‑то Метрика числилась «не подключена», где‑то хвост бота «не закоммичен», где‑то аналитика молча ничего не писала. Поэтому цифры в коммерческих предложениях и отчётах беру прямыми запросами к таблицам просмотров и событий баннеров, а не из старых записей.

Для одиночного проекта это спасение. Заметки врут незаметно. Код и база — нет.

Честно про стадию

Год назад такой продукт — сайт, Telegram‑приложение, парсер и каталог на 175 городов — это команда из трёх‑четырёх человек и несколько месяцев. У меня ушёл месяц, и основные затраты — моё время на спецификацию и подписки на инструменты.

Я не делаю вид, что это денежная машина. Supply работает, техника собрана, а спрос и выручка — впереди. Для человека, который четыре месяца назад вообще не открывал код, это результат, который можно потрогать.

Что дальше

EventMap я не бросаю на запуске — буду растить и делиться обновлениями: что добавил, что сработало, а что нет. Параллельно уже веду переговоры о внедрении AI-разработки в бизнес, несколько проектов сделал. О кейсах расскажу отдельно, когда можно будет показать цифры.

Потрогать результат можно прямо сейчас:

Если вы собирали продукт с AI и у вас тоже выходила дичь — пишите в комментариях, интересно как у Вас получается, особенно спец которые так же с нуля сделали дело и зарабатывают на этом