Перейти до вмісту

Проєкти04 / 07 · proptech · США · 2022–2025

myHomeIQ · Leads 04

Продукт, у який клієнти логіняться і за який платять — восьмирічна Rails-кодова база, де моїми були гроші, права доступу і стик між двома сервісами.

Senior Backend Engineer · 9-й з 34 контриб’юторів
Одразу до інженерної частини
Простими словами

Я працював у двох місцях, де баг видно у виписці з банку

Це та половина myHomeIQ, у якій є клієнти. Агент завантажує своїх колишніх клієнтів, і платформа щомісяця надсилає кожному власнику будинку брендований звіт — скільки будинок коштує зараз, скільки іпотеки виплачено, що дало б рефінансування, що можна купити, якщо продати. Агент лишається на очах роками, не роблячи нічого.

Помилки білінгу видно у виписці клієнта. Підписки, апгрейди планів, повернення, блокування за неоплату — тут не буває «майже правильно». Права — це матриця, а не прапорець: дев’ять ролей проти дванадцяти планів, плюс enterprise і white-label, аж до прав на конкретний лід.

А два сервіси не мають ні спільної бази, ні спільного брокера — тож консистентність треба було спроєктувати, а не припустити. Я написав обидві сторони цієї інтеграції: так робить той, хто бачить систему цілком, а не лише свою ділянку.

Для інженерів

Незручні частини Stripe, матриця Pundit і розбір імпортера на 6 256 рядків

84 тис. рядків, 2 272 класи, 34 контриб’ютори, 2 324 файли тестів, 8 Swagger-специфікацій у репозиторії.

Stripe: саме незручні частини

Списання за збереженим днем оплати, а не за датою створення; немає підписки без платіжного методу; блокування за неоплату й автоматичне розблокування, коли платіж проходить; гасіння дублікатів інвойс-листів при апгрейді; крон, що переводить неоплачені резервації в тріал. Зроблено як адаптери PaymentIntent / Invoice / Subscription, протестовані проти записаних реальних відповідей Stripe.

Нова роль, протягнута наскрізь

Користувачі title-компаній додані через права білінгу, доступ до звітів, white label, enterprise-ліміти й контроль трафіку — разом із рефакторингом ієрархії політик Pundit, який підняв спільні правила вгору й прибрав дублювання. Регресія в правах тиха, поки не стає інцидентом безпеки, тож кожна зміна йшла з великою матрицею тестів.

Імпорт клієнтських баз · 6 256 рядків

Мій найбільший одиничний коміт у репозиторії розділив монолітний CSV-імпортер на дві ієрархії наслідування — прості власники будинків і рядки, що вже несуть емейли агента й лендера — з окремими валідаторами, джобами і ~30 фікстурами. Дані приходять у тому вигляді, у якому їх експортувала попередня CRM, тож надійність важливіша за елегантність.

Міжсервісна інтеграція, обидві сторони

SSO і резолвінг поточного користувача, підключення/відключення агента, синхронізація аватарів, партнерств, ліцензій і зовнішніх id, вебхуки видалення через колбеки, блокування тріальних акаунтів від intelligence, обробка ghost-користувачів. Спільної бази немає, спільного брокера немає — кожна гарантія прописана явно.

Інфраструктура листів

Динамічні теми листів, кнопка відписки, що розсилає подію на кілька доменів, трекінг за категоріями, IP-пули й валідація адрес через suppression API за семиденним кешем блеклиста — сторона власників будинків міряється доставленими листами, а спалену репутацію відправника відновлюють місяцями.

Продуктові вертикалі цілими шматками

API калькулятора доступності й комісії продавця, зроблені як контролер → інтерактор → сервіс → серіалізатор → валідатор → Swagger → п’ять-сім файлів тестів. Комбіновані партнерства з власним query-об’єктом; типи позик HELOC/HELOAN; round-robin розподіл лідів для пар агент + лендер. rswag генерує специфікацію з request-тестів, тож жоден мій ендпоінт не пішов без документації.
2 324
файлів тестів у репо
8
Swagger-специфікацій
6 256
рядків · мій найбільший коміт
100 %
моїх публічних API-ендпоінтів з документацією
Про межі — чесно. Це кодова база з 2018 року з 34 контриб’юторами — я 9-й за обсягом і не проєктував її. Що я справді можу заявити — відповідальність за конкретні високоризикові зони всередині й те, що кожен доданий мною ендпоінт задокументований і покритий тестами.

Хто над цим працював

Соло — весь стек

Даниїл Шкоропад · Senior Backend Engineer · 2022–2025
  • Білінг Stripe, матриця прав 9×12 і обидві сторони міжсервісної інтеграції.
  • Цілі продуктові вертикалі від контролера до документованого ендпоінта.
Кодова база з 34 контриб’юторами; решта 33 — власна команда клієнта. Я 9-й за обсягом.
Відкрити CV

Дочитали до кінця й хочете обговорити?

rubyco.in