About
Principal engineer with 7+ years shipping and maintaining production software, now working where large language models meet real business systems. I build governed AI platforms: Azure-native knowledge graphs and vector retrieval where authorization is enforced at the retrieval boundary rather than hoped for in the prompt, answer layers that cite their sources and return insufficiency instead of fabricating, and agent workflows wired into the platforms a company already runs on. My day-to-day spans the Anthropic/Claude API, Microsoft Foundry, and the Model Context Protocol — structured tool calling, context and token-budget management, prompt caching, and evaluation harnesses that prove a change actually improved output. The other half of the job is integration: joining Entra ID, Microsoft Graph, PostgreSQL and Cosmos pipelines, PSA, telephony, and accounting platforms into event-driven services with explicit permission boundaries. I came to engineering deliberately — a business degree, a full-stack immersive, then years of production work well before the current wave of AI enthusiasm. That foundation is exactly what separates a system people can depend on from a demo that falls over in month two. One principle I keep coming back to: arithmetic belongs in a SQL engine, not a language model, and every number a system reports should trace back to its source.
Lynnwood, WA
How I build
-
Arithmetic belongs in a SQL engine, not a language model
Every number a system reports should trace back to the file it came from, and a reader should be able to check it. A model that does its own math produces answers nobody can audit — and an answer nobody can audit is not an answer, it's a guess with good posture.
-
Authorization belongs at the retrieval boundary, not in the prompt
A system that asks a model to respect permissions has already lost. The only data a model cannot leak is data it was never handed. Enforce access where the records are fetched, and the prompt stops being a security surface.
-
A system that can't say "not enough evidence" can't be trusted when it answers
Returning insufficiency is a feature, not a gap in coverage. Confident fabrication is the failure mode that costs you the user — usually not the first time it happens, but the first time they catch it.
-
Internal tooling is never more than one release from interrupting a thousand people
I learned this maintaining a platform 16,000 people used daily. Change control, backward compatibility, and testing before shipping aren't process overhead on a system everyone depends on. They're the job.
Selected work
Daily Compliance Form Automation
Workflow AutomationEngineered a fully automated California labor law compliance pipeline eliminating all manual DCF processing for a construction industry client. Two interconnected Rewst workflows handle real-time email intake, HTML parsing, SharePoint document filing, compliance alerting, and scheduled weekly management reporting — with zero manual intervention from submission to archived report.
- Webhook-triggered real-time processing — parses inbound HTML emails into structured JSON, routes submissions into department-organized SharePoint folders via Graph API
- Email-to-roster matching against a live Excel employee directory stored in SharePoint, with duplicate detection and automatic suffix handling
- Real-time compliance alerting for California labor law violations — denied rest breaks, missed meal periods, injury disclosures, and future-dated submissions
- Supabase as the persistent data layer — Workflow 1 writes every submission in real time; Workflow 2 reads from Supabase to power weekly reporting
- Cron-scheduled weekly digest built entirely in Jinja — cross-references full employee roster against submissions, surfaces missing days and alert summaries, distributes via email and archives to SharePoint
Pax8 to Bill.com Invoice Automation
Financial AutomationBuilt a sophisticated financial data transformation and reconciliation engine that automates the conversion of Pax8 vendor invoices into Bill.com-ready import files across 60+ managed client organizations. What was a painstaking, error-prone manual spreadsheet process is now a single form submission — pulling raw invoice data from HaloPSA, normalizing and matching every line item, and delivering fully formatted, import-ready CSV files back to the ticket without a human ever touching a spreadsheet.
- Dual-layer client name normalization engine — 60+ Pax8-to-canonical name mappings and 70+ keyword-based description reassignments declared as structured JSON lookup tables, resolving abbreviations, legal suffixes, legacy tenant names, and shorthand codes before any matching occurs
- Fuzzy GL code matching algorithm written entirely in Jinja2 — strips Unicode artifacts, normalizes descriptions, truncates to a 16-character search key, and regex-matches against a Bill.com template to pull Account Number, Line Item Account Name, and Department; unmatched records are flagged with placeholder values for finance review
- Full comparison debug log generated per run — captures original description, normalized search key, and match result for every line item, giving complete visibility into matching logic
- Automatic Bill.com batching — sorts output alphabetically, reindexes line item order, and splits into 100-line chunks with sequential invoice suffixes to comply with Bill.com import limits
- Output delivery back to HaloPSA ticket — full archival CSV, per-batch import-ready CSV files, and an HTML notification email summarizing all unmatched line items, all without leaving the PSA
Vendor Registry & Contract Intelligence Platform
Internal ToolingDesigned and built a centralized vendor management platform that replaced a fragmented spreadsheet-based process across the entire vendor portfolio. The system provides a live, searchable registry of all supplier relationships — surfacing contract renewal deadlines, compliance document status, billing cadences, and escalation contacts in one place — and deploys automatically to production on every commit via a GitHub Actions pipeline that syncs updates through Rewst into the company's internal tooling.
- Live vendor registry backed by Supabase — 24-field schema capturing supplier identity, contract terms, billing structure, compliance documents, account contacts, and internal ownership across the full vendor portfolio
- Proactive contract renewal monitoring — surfaces upcoming renewal dates with 90-day advance warnings so no renewal window is ever missed
- Compliance document tracking — W9 and Certificate of Insurance status visible at a glance for every vendor, with clear indicators for gaps before onboarding or renewals
- Full CRUD interface with real-time search and multi-axis filtering — filter by vendor status, provider type, and compliance state without a page reload
- Automated deployment pipeline — push to main triggers GitHub Actions, which runs a Python sync script that delivers the updated application to the company's internal platform via Rewst webhook, eliminating any manual publishing step
- Python CSV import engine for bulk vendor onboarding — normalizes status fields, coerces boolean flags, filters empty rows, and upserts directly into Supabase via REST API
Experience
Principal Forward Deployed Engineer
centrexIT 2025 — Present- Principal engineer on an Azure-native knowledge graph and vector retrieval layer over Microsoft 365 and line-of-business data, where authorization is enforced at the retrieval boundary and every answer carries citations and an audit trail — driven from prototype to working multi-source pilot
- Ship agent workflows and retrieval pipelines on the Anthropic/Claude API, Microsoft Foundry, and the Model Context Protocol — structured tool calling, context and token-budget management, prompt caching, and evaluation harnesses that prove a change improved output
- Design answer layers that return insufficiency rather than fabricate when evidence is thin, and analyst surfaces where every figure traces back to its source
- Join Entra ID, Microsoft Graph, PostgreSQL and Cosmos DB pipelines, PSA, telephony, and accounting platforms into event-driven services with explicit permission boundaries and supportable deployment patterns
- Shape product concepts, data models, and workflows for internal platforms and client-facing assessment products, pairing data collection with explainable scoring and evidence review
- Own promotion gates and pre-release verification, set engineering standards and developer tooling, and mentor engineers across concurrent builds
Software Developer II to Senior Software Developer
centrexIT 2022 — 2025- Built and maintained production Python and PowerShell services — webhook receivers, polling daemons, CLIs, and containerized workers — with persistent state, structured logging, and automated deploys
- Developed custom connectors against REST and GraphQL APIs, handling OAuth2 and token refresh, pagination, rate limiting, retry and backoff, and idempotency so repeated events could not corrupt downstream records
- Connected PSA and ticketing (HaloPSA), RMM, telephony (3CX, Twilio), Microsoft 365 and Microsoft Graph, Entra ID, CRM, and billing systems (QuickBooks, Bill.com, Pax8) into coherent cross-system workflows
- Modeled and populated CMDB records, mapped schemas between systems with incompatible data models, and ran bulk migrations of thousands of records with field-level reconciliation
- Built event-driven flows for ticket lifecycle, alert triage, data synchronization, billing and reporting, and zero-touch incident remediation, including real-time services consuming platform event streams and websockets
- Delivered endpoint patching, compliance posture, software deployment, and identity provisioning at scale, orchestrated on Rewst, Power Automate, and Logic Apps where they fit
Software Developer II
Expeditors 2019 — 2022Promoted from Associate Software Developer
- Became sole developer supporting the enterprise ITSM platform — roughly 16,000 users across more than 200 offices worldwide, with one engineer accountable for what all of them relied on
- Designed and built applications end to end — front end, back end, data model, and deployment — setting priorities with stakeholders, making the architectural calls, and supporting them in production
- Connected the ITSM platform to Active Directory and identity services, HR and asset data sources, and other line-of-business systems through APIs and scheduled data exchanges
- Built across the service catalog, service desk tooling, and the process automation engine using PowerShell, JavaScript, SQL, and HTML/CSS — request forms, stored procedures, approval and routing rules, and ticket lifecycle automation
- Operated under strict change control and backward compatibility on a system the whole company depended on daily
Full Stack Web Developer
Galvanize Inc 2018 — 2019- Deliberate career change into software engineering — six months full-time of daily pair programming, code review, and shipping working applications on deadline, covering JavaScript, React, Node.js, PostgreSQL, and RESTful API design
Clinician & Administrator
Prior Career — Behavioral Health 2010 — 2018- Spent 8 years in behavioral health leadership roles before transitioning into software engineering in 2018
Education
Certificate, Java Programming
University of WashingtonCertificate, Full-Stack Web Development
GalvanizeCertificate, Social and Human Services
Seattle Central CollegeBachelor of Science, Business Administration and Management
University of the Pacific — Eberhardt School of BusinessCertifications
Rewst Clean Automation Certificate
Rewst Issued Aug 2025Rewst Foundations Certificate
Rewst Issued Aug 2025Certified SAFe 5 Practitioner
Scaled Agile, Inc. Oct 2020 · expired Sep 2021Azure Fundamentals AZ-900
Microsoft Jan 2020 · expired Jan 2023AWS Certified Cloud Practitioner
Amazon Jan 2019 · expired Jan 2021CompTIA A+ Certified
CompTIA Jun 2018 · expired Jun 2021Skills
Languages
- Python
- TypeScript
- JavaScript
- Java
- PowerShell
- SQL
- HTML / CSS
- Jinja
AI Engineering
- Retrieval-Augmented Generation (RAG)
- Vector Search
- Knowledge Graphs
- Agentic Tool Calling
- Anthropic / Claude API
- Microsoft Foundry
- Model Context Protocol (MCP)
- Context & Token-Budget Management
- Prompt Caching
- Evaluation Harnesses
Cloud & Platform
- Azure Container Apps
- Azure Functions (incl. Durable)
- Azure Blob Storage
- Cosmos DB
- Azure Static Web Apps
- Entra ID
- AWS
- Cloudflare Workers
- Vercel
Backend & Data
- Node.js
- Express
- PostgreSQL
- Supabase
- RESTful APIs
- GraphQL
- Webhooks / WebSockets
- Event-Driven Services
- Schema Design & Migration
Frontend
- React
- Redux
- Next.js
- Angular
- React Native
- Responsive Design
Systems Integration
- Microsoft Graph API
- Microsoft 365
- SharePoint
- Exchange Online
- HaloPSA
- 3CX
- Twilio
- QuickBooks
- Bill.com
- Pax8
- Rewst
- Power Automate
Engineering Practice
- Git / GitHub Actions
- CI/CD Pipelines
- TDD
- Agile / SAFe
- Code Review & Mentorship
- Linux / Unix
Contact
Reach out via email or connect on LinkedIn.