IAMDivinity
MLM platform with Authorize.net fiat payment integration, CIM-based subscription billing, smart contract rank distribution, and a complete isolated staging environment on DigitalOcean.
Role
Full-Stack Developer
Duration
3 months (ongoing)
Year
2025
Overview
IAMDivinity came to me with a partially broken Authorize.net integration, a subscription billing loop that wasn't completing, inaccurate rank tracking in the MLM engine, and no way to test changes safely. Over three months I resolved all of it — diagnosed the credential mismatch killing their payments, rebuilt the billing flow properly, fixed the commission engine, and stood up a full staging environment.
What I built
Authorize.net Fiat Payments
Full card payment processing via Authorize.net. First charge creates a CIM profile atomically using createCustomerProfileFromTransaction for seamless recurring billing.
Subscription Billing Engine
Recurring subscription cycles with configurable expiry. Test mode supports short cycles for verification. Renewal jobs run via Node.js cron.
MLM Rank Engine
personalVolume and downline volume tracked correctly across tiers. Rank advancement logic fires on volume thresholds and triggers smart contract rank updates.
Smart Contract Integration
Rank changes are written on-chain via Solidity contract calls. Ensures rank data is tamper-proof and auditable outside the platform's database.
Staging Environment
Isolated DigitalOcean droplet with separate subdomain, MongoDB instance, PM2 process manager, and Nginx reverse proxy. All changes go through staging before hitting production.
Challenges solved
Demo Authorize.net accounts behave differently from sandbox — credentials are not interchangeable. The original integration mixed them, causing testRequest errors on every live attempt
createCustomerProfile was being called separately from the first charge, causing timing issues. Switched to createCustomerProfileFromTransaction which atomically creates the CIM profile on first successful charge
personalVolume wasn't accumulating correctly across downline tiers — the recursive aggregation query had an off-by-one in how it walked the tree
Staging MongoDB needed rank data seeded correctly to test rank advancement — wrote a seed script that mirrors the production tier structure
PM2 cluster mode on DigitalOcean was causing socket conflicts — moved to fork mode with a proper ecosystem.config.js
Tech stack
Frontend
Backend
Payments
Blockchain
DevOps
Need something built?
I'm open to new projects. Let's talk about what you're building.