πŸ‘¨β€πŸ’»πŸ’»πŸ¦ΎπŸ”¬

Manuel Solalinde's CV

View the Project on GitHub manolosolalinde/cv

Gas Targets App (React/FastAPI) - BKV Corporation

Software Engineer/Developer: Manuel Solalinde (manolosolalinde@gmail.com)

Every month, reservoir and production engineers must set the monthly gas-production target for every well. Doing this well-by-well was a slow, manual grind; this full-stack web application lets an engineer process the entire well set in a single analysis, turning that process into about an hour of compute. It combines an interpolation/trend tool purpose-built for this task with guided manual review of the edge cases, then exports the finalized targets as the operator CSV consumed downstream. (This page documents the v2.1.0 architecture β€” a React frontend with a FastAPI backend on AWS App Runner β€” since superseded by a unified Streamlit redesign on ECS Fargate.) The heavy lifting β€” reading raw production history from the corporate data warehouse and fitting a trend per well β€” runs as a parallel, queue-driven Lambda fan-out, so the full well set is processed in one pass instead of one well at a time.

Overview

Each month an engineer creates an analysis (defined by its start/end date) and walks it through a four-stage workflow in the app. The application loads the analysis data from the corporate Amazon Redshift warehouse into a private working database, generates a production trend for every well in parallel, then surfaces two case-study reviews so the engineer can spot wells that need manual overrides before the final targets are exported.

Workflow

The user flow is organized as a set of sequential tabs:

Architecture

The system is a containerized, cloud-native stack provisioned entirely as code with Pulumi:

The asynchronous operations follow a consistent pattern: the frontend calls a backend endpoint to kick off the work, then polls a state endpoint until the work reports finished. The backend enqueues one SQS message per unit of work (per table for the DB update, per well for trend generation); each message triggers an independent Lambda invocation, and a per-well job-status table tracks each well so the state endpoint knows when the whole batch is complete.

Design decisions & trade-offs

CI/CD & Local Development

Note: Screenshots and architecture diagrams are omitted, as they display proprietary client data and systems. Available on request, subject to client approval.