Skip to content

Open to Data Engineering and Software Engineering roles

I build the systems
data moves through.

Full-Stack Engineer with production experience across Django, Python and AWS — designing data layers, event-driven synchronisation and the pipelines that feed them. Currently moving deeper into data engineering and MLOps.

Portrait of Daniel Pineda

01Experience

Production systems, end to end

Two platforms where I owned the data layer — from schema design through deployment.

  1. APPU

    Full-Stack Engineer

    Multi-module POS and e-commerce platform for institutional cafeterias, running on AWS ECS Fargate and provisioned as code.

    • Designed a DynamoDB access layer across 47+ repository modules, with Redis on ElastiCache for distributed sessions and caching.
    • Implemented an Outbox pattern over SQS FIFO so data synchronisation survives partial failure instead of silently diverging.
    • Integrated the Wompi payment gateway with webhook-based transaction confirmation, and Contentful for editable content.
    • Containerised the stack with Docker Compose against a local DynamoDB, automating image builds to ECR.
    • Covered the data layer with pytest and moto, mocking DynamoDB so tests run without touching AWS.
    • Delivered operational reporting with XlsxWriter and analytics dashboards with Dash and Pandas.
    • Django
    • Python
    • AWS ECS Fargate
    • DynamoDB
    • SQS
    • Redis
    • S3
    • Docker
    • CloudFormation
    • Pandas
    • pytest
  2. Molok

    Full-Stack Engineer

    Motorcycle credit platform covering inventory, loan origination, customer validation, portfolio tracking and payments.

    • Built a combined risk engine scoring primary borrower and co-borrower across 6 risk levels from delinquency, insolvency and outstanding obligations.
    • Cached bureau results in DynamoDB for 90 days, cutting repeat lookups against a rate-limited external service.
    • Integrated Procrédito over SOAP for real-time credit scores, isolating the legacy protocol behind an internal interface.
    • Secured three role boundaries — management, advisor, customer — with JWT and S3-backed document storage.
    • Django
    • Python
    • DynamoDB
    • Redis
    • S3
    • SOAP
    • JWT
    • Jinja2
    • JavaScript

02Projects

Selected work

Each of these solved a problem I could state before I started. The engineering decisions are the interesting part, so they are written down.

SECOP II dashboard showing the daily pipeline stages and 2024 national contracting figures
Data Engineering

SECOP II — Public Procurement Analytics

A daily ELT pipeline over every public contract in Colombia, asking four questions of the data.

Problem

Colombia publishes all public contracting through SECOP II, but the raw feed is unusable for analysis: values go unreported, entity names are inconsistent, and the volume makes ad-hoc querying expensive.

Decisions

  • Modelled the warehouse as ELT rather than ETL — land raw in GCS, transform in BigQuery with dbt, so a bad transform never costs a re-extract.
  • Pre-aggregated into marts, keeping only supplier concentration as a live fact-table query (~163 MiB per entity); the entity picker is served from memory instead.
  • Treated missing data as a first-class value: a null renders as a hatched gap, never a zero, because a confident zero is a wrong answer where no answer exists.
  • Encoded that distinction as texture rather than colour, so it survives greyscale, printing and colour vision deficiency.
  • Row counts are read live from the API's /health endpoint, never hardcoded — the marts rebuild daily and the figures drift.

Serves 950,670 contracts across 3,442 entities for 2024. Rebuilds daily on Airflow with nothing precomputed at build time.

  • Python
  • Airflow
  • dbt
  • BigQuery
  • GCS
  • FastAPI
  • Cloud Run
  • Terraform
  • Docker
  • Next.js
  • D3
OncoVision interface showing a histology slide beside its Grad-CAM heatmap
Machine Learning

OncoVision — Breast Histology Classifier

Multi-task EfficientNet-B0 over 7,909 histology slides, with Grad-CAM explanations.

Problem

Breast histology classification is usually framed as one binary question, but clinicians need the subtype too — and a model that cannot show why it decided is not usable in a clinical conversation.

Decisions

  • Chose a single multi-task head over two separate models: benign/malignant and the 8 clinical subtypes share the same features, so one backbone learns both and cannot contradict itself.
  • Picked EfficientNet-B0 for its accuracy-per-parameter — the model had to fit a free-tier inference container, not a training cluster.
  • Added Grad-CAM heatmaps so every prediction ships with the region that drove it.
  • Paired the classifier with an AlphaFold2 structural comparison of PALB2 (wild-type vs mutant) in an interactive 3D viewer.

Best validation AUC-ROC of 0.89 on the BreaKHis dataset.

  • PyTorch
  • EfficientNet-B0
  • Grad-CAM
  • FastAPI
  • AlphaFold2
  • Python
  • NGL Viewer
E-commerce storefront showing the product catalog and cart
Web Development

Modern E-Commerce Platform

Full-stack storefront with three payment rails and a protected admin dashboard.

Problem

Building a storefront that accepts PayPal, Stripe and cash on delivery without the checkout branching into three incompatible flows.

Decisions

  • Normalised all three payment methods behind one order state machine, so the fulfilment path is identical regardless of how the customer paid.
  • Validated every boundary with Zod schemas shared between client and server, so the form and the API can never disagree about what is valid.
  • Next.js
  • TypeScript
  • Prisma
  • PostgreSQL
  • Zod
  • Stripe
  • PayPal
  • Jest
Swagger documentation page listing the blogs API endpoints
Web Development

NestJS Blogs API

REST API with dual authentication, media handling and end-to-end tests, deployed on EC2.

Problem

A blogging backend that supports both password and Google identities without maintaining two divergent auth paths.

Decisions

  • Unified JWT and Google OAuth onto a single guard, so authorisation logic never needs to know which identity provider issued the session.
  • Documented the surface with Swagger generated from the DTOs themselves, keeping the contract and the code from drifting apart.
  • NestJS
  • TypeORM
  • PostgreSQL
  • Swagger
  • JWT
  • Google OAuth
  • AWS EC2
  • Jest
Airline booking interface showing seat selection
Web Development

Airline Booking System

Spring Boot API and React SPA with three distinct roles over shared inventory.

Problem

Seat inventory has to stay consistent while customers, admins and pilots all act on it with different permissions.

Decisions

  • Enforced role boundaries server-side rather than in the SPA, so the React client is a convenience layer and never the security boundary.
  • Spring Boot
  • Java
  • MySQL
  • React
  • JWT
  • Vite

03Stack

What I reach for

Ordered by where I spend my time, not by how the logos look. Everything here appears in shipped work.

Data & Pipelines

  • Python
  • SQL
  • Airflow
  • dbt
  • BigQuery
  • DynamoDB
  • PostgreSQL
  • Pandas

Cloud & Infrastructure

  • AWS ECS Fargate
  • GCP Cloud Run
  • Terraform
  • CloudFormation
  • Docker
  • S3 / GCS
  • SQS
  • Redis

Machine Learning

  • PyTorch
  • Scikit-learn
  • EfficientNet
  • Grad-CAM
  • NumPy
  • Matplotlib
  • Jupyter

Application

  • Django
  • FastAPI
  • TypeScript
  • Next.js
  • React
  • NestJS
  • REST APIs
  • JWT / OAuth

Let’s talk about data

I’m looking for data engineering roles and internships where I can keep building pipelines and the infrastructure underneath them. If that’s what you’re hiring for, get in touch.

Send an email

daniel.pineda73@eia.edu.co