Projects
Things I have built and run, newest and most live first.
_Cloud & AI Projects
# NCOER Writer - Multi-Agent Army Evaluation DraftingMulti-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 logicStrict prompt constraints prevent hallucinated metrics; unverified achievements trigger clarification requests rather than assumed statsDeterministic Go validator enforces EES formatting rules (bullet counts, character limits, leading syntax) via a Go MCP server behind AgentCore GatewayAuth handled via Google-federated Cognito with a DynamoDB access allowlist checked per sessionStateless request lifecycle ensures no Soldier performance data is persisted after evaluation generationStatic Next.js frontend hosted on S3/CloudFront, deployed via GitHub Actions OIDC and provisioned with Terraformlive: ncoer.travispollard.com# CFB Forecast - Automated Elo Prediction EngineWeekly FBS prediction engine that publishes game forecasts to immutable storage before kickoff and tracks accuracy against Vegas closing linesCustom Elo model seeded from Sagarin ratings, with K-factor and margin-of-victory parameters tuned via a 2015–2025 historical backfillPython 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 OACGitHub Actions runner assumes AWS publisher roles via OIDC, pulling vendor API keys from SSM Parameter StoreClient-side execution limits enforce API call budgets, backed by mutation testing in CIlive: travispollard.com/cfb | repo: github.com/jtravisp/travispollard.com# Near Mint Radar - Trading Card Price TrackerBuilt a trading card price tracker - users watchlist cards with a target price and get an email when the price dropsNext.js frontend on AWS Amplify with Google OAuthPython FastAPI backend running on Lambda behind an API Gateway HTTP APISingle-table DynamoDB design, S3 price cache, and an EventBridge-scheduled daily polling jobSES alert emails, Secrets Manager for credentials, and GitHub OIDC for keyless CI/CDEntire stack provisioned with Terraformlive: 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 pasteAES-256-GCM encryption in the browser via the Web Crypto API - the key lives in the URL fragment and is never transmittedGo standard-library HTTP server with the frontend embedded in the binary using go:embedDynamoDB with native TTL powering burn-after-read and timed paste expiryOwner tokens stored only as SHA-256 hashes; request bodies capped at 512KB at the HTTP layerContainerized on ECS Fargate behind an ALB, provisioned with Terraform using S3 remote stateTaken 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 publicrepo: github.com/jtravisp/privatepaste# The Lone Star AMPA - 36th Infantry Division BandBuilt a study portal for the Army Musician Proficiency Assessment used by soldiers preparing for evaluationNext.js static export with an MDX content pipeline so instrument guides are authored in MarkdownPer-instrument tabbed guides, rubric breakdowns, and downloadable Army regulation PDFsStyled with Tailwind CSS and deployed on Cloudflare Pageslive: lonestarampa.com | repo: github.com/jtravisp/lonestarampa.com# travispollard.com - This SiteNext.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 route53GitHub 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 itA merge to main triggers CodePipeline: CodeBuild runs the same suite, the export deploys to S3, and a final stage invalidates the CloudFront distributionVisitor counter is a Python Lambda behind API Gateway incrementing a DynamoDB itemA 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 statesrepo: github.com/jtravisp/travispollard.com# Moodle Containerization - Internal LMSContainerized Moodle 5 on PHP 8.3 with MariaDB and Redis, replacing a set of deprecated upstream Bitnami images that were no longer receiving updatesHandled the /public restructure Moodle 5 introduces and the Apache DocumentRoot change it forces, plus OPcache, Redis session handling, and igbinary serializationDesigned for ECS with EFS for shared moodledata and ElastiCache for sessions# Jenkins HA on AWSBuilt Jenkins controller and agent AMIs with Packer and Ansible provisioning, so replacing a node is a launch rather than a rebuildTerraform for the whole stack - IAM, an autoscaling group behind an ALB with a static DNS name, and EFS so controller state survives the instanceSSH keys held in Parameter Store and retrieved at boot with boto3 rather than baked into an image# Linux From ScratchCompleted a full Linux From Scratch build on a Proxmox VM with a custom 6.13.4 kernelCompiled and configured systemd, Glibc, Bash, and the rest of the toolchain by hand, with custom partitioningEnded with a bootable system reachable over SSHSystems, Identity & Operationsshowhide
# Systems, Identity & OperationsCondensed high-impact work from enterprise IT and identity engineering roles prior to platform focus.## Identity & Access ManagementJira 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 AutomationZero-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 siteBike Ride Planner - weather, tire pressure, and ride nutrition calculators for planning a weekend ridenmap
nmap travispollard.comStarting Nmap 7.95 ( https://nmap.org ) at 2026-09-24 23:59 CSTNmap scan report for travispollard.com (123.45.67.89)Host is up (0.021s latency).Not shown: 998 filtered portsPORT STATE SERVICE80/tcp open http443/tcp open https666/udp open doom19132/udp open minecraft