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

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
N
News and Events Feed by Topic
Latest news
Latest news
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
CXSECURITY Database RSS Feed - CXSecurity.com
IT之家
IT之家
V
V2EX
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
小众软件
小众软件
A
Arctic Wolf
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
G
GRAHAM CLULEY
罗磊的独立博客
T
Tor Project blog
C
Cisco Blogs
美团技术团队
博客园 - Franky
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
Cyberwarzone
Cyberwarzone
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
有赞技术团队
有赞技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Security Latest
Security Latest
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
Spread Privacy
Spread Privacy
J
Java Code Geeks
C
CERT Recently Published Vulnerability Notes
大猫的无限游戏
大猫的无限游戏
S
Securelist
The Cloudflare Blog
博客园 - 叶小钗
D
Darknet – Hacking Tools, Hacker News & Cyber Security
阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
Project Zero
Project Zero

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

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет 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 миллионов точек без потерь
Как я собрал Telegram-бота и игру с Codex
Basil9000 · 2026-05-03 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение7 мин

Охват и читатели340

Кейс

Я поставил себе два челленджа.

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

Второй — попробовать сделать полноценную игровую механику, причем не просто UI-игрушку, а что-то с 3D, сценой, камерой, эффектами и состояниями персонажей. Я не разработчик в классическом смысле, поэтому для меня это был хороший способ проверить, насколько далеко можно уехать с Codex, если у тебя есть продуктовая голова, дизайн-насмотренность и нормальное понимание, что именно ты хочешь получить.

В итоге получился Telegram-бот, который принимает фото чека, скрин банковской транзакции, PDF или просто текст операции, вытаскивает из этого сумму, дату, мерчанта, позиции в чеке, предлагает категорию и сохраняет трату. А поверх этого я привязал игру «Катись и дерись», чтобы учет расходов не был тупой таблицей, а стал живым циклом с прогрессом, дофамином и возвращаемостью.

Логика такая: сначала можно добавить один чек сразу. Потом включается игровая механика — чтобы сканировать дальше, нужно поиграть. За каждые 9000 метров в гонке или за каждые 3 победы в файтинге открывается новый скан. Так полезное действие, то есть учет расходов, связывается с игровым действием: проехал, победил, заработал прогресс, получил возможность снова распарсить чек.

Как я начинал работу с Codex

Тот еще промпт-инженер

Тот еще промпт-инженер

Первый промпт у меня почти всегда довольно тупой, потому что я не пытаюсь с первого раза написать идеальное ТЗ как инженер. Я скорее описываю человеческим языком, что хочу получить, а дальше смотрю, что Codex предлагает. Потом уже отрезаю лишнее, уточняю, развиваю нужное и постепенно сужаю задачу.

Я не стал активно пользоваться plan mode. Не потому что он плохой, а потому что сам могу распланировать продукт и архитектуру на уровне логики. У меня уже был опыт, когда я включал code review и за час сжирал дневной лимит токенов, поэтому в этом проекте я старался делать сам всё, что могу: разложить фичи, понять последовательность, решить, что важно сейчас, а что можно отложить.

То есть Codex для меня был не “сделай мне весь проект с нуля магией”, а скорее рабочий напарник: я задаю направление, он предлагает реализацию, я проверяю глазами дизайнера и продуктового человека, потом корректирую.

Базовый бот

Все как у людей

Все как у людей

Первый слой проекта был достаточно простой: Telegram-бот на Python + Aiogram.

Он принимает входящие материалы: фото чеков, скрины банковских операций, PDF и текстовые сообщения. Дальше через OpenAI идет OCR и структурирование: бот пытается вытащить дату, сумму, мерчанта, список позиций, если это чек, и предложить категорию. После этого всё сохраняется в PostgreSQL.

Категоризация пока не идеальная, ее еще нужно дорабатывать. Особенно важна ручная коррекция категорий, потому что сейчас бот местами раскладывает траты не так, как нужно. Но это уже понятная рутинная часть: я такое проходил, это не исследовательская проблема, а вопрос доведения качества.

