Ivy Li · Senior Software Engineer Co-founder of Nitrox

I build production software for complex, data-heavy products.

Senior Software Engineer with 6+ years building and shipping production SaaS products with Angular, TypeScript and Node.js. I specialize in frontend architecture, performance, data-heavy interfaces, geospatial systems and end-to-end product engineering.

Selected impact

Smart Apartment Data · 2023–2026

Case studies

01 · Smart Apartment Data

Making a large Angular platform faster to build, run and upgrade

The Angular application behind a B2B analytics platform that ships weekly. I cut its build time and size, fixed a slowdown that built up over long sessions, and owned its Angular upgrades across major versions.

  • Traced a progressive slowdown to leaked subscriptions and processes that were never terminated
  • Simplified the filter, sort and search flows instead of patching them
  • Cut what the build has to process before tuning the pipeline
  • Angular
  • TypeScript
  • RxJS
  • CI/CD
Problem, decisions and outcome

Problem

Production builds took more than 15 minutes, which slowed every release. Separately, the application became slower the longer someone used it, and no single screen explained why.

What I owned

The build and CI/CD optimization, the performance investigation and its fix, and the Angular upgrades across major versions.

Engineering challenges

  • The slowdown had no single cause: it ran through component lifecycles, RxJS subscriptions, routing, and the filtering and search architecture
  • Custom directive and routing abstractions kept subscriptions alive after navigation
  • Each Angular major version brought breaking changes, dependency conflicts and regressions

Technical decisions

  • Simplify the filter, sort and search flows rather than add fixes on top of the abstraction
  • Make subscription teardown explicit, with take(1) for one-shot streams
  • Shrink the application first, then tune build configuration

Key work

  • Removed heavy and unnecessary dependencies
  • Reworked component imports and routing
  • Improved build configuration
  • Corrected lifecycle handling and terminated leftover processes
  • Angular major-version upgrades

Outcome

  • Build pipeline: 15+ min → ~5 min, about 67% faster
  • Application size: roughly 40 MB → 23 MB
  • Long-session slowdown eliminated
  • Application running on Angular 22

02 · Smart Apartment Data

Freehand map selection and multi-market search

Users analyze properties and rents by geography. I built the tools that let them define exactly the area and the markets they want, on a map engine I migrated from Mapbox to MapLibre.

  • Custom freehand drawing, which MapLibre has no native support for
  • Analysis of the properties and rental data inside the drawn geometry
  • Multi-market search, proposed, built and shipped
  • Angular
  • TypeScript
  • MapLibre
  • Mapbox
Problem, decisions and outcome

Problem

Users needed to analyze arbitrary areas, not only predefined boundaries, and MapLibre has no native freehand drawing. Search was limited to a single metro, a single state, or the whole country.

What I owned

On the frontend: the Mapbox to MapLibre migration, the freehand selection tool, and multi-market search from proposal to release.

Engineering challenges

  • Building a drawing interaction the map library does not provide
  • Turning a hand-drawn shape into a selection that property and rent analysis can run against
  • Changing map engines without losing existing map functionality

Technical decisions

  • Build the drawing tool directly on MapLibre, so selection is not limited to predefined shapes or boundaries
  • Preserve existing map behaviour through the migration first, then extend it
  • Let users combine markets, rather than choose between one market and a national search

Key work

  • Freehand geographic selection
  • Aggregated property and rent analysis for the selected area
  • Survey and reporting tools around selected properties and markets
  • Metro, state and national scopes
  • Multi-market search

Outcome

  • Users draw any area and analyze the properties and rental data inside it
  • Searches are scoped to the markets needed, instead of falling back to national searches
  • The platform’s maps run on MapLibre
WorkHacka service search on desktop and mobile

03 · Full-stack marketplace

WorkHacka: a service marketplace built end to end

Marketplace connecting customers with artisans and service providers. I built it independently, from architecture through implementation: Angular frontend, Firebase backend and Cloud Functions.

  • Role-based access using Firebase custom claims
  • In-app messaging and service booking
  • Backend logic in Cloud Functions
  • Angular
  • TypeScript
  • Firebase
  • Cloud Functions
