Open to Opportunities

Voughn Emil Calma

Data & Automation Engineer  ·  Geospatial Data Pipelines

Data and automation engineer for a 40-person geospatial department. I built and run the weekly ingestion, consolidation, validation and reporting pipeline the team depends on, cutting turnaround from more than a day to about 15 minutes, plus the Python, Power Query, VBA and SQL tools behind it.

500+
Man-hours saved per month
90+
Active daily users
~15 min
Weekly cycle, was 1+ day
15+
Tools built

What I Work With

Tools I have used in my work and in the projects on this site, and the roles each skill area supports.

Technical skills and the roles they support
Skill areaCore toolsData EngineerGIS Developer
Data pipelines & automationPython (pandas, NumPy), Playwright web scraping, Power Query (M), scheduled and batch jobsYesYes
SQL & databasesSQL, SQLite, GeoPackage, Cloudflare D1YesYes
Data QC & validationRule-based validation checks, audit changelogs, pytest, hold-out checksYesYes
Spreadsheet & low-code automationExcel VBA and add-ins, Power Apps, Power Automate, SharePointYesYes
Cloud & serverless appsCloudflare Workers, Pages and D1, VercelYesYes
GIS & spatial analysisQGIS, PyQGIS, GeoPandas, GDAL/OGR, spatial joins, Processing modelsNoYes
Remote sensingSentinel-2 indices (NDVI, NDBI, MNDWI), drone RGB imagery, Random Forest classification, DEM hydrologyNoYes
Web mappingLeaflet.js, GeoJSON, interactive dashboardsNoYes
AI-assisted developmentAI as a partner for planning, scripting, automation; self-directed AI/GIS/automation experiments and explorationYesYes

Tools I've Built

Tools built for my department, a community organisation, a consultancy client and myself. Company-built tools are described here; their code stays with the company.

Map Production & GIS Automation

Weekly Map Build Model
QGIS Processing Model

Produces all 30 maps per project site (11 map types) in one run. A 125-step model that chains the PyQGIS toolbox, legend labeling, style switching and layout export, at the core of the weekly reporting cycle that went from more than a day to about 15 minutes.

1+ day → ~15 min Weekly QGIS Modeler · PyQGIS
Organized KML Integrated Export
Neo Advanced Model
QGIS Plugin · v13.2

Exports layers as structured KML/KMZ from CSV rule files: features are grouped by a chosen attribute into labeled, nested folders and keep their symbology in Google Earth. Replaces individually exporting and organizing layers by hand.

90% Time Savings 40-person Dept Daily Python · PyQt5 · QGIS API
PyQGIS Processing Toolbox
12 QGIS Python Algorithms

Includes GeoPackage change detection that logs every changed field with its old and new value for audit, a data-source swap across GeoPackage, Shapefile, GeoJSON and CSV, map theme switching, legend text on symbols, QML-to-CSV rule export, and model helpers.

Daily Python · PyQGIS Processing
Field Report Processing Models
4 QGIS Processing Models

Turn a municipality's raw mobile field-report exports (KMZ) into one analysis-ready layer: merging reports, parsing embedded attributes, consolidating negotiators and flagged issues into single fields, standardising negotiation dates, and spatially joining each report to its lot and barangay. The two most used cut a 30–60 minute manual process to about 20 seconds.

30–60 min → ~20 s 30 Juniors Daily QGIS Model · KMZ Processing
Affected Area Models
QGIS Processing Models

Parameterised models that compute per-lot affected area along route corridors for acquisition and compensation planning, with supporting models for tower footprint boxes and lot outlines.

Per Project QGIS Modeler
Right of Way — Poly-Line Position ID
QGIS Python Script

Ranks parcels/polygons by their sequential position along a reference corridor line — critical for right-of-way workflows. Uses intersection-aware logic: if a polygon overlaps the line, it uses that point; otherwise it projects perpendicularly. Handles CRS mismatches automatically.

6 Seniors Weekly Python · PyQGIS · Geometry Engine
Legend Optimized Labelling
QGIS Plugin

Applies optimized legend-style labeling to rule-based symbology layers. Supports pricing and non-pricing modes, configurable decimal places, unit suffixes, and classification fields. Eliminates manual legend label editing for senior map production workflows.

6 Seniors Weekly Python · QGIS Plugin API
Copy All Styles
QGIS Python Script

Transfers all named styles from one GIS layer to another, preserving style names and setting the active style to match the source. Addresses a gap in QGIS's native style management that required manual one-by-one copying.

6 Seniors Weekly Python · QGIS Style Manager
Field Template Generator
Python Tool

Generated 131 location-specific mobile data-collection templates (SW Maps) across 14 provinces in one run. Copies a master template per row of a CSV config, renames its layers and pre-sets province, municipality and barangay dropdowns, replacing hand-editing each template in the app.

