ВайбкодерClaude Code и Codex каждый день

Собираю продукты
от идеи до прода

Руками почти не пишу. Claude Code и Codex пишут код, а я ставлю задачу, проверяю результат, дебажу и сам держу прод: серверы, деплой, платежи.

kviyx · в проде
148
пользователей, 26 активных подписок
сервер
~24k
строк Python, Flask + aiogram
клиент
~28k
строк Dart, macOS · Windows · Linux
тесты
493
в клиенте kviyx и takt
PythonFlaskFastAPIaiogram 3Dart / FlutterSQLite · PostgreSQLXray · sing-boxDocker · nginxWireGuardTelegram Mini Apps
01 · VPN-сервис

kviyx

Собрал сам и держу в проде: сайт, админка, бот, Mini App, API, ноды и приём платежей. Код закрытый.

  • Сайт и админка на Flask + Gunicorn, админка на отдельном домене с 2FA и passkeys
  • Бот на aiogram 3 и Telegram Mini App, платежи через FastAPI-вебхук
  • REST API v1 с JWT и WebSocket-шлюз для клиента
  • Ноды: Xray (VLESS + Reality) под Remnawave, WireGuard-меш между серверами
  • Свой лимитер устройств: HWID на выдаче подписки + общий счёт IP по нодам
kviyx.xyz
Тарифы kviyx.xyz
Telegram Mini App

kviyx прямо в Telegram

Подписка, ключи, пакеты, промокоды и рефералы без выхода из мессенджера. Демо-режим на тестовых данных.

Главная
Пакеты и промокод
Профиль
02 · Десктоп-клиент

Клиент kviyx

Flutter/Dart: macOS (universal), Windows, Linux. ~28k строк в 126 файлах, 403 теста. Стекло на главном экране рисуется своим шейдером.

Ядро

Два движка в одной связке

sing-box держит TUN и маршрутизацию, xray-core делает сам протокол. Они общаются через локальный SOCKS, движок выбирается глобально или для конкретного сервера.

VLESSVMessTrojanShadowsocksHysteria2WireGuardTUICSSH
Маршруты

Split tunneling

По процессам, доменам, IP и geo-спискам.

Защита

Kill switch

Три режима: выключен, при переподключении, строгий.

Надёжность

Failover

Health-проба раз в 30 секунд, при падении переход на другой сервер.

Синк

Настройки на всех устройствах

Шифруются на клиенте, сервер видит только шифротекст.

Обновления

Автообновление по платформам

Отдельные номера сборок для macOS, Windows и Linux: патч одной ОС не трогает остальные.

Блокировки

Зеркала API

Если основной домен недоступен, клиент сам находит рабочее зеркало и работает через него.

03 · Открытый код

takt

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

  • Смены сообщением в чате: открыть, передать, закрыть, тревога, если точка не открылась
  • Ставки общие, персональные и скрытые, зарплата по периодам
  • Кабинет: точки, приглашения, RBAC по точкам, финучёт, CSV, аудит
  • Python, Flask + aiogram 3, APScheduler, Docker · 10.5k строк, 90 тестов
takt · кабинет владельца
Кабинет владельца takt Зарплата за период Финучёт и ставки Лендинг takt
04 · Как я дебажу

Три реальных бага

Код пишет агент, а причину ищу я: проверяю гипотезу, ищу доказательство в логах и не останавливаюсь на первом объяснении.

kviyx · платежи · Docker

Одна оплата могла засчитаться дважды

СимптомПоллер платежей должен работать в одном экземпляре. Он проверял, жив ли процесс с PID из флаг-файла. Проверка проходила, а поллеров поднималось два.
ПричинаДва контейнера с общей БД. PID из чужого контейнера в своём namespace значит совсем другой процесс. Проверка была бессмысленной с самого начала и просто иногда везла.
ФиксАтомарный захват флага: гонка невозможна на уровне ФС. Минус: после SIGKILL флаг сам не снимается. Это лучше, чем начислить платёж дважды.
wsgi.py
try:
    fd = os.open(flag,
        os.O_CREAT | os.O_EXCL | os.O_WRONLY)
    os.write(fd, str(os.getpid()).encode())
    os.close(fd)
    start_payment_poller()
except FileExistsError:
    pass
kviyx · Remnawave · Xray

Продлённые ключи не работали

СимптомВ панели ключ активен и продлён, а клиент не подключается. Помогал только рестарт ноды.
ПричинаСтарый код правил пользователей прямым SQL в БД панели. Запись менялась, а событие синка на ноды не уходило. Заодно всплыло, что фильтр ?username= API игнорирует: правки попадали в чужого пользователя.
ФиксВсё через REST: панель сама рассылает изменения на ноды, без рестартов. Пользователь ищется по username с проверкой ответа.
remnawave_api.py
- docker exec remnawave-db psql -c
-   "UPDATE users SET expire_at = ..."

+ PATCH /api/users
+ { "uuid": ..., "expireAt": ...,
+   "status": "ACTIVE" }
клиент · sing-box · xray-core

«EOF» под нагрузкой оказался петлёй

СимптомКогда Telegram открывал десятки соединений разом, сыпалось Error while dialing: EOF. Первая версия: gRPC у Xray нестабилен.
ПричинаГипотеза не выдержала: Streisand и Amnezia на том же Xray работали. В логе нашёлся пакет в TUN от самого процесса xray. Туннель ловил трафик ядра и отдавал его обратно ядру по кругу.
ФиксОдно правило маршрутизации: собственный трафик xray идёт мимо туннеля.
sing-box · лог и фикс
router: found process path:
  …/Resources/xray
Error while dialing: EOF

{ "process_name": ["xray"],
  "outbound": "direct" }
06 · Процесс

Как я работаю с агентами

Контекст

Память проекта

У каждого проекта база знаний в Obsidian: инфраструктура, решения, бэклог, журнал сессий. Агент без памяти поднимает контекст с нуля.

Проверка

Не верю на слово

«Готово» значит прошли тесты, сборка, живой прогон и логи на сервере. Опасные действия на проде подтверждаю сам.

Прод

Держу сам

Linux, nginx, Docker, WireGuard, деплой, бэкап перед любым удалением, мониторинг.

Давайте поговорим

Быстрее всего ответ в Telegram.

Я не использую куки. Вообще. Ни аналитику, ни трекеры. Только вайбы.