Problem, decisions and outcome

Problem

Two kinds of accounts, customers and service providers (Hackas), each with their own experience and permissions, and a way for them to find, message and book each other.

What I owned

The whole product: architecture, the Angular application, the Firebase backend and Cloud Functions.

Engineering challenges

  • Role-based access for two account types
  • Keeping backend logic out of the client
  • Messaging and booking workflows that involve both sides

Technical decisions

  • Firebase custom claims carry each account’s role and drive role-based access
  • Backend logic runs in Cloud Functions

Key work

  • Customer and provider experiences
  • Authentication and role-based access
  • Service search
  • In-app messaging
  • Service booking workflows

Outcome

A complete marketplace covering both sides, from search to messaging and booking. The product has since been discontinued by its owners.

ETP settings and payment methods on desktop and mobile

04 · Energy trading

ETP: an energy trading platform for buying and selling electricity

Platform where prosumers sell their surplus electricity to neighbours and consumers buy it. I worked on its Angular frontend, which integrates with a microservices backend.

  • Energy market, analytics and history views with charts for energy data
  • Accounts, access privileges and payment methods
  • Multi-language interface
  • Angular
  • TypeScript
  • Data visualization
  • Localization
Problem, scope and key work

Problem

People who produce their own electricity needed a simple way to sell the surplus to neighbours, and consumers a way to buy it. Both needed to follow their energy, trades and payments in one place, in their own language.

What I owned

Frontend development in Angular, integrating with the microservices backend and working alongside backend engineers.

Key work

  • Overview, energy market, analytics and history views
  • Charts and visualizations for energy data
  • Login, registration and access privileges
  • Account settings and payment methods
  • Localization across the interface
  • Responsive layouts for desktop and mobile

Experience

Senior Software Engineer

Smart Apartment Data · 2023–2026

B2B SaaS platform providing property, market, ownership, management and rental intelligence for the U.S. multifamily real-estate industry.

I owned the Angular architecture and its most complex features: NgRx state, maps, reporting and data visualization, authentication and routing, performance, and the CI/CD build.

Joined on a contract in 2023 and was promoted every year, progressing to Senior Software Engineer.

Platform scale

  • 10,000+industry professionals served
  • 220K+properties in the platform’s data
  • Weeklyrelease cadence

Beyond the case studies

  • Established the NgRx state pattern used for new features
  • Standardized confirmation and alert flows with reusable components
  • Integrated the frontend with authentication (including passwordless login), CRM systems and data services
  • Reviewed pull requests and technical designs, and onboarded new developers
  • Escalation point for difficult architecture, debugging and performance problems
  • Worked directly with Product, Design, QA and Sales

Product areas: reporting and analytics, property and market intelligence, search, geospatial tools, market surveys, sharing, API products.

Full-Stack Developer

Freelance · 2020–2023

Client work across Angular, Node.js, Express and Firebase: payments, mapping, data visualization and third-party integrations.

13 clients on Upwork, several returning for repeat work. Smart Apartment Data started as one of these contracts.

B.Eng. Software Engineering

Eastern Mediterranean University

Best Graduation Project award.

Engineering stack

Core
  • TypeScript
  • Angular
  • Node.js
Frontend architecture
  • NgRx
  • RxJS
  • Angular Material
  • State management
  • Performance optimization
Platform
  • Azure
  • Google Cloud
  • Docker
  • Kubernetes
  • CI/CD
Data & maps
  • MapLibre
  • Mapbox
  • Google Maps
  • Kendo UI
  • Data visualization
Backend & integrations
  • Express
  • Firebase
  • Cloud Functions
  • Webhooks
  • Paystack
  • Salesforce
  • HubSpot

More work

Client work on Upwork

13 clients between 2020 and 2023. The work included Paystack payments verified through webhooks on Node.js and Express, a Google Maps tool for solar-panel placement and installation costing, market-data charts on the Alpaca API, and a Node.js to Slack integration.

View Upwork profile