My Projects
ArgoCD GKE Cost-Optimized
Cost-optimized ArgoCD deployment on Google Kubernetes Engine using Terraform and NGINX ingress. Features Tailscale integration for secure access and optimized resource allocation for minimal cloud costs.
Problem Statement
GitOps deployments on cloud platforms often incur significant costs due to always-on infrastructure and over-provisioned resources. Many teams struggle to balance reliability with cost efficiency when running ArgoCD on managed Kubernetes services like GKE.
Approach & Strategy
Designed a cost-optimized deployment strategy focusing on right-sizing resources, using preemptible nodes where appropriate, and implementing efficient networking through Tailscale VPN to avoid expensive load balancer costs while maintaining secure access.
Technical Decisions
- Terraform for IaC: Enables reproducible infrastructure and version-controlled configuration changes
- GKE Autopilot: Reduces operational overhead while optimizing resource allocation automatically
- NGINX Ingress: Lightweight and efficient alternative to cloud load balancers
- Tailscale VPN: Zero-trust network access eliminating need for public load balancers
Implementation Details
The solution leverages Terraform modules to provision a minimal GKE cluster with carefully tuned resource limits. ArgoCD is deployed with optimized memory settings and runs on cost-effective node pools. Tailscale provides secure remote access without exposing services publicly.
Challenges & Solutions
- Challenge: Balancing cost savings with reliability requirements
- Solution: Implemented careful resource quotas and monitoring to ensure stability while minimizing waste
- Challenge: Secure access without expensive load balancers
- Solution: Integrated Tailscale for zero-trust network access at minimal cost
Results & Impact
- Cost Reduction: Achieved ~70% cost savings compared to default GKE ArgoCD deployments
- Monthly Costs: Reduced from $200-300 to under $100 for small-scale deployments
- Security: Enhanced security posture through private networking and VPN-only access
- Maintainability: Fully automated deployment with Terraform enables easy replication
Lessons Learned
- Cloud cost optimization requires continuous monitoring and adjustment
- Managed services like GKE Autopilot can provide both cost and operational benefits
- VPN-based access patterns can eliminate expensive load balancer requirements
- Infrastructure as Code is essential for reproducible cost-optimized deployments
Kubernetes on Vagrant
Local Kubernetes cluster setup using Vagrant and VirtualBox. Spins up a "little borg tribunal" running on Fossa, perfect for development and learning Kubernetes fundamentals.
Problem Statement
Developers need reliable, reproducible local Kubernetes environments for testing and learning without incurring cloud costs. Existing solutions were often complex to set up, resource-intensive, or lacked the flexibility needed for experimentation and development workflows.
Approach & Strategy
Created an automated local Kubernetes cluster using Vagrant and VirtualBox that can be spun up with a single command. Focused on simplicity, reproducibility, and providing a realistic multi-node cluster experience for learning and development.
Technical Decisions
- Vagrant: Provides consistent, version-controlled VM provisioning across platforms
- VirtualBox: Free, widely available virtualization platform with good performance
- Multi-node Setup: Realistic cluster with separate control plane and worker nodes
- Ubuntu Fossa: Stable LTS base with excellent K8s compatibility
Implementation Details
The Vagrantfile automates the entire cluster creation process, from VM provisioning to Kubernetes installation and configuration. The setup includes networking configuration, CNI plugin installation, and helpful utilities for cluster management. Users can customize node counts and resources via configuration variables.
Challenges & Solutions
- Challenge: Networking complexity in local VM environments
- Solution: Implemented bridge networking with careful IP address management
- Challenge: Resource constraints on development machines
- Solution: Optimized VM resource allocation and provided configurable options
Results & Impact
- Developer Productivity: Cluster setup time reduced from hours to minutes
- Cost Savings: Eliminated need for cloud resources during learning and testing
- Learning Tool: Provided realistic environment for Kubernetes experimentation
- Reproducibility: Guaranteed consistent environments across different machines
Lessons Learned
- Automation is key to reproducible development environments
- Local development clusters provide valuable learning without cloud dependency
- Multi-node setups better represent production environments than single-node alternatives
- Good documentation and defaults reduce barriers to entry for new users
Development Configuration Files
Curated collection of development configuration files including Starship prompt configurations and other dotfiles. Feel free to copy and adapt for your own development environment.
BeamMeUp
Fun bash script that uses Vagrant and VirtualBox to instantly create and SSH into a fresh Ubuntu Xenial VM. Quick and easy virtualized development environment on demand.
GitHub Actions Workflows
Complex workflow tests and callable workflow demonstrations. Explores advanced GitHub Actions patterns including reusable workflows and complex automation scenarios.
Personal Portfolio Website
Designed and developed this responsive portfolio website with dark/light theme support, accessibility features, and animated hero section.
Problem Statement
Needed a professional online presence that effectively showcases technical skills, projects, and experience while remaining accessible, performant, and maintainable. Many existing portfolio templates were either too generic, over-engineered with frameworks, or lacked accessibility features.
Approach & Strategy
Built a custom, lightweight portfolio from scratch using vanilla HTML, CSS, and JavaScript. Focused on clean design, smooth animations, accessibility compliance, and fast loading times. Implemented modern features like theme switching and responsive design without framework overhead.
Technical Decisions
- Vanilla JavaScript: Zero dependencies for maximum performance and control
- CSS Custom Properties: Dynamic theming without preprocessors
- GitHub Pages: Free, reliable hosting with automatic deployment
- Semantic HTML: Proper structure for accessibility and SEO
- Mobile-First Design: Responsive layouts that work on all devices
Implementation Details
The site features an animated typewriter effect in the hero section, smooth fade-in animations for content, and a comprehensive dark/light theme system with system preference detection. All interactive elements include proper ARIA labels and keyboard navigation support. The hamburger menu provides mobile-friendly navigation.
Challenges & Solutions
- Challenge: Creating smooth animations without impacting performance
- Solution: Used CSS transitions and Intersection Observer API for efficient animations
- Challenge: Implementing accessible theme switching
- Solution: Added ARIA announcements and respected system preferences
- Challenge: Managing relative paths across pages
- Solution: Consistent directory structure with proper path management
Results & Impact
- Performance: Lighthouse scores of 95+ across all categories
- Load Time: Sub-second initial page load on fast connections
- Accessibility: WCAG 2.1 AA compliant with keyboard navigation
- Maintainability: Clean codebase easy to update and extend
- Professional Impact: Enhanced online presence for networking and opportunities
Lessons Learned
- Vanilla JavaScript can be more maintainable than framework-heavy solutions
- Accessibility should be built in from the start, not added later
- Performance optimization matters - users notice fast, smooth experiences
- CSS custom properties provide powerful theming capabilities
- Good documentation helps future maintenance and collaboration