Skip to the content

Projects04 / 07 · proptech · USA · 2022–2025

myHomeIQ · Leads 04

The product customers log into and pay for — an eight-year Rails codebase where I owned the money, the permissions and the seam to the other service.

Senior Backend Engineer · 9th of 34 contributors
Skip to the engineering
In plain words

I worked on the two places where a bug shows up on someone’s bank statement

This is the half of myHomeIQ that has customers in it. An agent uploads their past clients, and the platform sends every homeowner a monthly branded report — what the house is worth now, how much of the mortgage is paid off, what refinancing would save, what they could buy if they sold. The agent stays visible for years without lifting a finger.

Billing errors show up on a customer’s bank statement. Subscriptions, plan upgrades, refunds, lockout for non-payment — there is no “almost right” here. Permissions are a matrix, not a flag: nine roles against twelve plans, plus enterprise and white-label, down to rights on a single lead.

And the two services share no database and no message broker, so consistency had to be designed rather than assumed. I wrote both sides of that integration — which is what someone does when they can see the whole system, not just their slice of it.

For engineers

Stripe’s awkward parts, a Pundit matrix, and a 6,256-line importer split

84k LOC, 2,272 classes, 34 contributors, 2,324 spec files, 8 Swagger specifications in the repository.

Stripe billing, the awkward parts

Charging on a stored charge day rather than the creation date; no subscription without a payment method; lockout on non-payment and automatic unlock once payment clears; duplicate invoice emails suppressed on plan upgrade; a cron that cancels unpaid reservations into trial. Built as PaymentIntent / Invoice / Subscription adapters, tested against recorded real Stripe responses.

A new role, threaded end to end

Title-company users introduced across billing rights, report access, white label, enterprise limits and traffic control — alongside a refactor of the Pundit policy hierarchy that pulled shared rules up and cut duplication between roles. A permission regression is silent until it is a security incident, so every change shipped with a large spec matrix.

Client-base imports · 6,256 lines

My largest single commit in the repository split a monolithic CSV importer into two inheritance hierarchies — plain homeowners, and rows that already carry agent and lender emails — with separate validators, jobs and about 30 fixtures. Customer data arrives however the previous CRM exported it, so robustness beats elegance here.

Cross-service integration, both sides

SSO and current-user resolution, agent connect/disconnect, synchronisation of avatars, partnerships, licences and external ids, deletion webhooks over callbacks, trial accounts blocked from intelligence, and ghost-user handling. No shared database, no shared broker — every guarantee is explicit.

Email infrastructure

Dynamic subject lines, an unsubscribe button broadcasting across several domains, per-category tracking, IP pools, and address validation through the suppression API behind a seven-day blacklist cache — the homeowner side of this product is measured in emails delivered, and a burned sending reputation takes months to repair.

Product verticals, whole slices

Affordability calculator and seller-commission APIs taken controller → interactor → service → serializer → validator → Swagger → five to seven spec files. Combined partnerships with a custom query object; HELOC/HELOAN loan types; round-robin lead distribution for agent + lender pairs. rswag generates the spec from request specs, so no endpoint of mine shipped undocumented.
2,324
spec files in the repo
8
Swagger specifications
6,256
lines · my largest commit
100%
of my public API endpoints documented
Scope, honestly. This is a codebase from 2018 with 34 contributors — I am the 9th by volume and did not architect it. What I can claim is ownership of specific high-risk areas inside it, and that every endpoint I added is documented and specced.

Who worked on it

Solo — the whole stack

Danyil Shkoropad · Senior Backend Engineer · 2022–2025
  • Stripe billing, the 9×12 permission matrix, and both sides of the cross-service integration.
  • Whole product verticals from controller to documented endpoint.
A codebase with 34 contributors; the other 33 were the client’s own team. I am the 9th by volume.
Open CV

Read to the end and want to talk it over?

rubyco.in