RentYard
Property rental marketplace with AI-powered semantic search (Weaviate + LLM + fuzzy matching), Stripe subscription billing, BullMQ async queues, Socket.IO chat, and AWS S3 media pipeline.
Node.jsTypeScriptExpressMongoDBWeaviateBullMQRedisStripeSocket.IOAWS S3
S Situation
RentYard needed a full property rental marketplace covering four property types (single homes, apartments, condominiums, dorms) — with AI-powered search, tenant and lease lifecycle management, recurring Stripe billing, real-time chat, and multi-device push notifications — served across web and mobile clients.
T Task
I designed and built the entire backend API: 53 modules, a multi-tenant data model, a hybrid NLP search pipeline, Stripe subscription infrastructure with webhooks, an async job system, and real-time messaging.
A Actions
- Built a 53-module Node.js/TypeScript/Express API with Zod validation on every DTO, a custom catchAsync wrapper, and a structured error hierarchy (Zod, Mongoose, CastError, DuplicateError, Multer) that normalises all failures into a consistent response envelope.
- Engineered a hybrid semantic search pipeline: Weaviate vector DB stores property embeddings generated locally with Xenova all-MiniLM-L6-v2 (384-dim, mean-pooled, L2-normalised) or Google Gemini embeddings-001 as fallback. A Gemini 1.5 Flash LLM extracts structured intent (beds, location, property type, rent range) from free-text queries; fuzzy matching via fastest-levenshtein normalises location and property type before vector similarity search — achieving 90%+ search accuracy on natural language queries.
- Integrated Stripe with full webhook handling (invoice.created, invoice.payment_succeeded, invoice.payment_failed) — dynamic fee calculation per payment method (2.9%+$0.30 card, 0.8% ACH capped at $5, fixed $0.80 iDEAL), subscription auto-pay with retry tracking, and automatic Stripe customer provisioning on social login.
- Implemented Firebase Admin SDK for Google and Apple social login with auto-user creation, Stripe customer ID provisioning, and JWT + refresh token issuance in a single auth flow.
- Built an async email pipeline with BullMQ backed by Redis — email jobs queued out of the request cycle, processed by a dedicated Worker with completed/failed lifecycle hooks, Handlebars HTML templates rendered per job, and Nodemailer/Gmail SMTP for delivery — reducing email-related request latency by 5×.
- Scheduled four background jobs with node-cron/node-schedule: rent invoice generation (runs every minute, checks reminderDate per property), subscription auto-pay, subscription invoice creation, and move-out resident processing — covering the full tenant billing lifecycle without manual intervention.
- Built Socket.IO real-time chat with JWT handshake auth, per-user socket rooms, bidirectional message history, typing indicators, bulk read-receipt updates via MongoDB aggregation pipeline, and unread message count broadcasting.
- Integrated AWS S3 with Sharp image optimisation — WebP conversion, metadata stripping, compression — for single and batch media uploads; constructed CloudFront CDN URLs for delivery.
- Implemented Redis query caching for apartment unit listings with SHA1-hashed cache keys from sorted query objects, eliminating redundant DB hits on repeated filtered/paginated requests.
- Added Firebase FCM multi-device push notifications using Promise.allSettled for partial delivery tolerance, $addToSet token deduplication on login, and per-notification data payloads.
- Configured Weaviate via Docker Compose for local and production vector store deployment, and enforced code quality with Husky pre-commit hooks running ESLint + Prettier via lint-staged.
R Results
- Platform live at rentyard.com with app on Google Play — natural language queries like "2-bed near downtown under $1500" resolve to semantically ranked listings at 90%+ accuracy.
- BullMQ async email queue decoupled notification delivery from API response time, cutting email-related latency by 5×.
- Stripe autopay cron + webhook pipeline handles all recurring billing and payment failures without manual intervention.
- Recognised as Best Employee of the Month (July 2025) at RentYard Inc.