Потом я добавил команды аналитики: отчеты, месяц, категории, топ трат. То есть базово это уже не просто парсер чеков, а контур учета расходов.

Почему появилась игра

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

Поэтому я решил привязать к нему игру.

Сначала это была гонка: машина едет вперед, собирает монеты, считает дистанцию, скорость, опыт. Дальше появилась идея: если машина едет бесконечно, почему она в какой-то момент падает или останавливается? Я показывал игру дома и Олегу, и логичный вопрос “почему машина падает после примерно 15000 метров?” привел к идее добавить битву за топливо.

Типа бензин закончился — значит, на заправке начинается драка. Так в проекте появился файтинг.

Это сразу хорошо легло в общий сеттинг: ретрофутуризм, synthwave, киберпанк, неоновая трасса, закат, драка в стиле аркадных файтингов. Получилась связка: едешь, собираешь монетки, набираешь дистанцию, попадаешь в боевую сцену, побеждаешь, получаешь прогресс, открываешь новые сканы чеков.

3D-гонка на Three.js

Нормальная гонка

Нормальная гонка

До этого я уже пробовал делать 3D-игру через Codex на Godot, почти без дизайна и программирования. Как эксперимент это было интересно, но я понял важную вещь: заставлять Codex “рисовать 3D” с нуля — дорогая операция по токенам и не всегда предсказуемая.

Поэтому в этом проекте я пошел по пути переиспользования ассетов. Я взял готовые 3D-модели машины, монет и объектов в формате GLB и попросил Codex собрать сцену на Three.js по моим референсам. Референсы для визуального стиля я сам генерил через GPT: synthwave-окружение, неоновая трасса, ретрофутуристичный закат, игровая камера.

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

Единственная вещь, с которой я реально долго возился руками, — это трамплин. 

Тут мы обсуждаем трамплин

Тут мы обсуждаем трамплин

Бесплатные ассеты трамплинов, которые попадались, были ибо тяжелыми, по 20–100 МБ, либо с кривыми текстурами и настройками. Я потратил дневной лимит на эксперименты, потом устал и просто сам нарисовал трамплин прямо в сцене. Это, наверное, единственный кусок проекта, который я прямо сделал руками как объект. После этого Codex уже нормально превратил его в рабочий элемент сцены, и мы пошли дальше.

Камера — место, где Codex реально удивил

Самая сильная часть Codex в игровой сцене оказалась не в “написать функцию”, а в том, что он хорошо понимает кинематографический язык.

Я не 3D-шник, мне сложно руками прописывать поведение камеры в разных игровых ситуациях. Но я мог объяснить словами: здесь камера должна зумиться на объект, тут должен быть переход в бой с боссом, тут нужно ощущение прыжка, тут столкновение, тут камера должна вести себя драматичнее.

И вот это сработало очень хорошо. Я буквально почувствовал себя режиссером: объясняешь сцену нормальными человеческими словами, а Codex переводит это в код. Он нормально делал переходы между режимами, поведение камеры в прыжке, поведение при столкновении, зум на объект, смену состояния гонка → бой.

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

Музыка и звук

Музыка и звук оказались самой простой частью.

Музыку я сгенерировал в Gemini. Раньше пробовал Suno, мне он очень нравится, но в этот раз решил попробовать другое. Потом с Codex сделал кроссфейд двух композиций между режимами: гонка и бой с боссом. Здесь мое участие было минимальным: я объяснил, что хочу плавный переход между музыкальными состояниями, а Codex спокойно это собрал.

В файтинге также добавились звуки ударов, попаданий, победы и поражения. Это сильно оживило сцену, потому что без звука файтинг ощущается плоско, даже если графика уже нормальная.

Файтинг и спрайт

Когда стало понятно, что игра уходит в ретрофутуризм, synthwave и киберпанк, я решил оформить боевую часть в духе Street Fighter.

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

