
AgentAI
AgentAI is a SaaS that helps real estate teams automate their marketing with AI. I joined as a Product Engineer when the codebase was already a few years old and carrying real tech debt, and the product needed to evolve fast on top of that: a UI overhaul, AI features, payments, and a shift from a single-user tool to a proper B2B platform. I owned both sides of the stack across that evolution. Most days were a mix of paying down debt in old NestJS modules, shipping new React surfaces in MUI, and figuring out how to drop OpenAI and LangChain into workflows that previously had no AI in them at all.
── /Confidential
NDA // Details restricted
This project was built under a professional engagement. Product details, technical architecture, and business logic are covered by NDA and cannot be disclosed. What follows is a summary of my personal contribution and measurable impact.
- Inherited a multi-year-old Next.js + NestJS codebase with significant accumulated debt. Audited the worst-offending modules first, then split each sprint between paying down debt and shipping the features the roadmap actually needed.
- Migrated the entire UI from Chakra UI to Material UI, page by page. Set up shared theming and component primitives early so each subsequent page took less time to port than the last one.
- Researched and integrated OpenAI and LangChain into the platform's core marketing workflows. The hardest part was not the API calls, it was reshaping the existing data flow so AI output had somewhere to land without breaking the parts that already worked.
- Built Stripe billing from scratch: plan modelling, checkout, webhook handling, and the full subscription lifecycle (trial, upgrade, downgrade, cancel, payment failure). This was the work that turned the product into a revenue-generating one.
- Drove the migration from a single-user product to multi-tenant B2B. Introduced organisations, user groups, and role-based access control across the API and the UI. Required rewriting most queries to be tenant-scoped and backfilling existing users into a default tenant without breaking the live app.
- Refactored core business logic across NestJS modules to follow framework conventions instead of the improvised patterns the original team had left behind. Made the code easier to test and easier for the next engineer to onboard into.