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

Проєкти01 / 07 · proptech · США · 2023–2026

myHomeIQ · Intelligence 01

Сервіс ринкової аналітики за американською proptech-платформою — він знає, який агент що продав, де, з ким, і які угоди пішли повз нього.

Senior Backend Engineer · #2 з 14 контриб’юторів · автор третього pull request у репозиторії
Одразу до інженерної частини
Простими словами

Увесь бізнес ріелтора — це люди, які про нього забули

Американський ріелтор живе з повторних угод: людина, якій ви продали будинок, продасть його знову через 5–7 років і двічі рефінансує іпотеку між тим. На той момент клієнт уже не пам’ятає, що ти існуєш.

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

Складність у двох речах. Дані приходять брудними — з державних реєстрів, MLS-баз і платних провайдерів, у різних форматах, де одну людину записано п’ятьма способами. І кожен зовнішній запит коштує реальні гроші, тож система мусить пам’ятати те, що вже знає.

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

Entity resolution, ETL і PostgreSQL, який мусив перестати рости боком

32 таблиці плюс 80 партицій — 60 із них по роках, — 617 індексів, 62 документовані API-операції.

Entity resolution · довга війна (35+ PR)

Три стратегії матчингу з пріоритетом — номер ліцензії → ім’я + телефон → ім’я + компанія — з BFS-розкриттям груп дублікатів, батчевим upsert_all, кешем на 128 МБ і resumable-прогресом, щоб багатогодинний прогін продовжився з місця зупинки. Нечіткий матчинг імен — сирий SQL на pg_trgm: similarity ≥ 0.6 у перетині з JSONB-масивами телефонів через ?|.

Та сама задача, але у векторах

Мій найбільший PR у проєкті — 3 645 рукописних рядків — замінив підхід «LLM на кожен запит» на 768-вимірні embeddings на pgvector + HNSW, із генерацією «профільного речення» ріелтора з імен, компаній, міст і ZIP. Чесно: змерджено за feature-флагом, а у вересні 2025 переписано інакше й прибрано зі схеми — воно так і не тримало продакшн-навантаження.

PostgreSQL під навантаженням

RANGE-партиціювання місячних агрегатів, а також партиції 2025 і 2026 років для угод та іпотек — початкове переведення угод і іпотек робив колега. Розведення читання й запису в робочому трафіку через connects_to: роли, правильне місце селектора в middleware-стеку і точковий примус writing там, де ламався read-after-write. 3 619 рядків у чотирьох змерджених комітах.

Нове джерело даних, наскрізно

Пайплайн з нуля під нового постачальника ринкових даних: завантаження з S3 → парсинг → валідація → батчевий upsert → мерджинг із наявними угодами із захистом від перезапису co-listing. Три великі PR по 2,4–3,1 тис. рядків, плюс трирівневий фолбек-матчинг контактів агентів.

Пошук, який поменшав

Фільтри, сортування й релевантність пошуку агентів на OpenSearch. Реіндексацію знято з колбеків моделі на чергу з періодичною джобою, а OOM під масовою реіндексацією виправлено зміною режиму й тротлінгом. Один PR по пошуку видалив 7 919 рядків, із яких 7 131 — записані HTTP-касети: спрощення, а не накопичення.

Скоринг — і коли за нього не платити

Зовнішній скоринг імовірності переїзду за власною абстракцією Pipelines / Providers / Sources, фонове довантаження, далі — фільтри й сортування в дашборді. Поза продакшном провайдер підмінений на випадковий, тож платна квота не згорає на тестових прогонах.
272
змерджених PR
184
тікетів закрито наскрізно
91,9 %
моїх PR чіпають тести
62
документованих API-операцій
Про межі — чесно. Helm-чарти, Dockerfile і CI-пайплайни на цій платформі належали окремим людям — я працював у Kubernetes/CircleCI-оточенні, а не будував його. Мій внесок — прикладний бекенд і робота з даними. Усі цифри порахувані з git-історії станом на мій останній коміт у лютому 2026-го.

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

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

Даниїл Шкоропад · Senior Backend Engineer · 2023–2026
  • Публічне API сервісу, Lost Deals і три роки entity resolution.
  • Партиціювання й розведення читання/запису, коли історії стало вісім років.
Решта 13 контриб’юторів — власна команда клієнта, не люди з цієї студії.
Відкрити CV

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

rubyco.in