Skip to content
Back to software engineering projects

SaaS case study

EZWxBrief

An aviation weather briefing platform with a Next.js frontend and NestJS backend, recurring membership billing, transactional email, and AWS delivery tooling.

Architecture map

Membership billing, email, and AWS delivery pipeline

Client experienceService boundaryData workflow

Business problem

Account and briefing access depended on recurring membership state, payment-profile updates, renewal operations, and dependable transactional communication.

Architecture

Next.js membership flows call NestJS services backed by TypeORM and PostgreSQL, with Payflow profile state, operational reconciliation, direct SES delivery, and containerized AWS stacks.

My contribution

  • Integrated Payflow recurring profiles across registration, trials, profile creation, card updates, cancellation, reactivation, and renewal reconciliation.
  • Improved membership, pricing, renewal, cancellation, payment-method, validation, and confirmation/error experiences.
  • Extended NestJS DTOs, APIs, TypeORM entities, and migrations for billing identifiers, membership state, dates, cards, and email preferences.
  • Implemented price synchronization, renewal reconciliation, expiring-card reminders, and configurable subscription pricing.
  • Implemented direct AWS SES delivery and worked with versioned Docker/ECR and CloudFormation-to-ECS deployment tooling.

Difficult technical decisions

  • Keep Payflow recurring-profile state aligned across the user interface, NestJS domain model, scheduled reconciliation, and operational support paths instead of treating billing as a checkout-only feature.
  • Use provider reconciliation for renewal truth while preserving explicit local membership dates and statuses for product access decisions.
  • Move transactional email to direct AWS SES delivery and keep deployment infrastructure versioned with the application release path.

Scale and constraints

  • Seven recurring-billing lifecycle paths: registration, trial, profile creation, card update, cancellation, reactivation, and renewal reconciliation.
  • Frontend, API, PostgreSQL migrations, scheduled operations, email delivery, and infrastructure had to change without breaking existing memberships.
  • The AWS delivery surface spans SES, ECS, ECR, CloudFormation, S3, and Secrets Manager.

Security, performance and reliability

  • Kept payment-profile identifiers and membership state in the application model while leaving sensitive payment handling with Payflow.
  • Used Secrets Manager-backed delivery configuration and versioned container infrastructure to reduce environment drift.
  • Added scheduled price synchronization, renewal reconciliation, and expiring-card reminders to move repeatable operational work out of manual support paths.

Measurable result

  • Implemented seven recurring-billing lifecycle paths across one coordinated Next.js, NestJS, PostgreSQL, Payflow, and AWS operating model.
  • Established an AWS delivery stack spanning six named services for transactional email and containerized releases.

What I learned

  • Subscription reliability depends on treating UI states, provider profiles, database fields, scheduled jobs, and support visibility as one product system.
  • Cloud delivery work is most maintainable when infrastructure changes are versioned and reviewed alongside the application behavior they support.

Implementation stack

Technologies grouped by responsibility.

Frontend

Next.jsReactRedux ToolkitTypeScript

Backend/CMS

NestJSTypeORM

Data

PostgreSQL

Integrations

PayPal PayflowAWS SES

Infrastructure/Delivery

AWS ECSECRCloudFormationS3Secrets ManagerDockerBash

Related work