Back to selected work

GoFundMe · Professional work · GoFundMe Pro

Making giving feel simpler.

I’ve owned donation systems across checkout, cart and order services, and embedded SDK integration, from implementation to validation and rollout.

My role
Senior Software Engineer
Scope
Frontend, backend & delivery
Status
Ongoing professional work
  • TypeScript
  • Node.js
  • NestJS
  • Next.js
  • MySQL

Overview

Since contributing to the embedded giving launch in 2024, I’ve worked across donation checkout and the systems behind it. My work includes payment finalization, abandoned-donation recovery, and checkout experiments designed to help nonprofits turn donor intent into completed donations.

My part in the work

I owned the server-side finalization work across payment methods, from implementation to monitored rollout. For recovery, I worked from backend data models through donor-facing UI and email. I also led instrumentation planning, distributed work across engineers, and aligned the approach with Privacy. Delivery involved Product, Design, QA, Data, Commerce, and Messaging.

Technology stack

The tools behind the work, and where I used them.

Interface & state

  • React
  • Next.js
  • TypeScript
  • Redux Toolkit
  • Emotion

Donation steps, checkout state and styled components across embedded product experiences.

Embedded integration

  • TypeScript
  • Browser postMessage API
  • Webpack

A browser SDK and typed communication between the host website, donation grid and checkout.

Backend & recovery

  • Node.js
  • NestJS
  • MySQL
  • TypeORM

Server-side finalization, recovery data models, token handling, and reminder events.

Instrumentation & diagnostics

  • mParticle
  • Coralogix
  • Optimizely
  • Terraform

Track donation and digital-wallet events, forward host-page activity when analytics is ready, and add context to checkout logs.

Validation & tooling

  • Jest
  • React Testing Library
  • Playwright

Regression tests for checkout data and browser tests for the grid-to-checkout messaging flow.

Selected contributions

Server-side payment finalization

Problem
Checkout coordinated multiple payment and donor-data operations in the browser. Moving that work server-side needed to preserve behavior across payment methods and existing donation options.
My contribution
I built the backend-for-frontend and expanded it across cards, bank payments, PayPal, digital wallets, and donor-advised funds, including consent, fees, dedications, and data parity.
Decision
Introduce the new path incrementally by payment method, with feature flags, regression tests, and rollout monitoring. Preserve valid donor answers, including false and zero.
Value delivered
Brought payment finalization into a shared server-side layer, with consistent handling across payment methods and the monitoring needed for a controlled rollout.
  • Next.js
  • Node.js
  • TypeScript
  • Redux Toolkit

Abandoned cart recovery

Problem
Recovering an unfinished donation needs more than a reminder: donor opt-in, recoverable checkout state, secure access, and coordination between checkout and messaging.
My contribution
I designed and built recovery data models, secure token exchange, reminder events, donor emails, and opt-in UI. I also implemented cart restoration and recovered-donation completion through the order service, working with Commerce and Messaging.
Decision
Keep recovery consent explicit, enforce token eligibility and expiry, and exclude payment information from recovered checkout state.
Value delivered
Built and validated the recovery journey from reminder email through restored checkout, donation completion, and unsubscribe. I documented the system and shared a working demo so teams could test the full journey together.
  • React
  • TypeScript
  • NestJS
  • MySQL
  • TypeORM

Cart and order integration

Problem
Adopting shared commerce services needs donation options, donor data, and post-payment behavior to remain consistent across checkout and backend services.
My contribution
I built checkout integration with cart and order services and implemented supporting order-service changes, working with Commerce on donor-data parity, attribution, and payment validation.
Decision
Validate the consumer and provider together, preserve current checkout behavior, and keep integration readiness separate from rollout approval.
Value delivered
Connected checkout with shared cart and order services while preserving donor data, attribution, and post-payment behavior. Backed the integration with automated tests and payment-flow validation.
  • Next.js
  • TypeScript
  • NestJS
  • MySQL

Checkout instrumentation

Problem
A donation journey spans the host website, embedded checkout and digital wallets. Events need consistent meaning, and activity can arrive before analytics is ready.
My contribution
I led instrumentation planning across the SDK and checkout, scoped and distributed work, and coordinated with Privacy. My implementation included event buffering, wallet tracking, experiment instrumentation, and rollout dashboards.
Decision
Separate donor actions from technical loading, preserve events until analytics is ready, and compare new checkout behavior with the existing flow.
Value delivered
Gave the team a clearer view of checkout behavior, with consistent events and dashboards for comparing experiments and investigating payment outcomes.
  • TypeScript
  • mParticle
  • Coralogix
  • Optimizely
  • Terraform

Inline donation grid improvements

Production launch · September 2026

Problem
A new inline donation grid must open the existing checkout with the chosen amount and frequency, across separate browser frames.
My contribution
I built the standalone grid integration and preserved amount, frequency, and currency when donors open checkout from a separate Donate button. I replaced fixed iframe sizing with configuration-aware height reservation and natural content growth, and contributed instrumentation, diagnostics, and launch validation across the SDK and checkout.
Decision
Keep checkout state in checkout, exclude donor personal data from messages, and reject invalid or incompatible messages at the boundary.
Value delivered
Contributed to the shared grid’s September 2026 production launch. Donor choices carry into checkout, and responsive sizing addresses excess space and layout jumps. I also helped run bug bashes and reviewed post-launch conversion, gift size, and recurring-share guardrails with Product.
  • Next.js
  • TypeScript
  • Browser postMessage API

Engineering decisions

Preserve behavior while changing internals

I used parity checks and regression tests to protect donor answers and fund selections while the checkout integration changed.

Make boundaries explicit

For the grid integration, I kept message validation explicit and checkout state with its existing owner, limiting what crosses the browser boundary.

Make release preparation reusable

I built AI-assisted tooling that gathers changes across repositories and prepares release summaries and checklists for human review.

Outcome

My work brings together payment finalization, abandoned cart recovery, cart and order integration, and inline donation grid improvements. I connect implementation with testing, observability, and delivery across teams.

Let’s compare notes.

Have a related challenge or a question about the work?

deivbidarg@gmail.com