Артур Галстян traping1 Паспорт верифицирован
Full-stack разработчик: быстрые и масштабируемые решения
Рейтинг
13 756
№ 71 в каталоге
Отзывы
Профессионализм
9/10
Коммуникация
8 /10
Город
Москва
Опыт работы
7 лет
На сайте с
2020 года
Юридический статус
Частное лицо
Безопасная сделка
Деньги списываются после приёмки

NEWVERSE

Используемые навыки Docker Next.js Nginx Typescript Программирование PostgreSQL

Описание

**Newverse** — инвестиционная платформа, перенесённая с WordPress/PHP на Next.js 16 + PostgreSQL.

Около 2250 участников, 5 структур, $4.7 млн в обороте.

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

Ночные задачи начисляют доход, считают бонусы и двигают циклы по расписанию.

Деньги ведутся неизменяемым журналом операций с проверкой сходимости балансов; около 90 наборов автоматических проверок гоняются по боевому сайту.

Решение

**Перенос платформы с WordPress/PHP на Next.js 16 + PostgreSQL**

**Сверка данных.** Сопоставил донорскую базу с клоном по всем участникам, контрактам и кошелькам. Ключом взял внутренний идентификатор, а не почту — по почте возникало фантомное расхождение в 906 тыс. из-за двух счетов с одинаковым адресом. Итог: разница по деньгам −61.52 на 4.7 млн, каждая объяснена. Написал набор скриптов сверки для ежедневного прогона.

**Найденные и устранённые дефекты в расчётах.**
- Флеш-бонус переплачивал $12 300 в день: при сбросе групповых объёмов в точку отсчёта писался остаток вместо сырых значений, и участнику возвращался весь исторический объём.
- Счётчик дней контракта двигался только у оплаченных договоров — за сутки расходилось 1657 записей.
- Суточная ставка считалась от суммы, зафиксированной при заведении договора, которую не поднимало ни одно пополнение. То есть апгрейд депозита не увеличивал доход. Перевёл базу на кошелёк — источник стал один вместо трёх.
- Дозревший экспресс-депозит записывался в поле, которого не читает ни экран, ни расчёт: деньги «зачислялись», но не появлялись нигде. Перевёл на журнал операций, пострадавшему доначислил.
- Ночной пересчёт объёмов ног не существовал вовсе — восстановил по донорской логике.

**Перенесённая функциональность.** Продление контракта (экран участнику + решение оператора, рост срока, списание платы), депозит экспресс-картой, выпуск карты участником, раздел токена со стейкингом, почта с нуля — девять типов писем, сброс пароля.

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

**Переезд домена.** DNS, nginx, TLS через Let's Encrypt, почтовый ящик, перенастройка сессий под HTTPS. Отдельно — режим технических работ переключателем на прокси, без остановки приложения: ночные задачи ходят внутрь контейнера напрямую, и остановка означала бы пропущенный цикл начислений.

**Расписание.** Одиннадцать ночных задач в systemd с жёстким порядком: начисление → бонусы от него → сдвиг объёмов → хвост. Порядок важен — при одновременном запуске бонусы считаются от вчерашних чисел. Флаг навёрстывания пропущенных точек намеренно выключен: однажды он поднял всю цепочку внепланово и выплатил $4500 лишнего.

**Проверки.** Около 90 наборов Playwright, гоняющихся по боевому адресу. Каждая правка сопровождается набором, закрепляющим поведение. Несколько раз наборы ловили мои же дефекты до выкатки: съеденный номер карты, несчитающийся счётчик попыток, неверное окно доплаты.

**Восстановление смежного проекта.** На соседнем сервере кончился диск, PostgreSQL зациклился на невозможности записать контрольную точку — платформа лежала несколько часов. Освободил место, поднял базу, добрал пропущенное начисление, поставил еженедельную уборку и сторожа.

**Инфраструктура.** Резервные копии по расписанию, журнал операций с контролем сходимости балансов, доставка распаковкой закоммиченного дерева — без риска затереть рабочие файлы и секреты.

**Честно о незакрытом:** 22 расхождения в объёмах ног — замороженные значения на стороне донора; суточная ставка на обеих сторонах берётся случайной величиной из вилки, поэтому суммы по конкретному участнику совпадать не могут в принципе.

Результат

**Платформа работает в продакшене и обслуживает всех участников.**

Домен `newverse.company` переведён на новую версию, старый сайт остался только для чтения и сверки. Около 2250 участников, 5 структур, 4.7 млн долларов в обороте — всё на Next.js 16 и PostgreSQL вместо WordPress/PHP.

**Что это дало по деньгам.** Флеш-бонус перестал переплачивать $12 300 в день — за месяц это порядка 370 тысяч, которые раньше уходили на пустом месте. Контракты, по которым начисления встали из-за незасчитанного дня, снова платят: 22 участника получили своё. Пополнение депозита теперь действительно увеличивает доход — до правки апгрейд не менял ставку вовсе, то есть участник платил и не получал ничего.

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

**Как этим пользуются сегодня.**
- Операторы ведут очереди в панели: пополнения, выводы, верификация, продления контрактов, закрытия. Решения подтверждаются кнопкой, участнику уходит письмо.
- Участники в кабинете видят баланс, контракт с обратным отсчётом, структуру, токены со стейкингом, историю по каждому кошельку. Пополняют переводом или экспресс-картой, выпускают карты сами, переводят внутри своей структуры.
- Ночные задачи считают доход и бонусы по расписанию без участия человека. Резервные копии снимаются ежедневно.

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

**Учёт доли разработчика** ведётся прямо в панели: считает новые счета с депозитом, умножает на ставку, показывает список. Ставка меняется настройкой, без пересборки.

**Режим технических работ** используется владельцем при обновлениях: платформа закрывается для людей одной командой, начисления при этом идут. Открытие можно поставить на дату — так уже сработало дважды: сайт открылся 3 сентября, выводы 5-го, по таймеру, без ручного вмешательства.

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

**Что дальше.** Отдельный домен для новой структуры с полной изоляцией — оценено в 35–50 часов, большая часть работы по деньгам уже сделана при закрытии переводов. Из накопленного: ротация логов Docker, вынос резервных копий за пределы сервера, оповещения о недоступности. Последнее не теоретическое — соседний проект уже лежал несколько часов, и заметил это клиент, а не мы.

Оценили проект:

Другие проекты

Все проекты →
Веб-разработка и IT Tilia
Tilia
95
Веб-разработка и IT Безымянный.png
Безымянный.png
96
Веб-разработка и IT Furnob
Furnob
99
Веб-разработка и IT Dogstudio
Dogstudio
99