Nicholas Morrow
Résumé

Nicholas Morrow

Senior Software Engineer

I build full-stack product software — service architecture and data modeling as much as the interfaces on top of them. Most recently, I owned Zenlytic's LLM-powered chat feature end-to-end, on a seven-person team.

Open to senior full-stack roles · Remote

Work

to

Senior Software Engineer Zenlytic

  • Owned Zenlytic's LLM-powered chat feature end-to-end (Python/Flask, React/TypeScript) — query generation, prompt/context assembly, evaluation, and the chat UI itself — as part of a 7-⁠person team.
  • Redesigned the chat response pipeline around streaming to cut perceived latency, and shipped end-to-end visibility into each answer's underlying data sources — a major driver of user trust in the product.
  • Served as on-call responder for production incidents, using session-replay tooling (LogRocket) to diagnose real user failures and shape observability priorities through direct customer conversations.
  • Partnered directly with customers on adoption issues and helped define company-wide coding standards for testing, accessibility, and static analysis.
  • React.js
  • TypeScript
  • Python
  • Flask
  • Design Systems
  • Data Visualization
  • Chakra UI
  • Vite

to

Senior Software Engineer Tempus AI

  • Shipped and maintained Tempus AI's React and TypeScript UI component library — 50+ design-system-aligned components consumed by 20 engineering teams.
  • Built and owned the Laboratory Inventory Management Service (React, TypeScript, Node.js; team of 8), modeling lab workflows for converting human tissue into sequenced DNA — used daily by roughly 40 lab technicians.
  • Contributed to the architecture that let lab processes be modeled across multiple labs at different locations, helping increase lab throughput by roughly 30%.
  • React.js
  • TypeScript
  • Node.js
  • Nest.js

to

Software Engineer Fora Financial

  • Owned the event-processing queue behind Fora Financial's .NET platform for credit-advance-request tracking and deal-parameter calculation (team of 9) — debugging backlogs, resolving failures, and handling downtime to keep processing unblocked.
  • Developed a React and TypeScript frontend that cut completion time on common user flows by about 20%, reducing server round-trips.
  • Built and deployed Azure DevOps pipelines supporting feature-branch testing, continuous integration, and automated integration testing — cutting defects reaching master by 15%.
  • Replaced a manual, error-prone database-sync process with automated schema migrations (dbUp), and tuned SQL Server indexing across core tables.
  • .NET
  • React.js
  • TypeScript
  • Redux
  • Azure DevOps
  • SQL Server

to

Software Quality Engineer Mastercard

  • Delivered a React and .NET transaction-log data-visualization application (team of 8) to support data-driven decisions, with an emphasis on automated testing.
  • Automated instance setup and data-model configuration for the Mastercard analytics platform (team of 9), cutting setup time by about 70%, and added a database-settings tool for non-engineering product changes.
  • Built automated testing infrastructure (C# Selenium, .NET API integration in Jenkins CI) and developed shapefile-generation and dataset-mapping tooling.
  • .NET
  • React.js
  • TypeScript

Projects

Clinical Copilot

A chat app that answers clinical questions about a hospital's patients in plain English, with the definitions it applied and the query it ran shown beside every answer. All patient data is synthetic.

The hard part Keeping the model from authoring clinical thresholds — it only chooses which hospital-defined term a question means, and a deterministic layer is the only code that writes SQL, so “impaired kidney function” is the same eGFR cutoff every time it is asked.

  • Python
  • FastAPI
  • React.js
  • TypeScript
  • Postgres

Payout Ledger

A disbursement console for unconditional cash transfers: pay one recipient or a whole payment run at once, watch each payment clear a queue and a mock payment provider live, and open any transfer to see the double-entry books behind it.

The hard part Keeping money correct when the pieces fail independently — balanced books enforced by a deferred Postgres trigger, payments queued in the same transaction that authorizes them, retries that replay the first answer instead of paying twice, and a reconciliation pass that catches what falls between those guarantees, like a worker dying mid-payment.

  • Python
  • FastAPI
  • React.js
  • TypeScript
  • Postgres

Component Library

React UI primitives that encode design-system conventions while preserving flexibility for deliberate custom implementations.

  • React.js
  • TypeScript
  • HTML & CSS
Show 2 more projects

Geoclustering

Upload the places you’ve saved in Google Maps and get them back as days out — clusters you can see in a day, each with the shortest walk through it, and a slider that moves between one cluster and one per place without another request.

The hard part Making every cluster count instant — the server runs agglomerative clustering once and returns the whole merge tree, with each cluster’s walk solved exactly (Held–Karp) up to ten places and by 2-opt up to sixty, so the browser derives any level, its colors and a suggested count on its own.

  • .NET
  • React.js
  • TypeScript

Ranked Choice

Polls you answer by ranking, counted by instant runoff — with results that replay the count round by round, splitting every option’s votes into first choices and ballots transferred from eliminated options, and a simulator for making up an election of your own.

The hard part Making a multi-round count something a voter can check rather than take on trust — one pure counting function serves both real polls and the live simulator so they can never disagree, every ballot is validated against the poll it claims to belong to, and ranking works by keyboard and screen reader as well as by drag.

  • Nest.js
  • React.js
  • TypeScript
  • Postgres

Contact

If you are hiring, or want to talk through anything in the work above, I am glad to hear from you.

Elsewhere