Projects

Things I have built and run, newest and most live first.

_

Cloud & AI Projects

# NCOER Writer - Multi-Agent Army Evaluation Drafting
Multi-agent pipeline that transforms raw performance notes into regulation-compliant NCOER bullets for Army Band NCOs (DA Forms 2166-9-1 and 2166-9-2)
Strands agents on Amazon Bedrock: an intake agent prompts for missing details, while a drafting agent applies DA Pam 623-3 and MOS translation logic
Strict prompt constraints prevent hallucinated metrics; unverified achievements trigger clarification requests rather than assumed stats
Deterministic Go validator enforces EES formatting rules (bullet counts, character limits, leading syntax) via a Go MCP server behind AgentCore Gateway
Auth handled via Google-federated Cognito with a DynamoDB access allowlist checked per session
Stateless request lifecycle ensures no Soldier performance data is persisted after evaluation generation
Static Next.js frontend hosted on S3/CloudFront, deployed via GitHub Actions OIDC and provisioned with Terraform
live: ncoer.travispollard.com
# CFB Forecast - Automated Elo Prediction Engine
Weekly FBS prediction engine that publishes game forecasts to immutable storage before kickoff and tracks accuracy against Vegas closing lines
Custom Elo model seeded from Sagarin ratings, with K-factor and margin-of-victory parameters tuned via a 2015–2025 historical backfill
Python ingestion pipeline parses CollegeFootballData API and raw Sagarin snapshots with strict validation (unmapped teams or missing data throw immediate build errors)
JSON predictions publish to an isolated S3 bucket served via a second CloudFront origin behind OAC
GitHub Actions runner assumes AWS publisher roles via OIDC, pulling vendor API keys from SSM Parameter Store
Client-side execution limits enforce API call budgets, backed by mutation testing in CI
live: travispollard.com/cfb | repo: github.com/jtravisp/travispollard.com
# Near Mint Radar - Trading Card Price Tracker
Built a trading card price tracker - users watchlist cards with a target price and get an email when the price drops
Next.js frontend on AWS Amplify with Google OAuth
Python FastAPI backend running on Lambda behind an API Gateway HTTP API
Single-table DynamoDB design, S3 price cache, and an EventBridge-scheduled daily polling job
SES alert emails, Secrets Manager for credentials, and GitHub OIDC for keyless CI/CD
Entire stack provisioned with Terraform
live: nearmintradar.com | app repo: github.com/jtravisp/magictracker-app | infra repo: github.com/jtravisp/magictracker-infra
# PrivatePaste - Zero-Knowledge Encrypted Vault (archived)
Built an encrypted text vault where the server only ever stores ciphertext and can never read a paste
AES-256-GCM encryption in the browser via the Web Crypto API - the key lives in the URL fragment and is never transmitted
Go standard-library HTTP server with the frontend embedded in the binary using go:embed
DynamoDB with native TTL powering burn-after-read and timed paste expiry
Owner tokens stored only as SHA-256 hashes; request bodies capped at 512KB at the HTTP layer
Containerized on ECS Fargate behind an ALB, provisioned with Terraform using S3 remote state
Taken down after tracing the idle cost: an ALB and a warm Fargate task bill by the hour whether or not anyone pastes anything, which is the wrong shape for traffic that arrives in bursts. The source is still public
repo: github.com/jtravisp/privatepaste
# The Lone Star AMPA - 36th Infantry Division Band
Built a study portal for the Army Musician Proficiency Assessment used by soldiers preparing for evaluation
Next.js static export with an MDX content pipeline so instrument guides are authored in Markdown
Per-instrument tabbed guides, rubric breakdowns, and downloadable Army regulation PDFs
Styled with Tailwind CSS and deployed on Cloudflare Pages
live: lonestarampa.com | repo: github.com/jtravisp/lonestarampa.com
# travispollard.com - This Site
Next.js static export served from S3 through CloudFront, with Route 53 and an ACM certificate, provisioned end to end by Terraform modules for s3, cloudfront, acm, and route53
GitHub Actions gates every pull request: typecheck, lint, a full static export, and the Playwright suite across Chromium and Firefox - pinned to UTC and to the same Node version the deploy builds with, because a gate running a different environment from the deploy has a gap in it
A merge to main triggers CodePipeline: CodeBuild runs the same suite, the export deploys to S3, and a final stage invalidates the CloudFront distribution
Visitor counter is a Python Lambda behind API Gateway incrementing a DynamoDB item
A second CloudFront origin serves the football pipeline JSON from its own bucket over an Origin Access Control, with SSM parameters as the only seam between the two Terraform states
repo: github.com/jtravisp/travispollard.com
# Moodle Containerization - Internal LMS
Containerized Moodle 5 on PHP 8.3 with MariaDB and Redis, replacing a set of deprecated upstream Bitnami images that were no longer receiving updates
Handled the /public restructure Moodle 5 introduces and the Apache DocumentRoot change it forces, plus OPcache, Redis session handling, and igbinary serialization
Designed for ECS with EFS for shared moodledata and ElastiCache for sessions
# Jenkins HA on AWS
Built Jenkins controller and agent AMIs with Packer and Ansible provisioning, so replacing a node is a launch rather than a rebuild
Terraform for the whole stack - IAM, an autoscaling group behind an ALB with a static DNS name, and EFS so controller state survives the instance
SSH keys held in Parameter Store and retrieved at boot with boto3 rather than baked into an image
# Linux From Scratch
Completed a full Linux From Scratch build on a Proxmox VM with a custom 6.13.4 kernel
Compiled and configured systemd, Glibc, Bash, and the rest of the toolchain by hand, with custom partitioning
Ended with a bootable system reachable over SSH
Systems, Identity & Operationsshow
# Systems, Identity & Operations
Condensed high-impact work from enterprise IT and identity engineering roles prior to platform focus.
## Identity & Access Management
Jira License Optimization: Audited and restructured Jira access control, saving $20K+ annually while maintaining full cross-departmental operations.
Directory & Cloud Sync Automation: Developed PowerShell pipeline using Paylocity CSV exports as HR source-of-truth to automate title/manager updates across Active Directory, Okta, and Azure AD / Entra ID.
Automated AD Onboarding: Built PowerShell department-template onboarding scripts, automating group memberships, OU placements, and resource provisioning.
Okta API Tooling: Scripted custom Okta API tools for batch user management and group assignments, replacing deprecated manual administrative processes.
SSO Integration: Integrated Kandji Admin/User auth and CXOne Call Center platforms with Okta SSO, standardizing zero-trust access control.
## Endpoint & Infrastructure Automation
Zero-Touch Mac Deployment: Implemented Kandji MDM from scratch and established Apple Business Manager integration, enabling zero-touch deployment for all new Mac hardware.
Automated S3 Glacier Retrieval: Built custom Go utility to query, request, and download archived security camera footage from AWS S3 Glacier based on timestamp and camera ID.
Windows Imaging Modernization: Replaced deprecated MDT with SmartDeploy over WDS/PXE for Windows 11, automating pre-installed applications and BitLocker GPO key escrow to Active Directory.
Automated AD & Storage Monitoring: Developed PowerShell scripts for AD BitLocker key escrow verification and Power Automate workflows for SharePoint storage threshold alerting (80% trigger).
Automated Helpdesk Operations: Built Zendesk KPI dashboards, automated weekly stakeholder reporting, and maintained a 99% CSAT rating across 2023–2024.
# Also on this site
Bike Ride Planner - weather, tire pressure, and ride nutrition calculators for planning a weekend ride
nmap
nmap travispollard.com
Starting Nmap 7.95 ( https://nmap.org ) at 2026-09-24 23:59 CST
Nmap scan report for travispollard.com (123.45.67.89)
Host is up (0.021s latency).
Not shown: 998 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
443/tcp  open  https
666/udp  open  doom
19132/udp  open  minecraft