Но дальше началась боль.

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

В итоге я открыл Figma и собрал спрайтшит самостоятельно: ровная сетка, понятные фреймы, одинаковая логика расположения персонажа, меньше сложных поз. После этого всё заработало идеально.

Codex уже нормально нарезал новый спрайтшит на кадры и собрал анимации состояний: idle, walk, attack, hurt, victory и другие базовые состояния. То есть персонаж стал не просто картинкой, а набором кадров, которые переключаются по таймингам.

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

Экран статистики

Потом я сделал отдельный экран статистики, который открывается прямо в игре по тапу на XP.

Там отображаются средняя скорость, общая дистанция, zen-дистанция, прошлый заезд, количество боев и другие метрики. Это важный слой, потому что игра начинает ощущаться не как одноразовый прикол, а как система прогресса.

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

Экономика

Следующая большая часть — экономика.

Сейчас схема такая: машина едет по трассе, собирает монетки, монетки копятся, дают опыт. Опыт также зарабатывается в битве с боссом, в файтинге и за пройденную дистанцию. Внутриигровая валюта должна связать всё воедино.

Пока это не полностью реализовано, но логика уже понятна: монетки можно будет тратить на апгрейд машины и персонажа, скины, визуальные обвесы, эффекты, возможно оружие и новые боевые стили.

Отдельно хочу попробовать криптомеханику: запустить монетку на какой-нибудь супердешевой платформе и добавить криптотранзакции. Я с этим еще не работал, поэтому мне интересно попробовать руками, не в теории, а в реальном маленьком продукте.

Что еще в планах

Дальше хочу докрутить несколько направлений.

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

Второе — Google Sheets export. Хочу, чтобы можно было одним действием выгрузить расходы и аналитику в таблицы: для личной отчетности или командной работы.

Третье — кастомизация. Скины для персонажа, тачки, визуальные эффекты, обвесы, возможно разные боевые стили.

Четвертое — экономика и монетизация: покупки за монетки и Telegram Stars, а потом эксперимент с блокчейн-валютой.

Стек

По стеку всё максимально прагматично:

  • Python + Aiogram для Telegram-бота;

  • PostgreSQL для хранения данных;

  • aiohttp для игрового API;

  • Three.js + JavaScript для клиента игры;

  • GLB-модели для 3D-объектов;

  • спрайтшиты для файтинга;

  • Railway для деплоя;

  • OpenAI для OCR и структурирования чеков/операций;

  • Figma для ручной подготовки игровых ассетов;

  • Gemini для музыки.

Как бы я описал роль Codex в этом проекте

Codex не заменил мне мышление и не сделал проект “одной кнопкой”. Скорее он стал техническим напарником, который позволил мне как дизайнеру и продуктовому человеку быстро проверять идеи в коде.

Я не писал идеальные промпты сразу. Я начинал грубо: “хочу бота, который принимает чеки и строит аналитику”, “хочу 3D-гонку в synthwave”, “хочу переход в боевую сцену”, “хочу, чтобы камера вела себя как в игре”. Потом смотрел на результат, правил, резал лишнее, добавлял конкретику.

Самое важное — я всегда держал у себя в голове продуктовую рамку: зачем это нужно пользователю, что должно происходить в цикле, где мотивация, где прогресс, как связаны бот и игра.

Codex хорошо помог там, где нужно быстро собрать рабочий каркас, подключить библиотеки, сделать сцену, API, состояния, анимации, музыку, базу, команды. Но в местах, где нужна визуальная дисциплина — например, игровые спрайтшиты, — всё равно пришлось включать дизайн-руки и собирать аккуратно самому.

В итоге получилась рабочая штука: Telegram-бот для учета расходов и игра в одном контуре. Пользователь кидает чек, бот превращает это в данные, а дальше игра помогает не бросать привычку. Это пока MVP, но уже с понятной архитектурой, визуальной вселенной и направлением развития.