Selected Engineering Work

Systems and products that show how I approach architecture, platform design, and delivery. Work projects use public or anonymized details.

Payment Terminal Platform

A group of services that provisions payment terminals before merchants use them. The platform coordinates onboarding, integrates with multiple terminal providers, and applies the correct device profile.

Onboarding flow

flowchart LR
    Client["Payment Terminal"] --> Onboarding["Terminal Onboarding"]
    Onboarding --> Internal["Internal Onboarding"]

    Internal --> InternalAPI["Internal APIs"]

    Internal --> Provider1Base["Provider 1 Proxy"]
    Provider1Base --> Provider1["Terminal Provider API 1"]

    Internal --> Provider2Base["Provider 2 Proxy"]
    Provider2Base --> Provider2["Terminal Provider API 2"]

SNS connects the provisioning services. Provider-specific proxies keep each external terminal API separate from the internal onboarding flow.

Profile design

flowchart LR
    Client["Payment Terminal"] --> Gateway["Profile Manager"]
    
    Gateway --> DB["DynamoDB"]
    DB --> Base["Mother Profile"]
    Base --> PAX["PAX Base"]
    Base --> Sunmi["Sunmi Base"]

    PAX --> PAXUnattended["PAX Unattended"]
    PAXUnattended --> PAXJcb["PAX JCB Only"]
    PAXUnattended --> PAXAll["PAX All Payments"]

DynamoDB stores a hierarchy of shared and device-specific profiles. Common settings pass down to more specific terminal profiles.

Arbitrage Trading

flowchart LR
  Client["Code"] --> Maker["Maker Exchange"]
  Client --> Taker["Taker Exchange"]

  Maker --> MOrderbook["Orderbook"]
  MOrderbook --> A1["Sell/Buy Market Order"]

  Taker --> TOrderbook["Orderbook"]
  TOrderbook --> B1["Buy/Sell Limit Order"]
  B1 --> B2["Limit Order Filled"]

  A1 --> B2
  

A market-making system that read continuous order book streams and made millisecond trading decisions across three exchanges.