Hi, I'm Aaron, an operations professional transitioning into cloud computing and DevSecOps. I'm fascinated by what happens under the hood of modern systems and enjoy building infrastructure that is fast and resilient.
This site documents the projects I'm working on and what I'm learning along the way. Check out my recent build ~ AWS Docs RAG.
I'm from Redlands, California and graduated from Cal State Long Beach in December 2023 with a BA in International Studies. That background shaped how I think about systems and organizations at scale.
I work as an Operations Support Specialist at Southwest Self Storage, where I've optimized critical processes: automated auction mailing certification workflow (95% time reduction), diagnosed system issues that were causing recurring payment failures, and implemented automatic SMS notifications to past due accounts. I understand the real world implication of design decisions, which is why the reliability and automation of cloud resonates with me.
Click a project to expand it and read more.
I built a full-stack Retrieval Augmented Generation (RAG) system that answers questions about AWS services using real AWS documentation as its knowledge base. Users ask a question through a web-based chat interface, and the system searches through indexed documentation, retrieves the most relevant sections, and generates a grounded answer using Claude — complete with source links back to the original AWS docs.
The Problem
Large language models are powerful, but they hallucinate — they can confidently generate answers that sound right but aren’t. For something like AWS documentation, where accuracy matters, you need a way to ground the model’s responses in real source material. RAG solves this by retrieving actual documentation at query time and feeding it into the prompt so the model answers based on facts.
How I Built It
Data Pipeline: I wrote a Python scraper that crawls AWS user guides for S3, EC2, Lambda, DynamoDB, and VPC, strips the HTML down to clean text, and uploads it to S3. The documents are split into overlapping chunks (~1000 characters each) using LangChain’s text splitter, and each chunk is converted into a 1024-dimensional vector using Amazon Titan Embeddings v2 via Bedrock. The vectors are stored in Pinecone’s free-tier vector database for fast semantic search.
Query Pipeline: When a user asks a question, an AWS Lambda function embeds the question using the same Titan model, queries Pinecone for the 5 most semantically similar document chunks, constructs a prompt with anti-hallucination instructions, sends it to Claude via Amazon Bedrock, and returns the answer with source citations. API Gateway exposes this as a REST endpoint.
Frontend: A static HTML/JS chat interface hosted on S3 and served through CloudFront with HTTPS. Single-file HTML the API and renders responses.
Security: The Lambda execution role runs with a scoped IAM policy limited to Bedrock model invocation and CloudWatch logging. No broad admin permissions in production.
Architecture
Tech Stack
| LLM | Claude Sonnet 4.6 via Amazon Bedrock |
| Embeddings | Amazon Titan Embeddings v2 |
| Vector DB | Pinecone (free tier) |
| Compute | AWS Lambda + API Gateway |
| Frontend | S3 + CloudFront |
| Monitoring | CloudWatch |
| Language | Python 3.11 |
Key Decisions
Pinecone over OpenSearch Serverless: OpenSearch Serverless has a minimum cost of ~$700/month even at zero traffic. Pinecone’s free tier handles up to 100K vectors at no cost — identical search quality at a fraction of the price.
Serverless architecture: Lambda + API Gateway means zero cost at idle and automatic scaling under load. The entire system runs for approximately $3–11/month.
CLI-first deployment: Every component — from IAM roles to CloudFront distributions — is deployed through Python scripts using boto3 and the AWS CLI.
What I Learned
This project connected several concepts I’d studied independently — vector embeddings, serverless compute, API design, IAM security — into a single working system. Debugging Lambda deployments from a Windows machine taught me about cross-platform packaging (Linux binaries for Lambda, PowerShell). Scoping IAM policies after deployment reinforced why least-privilege matters.
This is the site you’re looking at right now. I built it as a single static HTML page with a retro early-2000s design, deployed on GitHub Pages. Every section works. The nav scrolls to the right spot, panels expand and collapse, the contact form opens your email client, and the resume has a download link.
The Approach
The early-2000s design was a deliberate choice. I wanted something that stands out from the typical modern portfolio templates while still being fully functional. The entire site is a single HTML file with raw HTML, CSS, and vanilla JS.
How It Works
Layout: A CSS table layout mimics the classic sidebar + content pattern from Web 1.0, using modern CSS under the hood. The sidebar collapses into a horizontal nav bar on mobile.
Expand/Collapse Panels: All project and resume sections use a custom toggle system built with vanilla JavaScript. Clicking the sidebar “Projects” or “Resume” links opens all panels in that section at once.
Widgets: The System Status and Satellite Uplink widgets are pure CSS animations positioned in the left margin on wide screens (>1700px) and hidden on smaller viewports.
Contact: The chatroom-styled contact form constructs a mailto: link on submit, opening the user’s default email client with pre-filled subject and body.
Tech Stack
| Frontend | Single-file HTML, CSS, vanilla JS |
| Hosting | GitHub Pages |
| Design | Custom retro Web 1.0 aesthetic |
| Responsive | CSS media queries (900px, 480px breakpoints) |
| Dependencies | Zero — no frameworks, no build step |
Features
Fully responsive: Sidebar becomes horizontal nav on tablet/mobile. Panels, forms, and widgets all adapt to screen size.
Animated widgets: Spinning globe, orbiting satellite, blinking stars, and a system status panel.
Accessible navigation: Smooth scrolling, toggle-all functionality from the sidebar, and keyboard-friendly interactions.
What I Learned
Building a complete site without frameworks forced me to understand CSS layout, table display, flexbox, positioning, and media queries all working together. The retro aesthetic required creative problem-solving with pure CSS (the globe, satellite orbit, and progress bars are all done without images).
Designed and implemented a document automation workflow to streamline PLN/NOL Certificate of Mailing verification for storage unit auction files. The previous process required manually cross-referencing mailing certifications against tenant records one at a time which is slow and error-prone.
The Problem
Before a storage unit can go to auction, the facility must prove that legally required notices were mailed to the tenant. Each auction file contains a Certificate of Mailing that has to be verified against the tenant name, address, dates, tracking numbers. With dozens of files per auction cycle, this manual lookup process took hours and was prone to human error. There was no standardized procedure, so results varied depending on who did the work.
How I Built It
Document Parsing: Integrated AI-assisted document parsing to extract key fields (tenant name, unit number, mailing date, certification ID) from scanned PDFs and printed forms. This replaced the manual read-and-compare step.
Matching Logic: Built a structured verification workflow that cross-references extracted data against Sitelink ERP tenant records. The process flags mismatches automatically rather than relying on visual inspection.
Documentation: Wrote a step-by-step procedure so that any team member can run the verification process and produce consistent, audit-ready results.
Process Flow
Tech Stack
| Parsing | AI-assisted document extraction |
| Data Source | Sitelink ERP (tenant records) |
| Input | Scanned PDFs, printed mailing certificates |
| Output | Verified, audit-ready auction files |
Results
Time savings: Reduced verification time from hours to minutes per auction cycle. What used to take a full afternoon now takes a fraction of the time.
Accuracy: Automated matching catches mismatches that visual inspection missed. Fewer errors means fewer compliance risks.
Reproducibility: Documented process means anyone on the team can run it with consistent results, reducing single-point-of-failure dependency on one person.
What I Learned
This project taught me that the hardest part of automation isn’t the technology but understanding the existing process well enough to know what to automate and what to leave as a human check. Writing documentation that others can actually follow was just as important as building the workflow itself.
Click a category to expand. You can also download the full PDF below.