131 Templates · 1 Run Python · pandas · sqlite3

Data Pipelines & Business Apps

Power Query Consolidation Pipeline
Excel · M Language

Locates and loads source databases from a configured folder (skipping lock files), combines them, joins them to tranche, conversion and reclassification reference data, flags consolidation status, and normalises dates and currency.

Weekly Excel · Power Query (M)
VBA Automation Library & Add-ins
Excel · VBA · M Language

Packaged as add-ins, it replaced manual database builds, table refreshes and summary pivots, and runs automated data-quality checks on dates, payment terms and owner values that output an exception report for correction before data reaches reports.

40-person Dept Daily Excel · VBA · Power Query
Team Scheduling & Leave Tracker
Web Application · Cloudflare Workers

Members log daily schedules and leave; supervisors see the whole team on a dashboard. Config-driven scheduling windows, deadlines, holidays, org hierarchy, site assignments and field pullout/deployment rotations, on a serverless Worker with a D1 database.

40-person Dept Quarterly JS · Cloudflare Workers · D1
Map Request Ticketing System
Microsoft Power Platform

Forms requests flow into SharePoint with per-province ticket numbers, auto-filed folders and acknowledgment emails. An 11-screen Power Apps workspace handles assignment, parcel entry, review and trends, with Teams adaptive-card notifications and per-province Power Query reports.

Power Apps · Power Automate · SharePoint · Teams
Liquidation Tracker Flow
Power Automate

Each forwarded liquidation email has its attachments filed into a per-code OneDrive folder, and a row with code, purpose, processor, amount, date and attachment links is appended to an Excel tracker.

Power Automate · Outlook · OneDrive · Excel

Independent, Volunteer & Personal Projects

Community Data Platform
Volunteer · Full-Stack Web App

A report submission web app with admin review and diff views, where approved changes are written to a Cloudflare D1 (SQL) database with a full before/after audit changelog. Paired with a web map dashboard fed by a Python pipeline that cleans multi-municipality data and joins it to administrative boundaries. Built with Claude Code.

Confidential Data 50+ External Users Leaflet.js · Cloudflare Pages · D1 · Python
Drone-Imagery Analysis Toolbox
Consultancy · Remote Sensing

Random Forest land-cover classification on an engineered 11-feature stack, bare-land detection auto-calibrated by IoU grid search against ground-truth samples, per-square-metre vegetation grid analysis, and boundary refinement that snaps rough polygons to spectral edges.

Python · NumPy · GDAL · SciPy · scikit-learn · QGIS
Public Works Project Scraper
Python · Data Collection

Collects public infrastructure project records page by page, filtered by year and region, flattens the JSON and exports it to Excel; a companion QGIS model processes field inspection KMZs.

Python · Playwright · pandas · QGIS
Cebu City Green Space and Flood-Prone Screening
Personal · Remote Sensing & Open Data

A screening map of Cebu City built only from open data: Sentinel-2 land cover, a DEM flood-proneness proxy, OpenStreetMap and Google building footprints, with a tested Python pipeline, sensitivity checks and an interactive map.

Open data only Python · rasterio · pysheds · Leaflet.js

Smaller Samples

GIS by Training, Data Engineering by Practice

I build the data pipelines and tools a geospatial team runs on, so its workflows are faster, more reliable and easier to use. My work sits between GIS and software engineering: I don't just analyze data, I build the systems that ingest, validate and deliver it.

Over the past years I've developed and deployed a full suite of tools — QGIS plugins, Python scripts, web dashboards, and automated processing pipelines — all actively used by colleagues every day. Across them: more than 500 man-hours saved per month and more than 90 active daily users. I supervise 3 Junior GIS Specialists and have trained 12 in total.

I'm strongest at keeping recurring jobs running, tracing data discrepancies to their root cause, reconciling records across source systems and automating away manual effort, and I'm building toward data engineering roles that value technical depth alongside domain expertise.

QGIS Plugin Developer Built and maintain production QGIS plugins and Processing models used daily across a 40-person department
Full-Stack Web Developer Built web apps on Cloudflare Workers/Pages and D1 with Claude Code, serving 50+ external users
Data Pipeline Engineer Automated the weekly reporting cycle end to end, from more than a day to about 15 minutes
Multi-Stack Proficiency Python, SQL, JavaScript, M Language, VBA, Power Platform, Cloudflare and Claude Code

Open to the Right Opportunity

I'm particularly interested in data engineering, geospatial data engineer, and GIS developer / automation roles where I can build tools and systems at scale. Remote, or hybrid within Metro Manila.

Work mode
Remote, or hybrid within Metro Manila
Interested in
Data engineering, geospatial data engineering, GIS development and automation