Welcome to the behind-the-scenes of san99tiago.com, my personal CV website!
I've proudly opened up the source-code, CI/CD, and infrastructure as code of my project to the world. Why? Because sharing is caring! Whether you're a seasoned developer looking for inspiration or a beginner eager to learn, this project could be helpful for you.
This is a modern, production-ready personal CV website showcasing professional experience, projects, and technical content. Built with performance, security, and scalability in mind, it demonstrates best practices in cloud-native development and DevOps.
- Responsive Design: Mobile-first approach with Chakra UI components
- Performance Optimized: Static site generation with Next.js for lightning-fast loading
- Multi-Environment: Separate DEV and PROD environments with automated deployments
- Security First: HTTPS enforcement, security headers, and AWS best practices
- Scalable Architecture: CloudFront CDN for global content delivery
- Monitoring & Observability: CloudWatch integration for performance tracking
- Load Testing: Automated performance validation with Locust
- Next.js 13: React-based framework with static site generation
- Chakra UI: Modern component library for consistent design
- Framer Motion: Smooth animations and transitions
- React Icons: Comprehensive icon library
- Amazon S3: Static website hosting with versioning and encryption
- CloudFront: Global CDN with custom domain and SSL/TLS certificates
- Route 53: DNS management for domain and subdomain routing
- AWS Certificate Manager: Automated SSL/TLS certificate provisioning and renewal
- CloudWatch: Monitoring, logging, and alerting for performance insights
- CloudFront Functions: URL rewriting for Next.js compatibility
- AWS CDK: TypeScript-based infrastructure definitions
- CloudFormation: Underlying AWS resource provisioning
- Multi-Account Strategy: Separate AWS accounts for DEV and PROD environments
- GitHub Actions: Automated CI/CD pipelines
- Checkov: Infrastructure security scanning
- Multi-Environment Deployments: Branch-based deployment strategy
- Automated Testing: Code quality checks, linting, and formatting
- Locust: Load testing framework for performance validation
- ESLint: JavaScript/TypeScript code linting
- Prettier: Code formatting and style consistency
san99tiago-cv/
βββ π .github/workflows/ # CI/CD pipeline definitions
β βββ deploy.yml # Main deployment workflow
βββ π .kiro/ # Kiro AI assistant configuration
β βββ steering/ # Project-specific AI guidance
βββ π assets/ # Documentation images and diagrams
βββ π cdk/ # AWS CDK Infrastructure as Code
β βββ bin/ # CDK application entry point
β βββ lib/ # CDK stack definitions
β β βββ cdk-stack.ts # Main infrastructure stack
β βββ package.json # CDK dependencies
β βββ cdk.json # CDK configuration
βββ π cloudfront_functions/ # CloudFront Functions
β βββ src/
β βββ url-rewrite.js # URL rewriting for Next.js compatibility
βββ π src/ # Next.js application source code
β βββ components/ # Reusable React components
β β βββ layouts/ # Page layout components
β β βββ bio.js # Biography components
β β βββ navbar.js # Navigation component
β β βββ ... # Other UI components
β βββ lib/ # Utility libraries
β β βββ theme.js # Chakra UI theme configuration
β βββ pages/ # Next.js pages and routing
β β βββ experience/ # Experience detail pages
β β βββ index.js # Homepage
β β βββ contact.js # Contact page
β β βββ ... # Other pages
β βββ public/ # Static assets
β β βββ images/ # Image assets organized by section
β β βββ pdfs/ # PDF documents (CV, etc.)
β βββ package.json # Frontend dependencies
β βββ next.config.js # Next.js configuration
βββ π tests/ # Testing suite
β βββ integration/ # Load testing with Locust
β βββ locustfile.py # Load test scenarios
β βββ requirements.txt # Python dependencies
βββ build.sh # Build script for Next.js static export
βββ deploy.sh # Deployment script for CDK
βββ README.md # Project documentation
- Node.js 20+: For running Next.js and CDK
- AWS CLI: Configured with appropriate credentials
- AWS CDK: For infrastructure deployment
- Python 3.8+: For load testing (optional)
-
Clone the repository
git clone https://github.com/san99tiago/san99tiago-cv.git cd san99tiago-cv -
Install frontend dependencies
cd src npm install -
Run development server
npm run dev
Visit
http://localhost:3000to see the application. -
Install CDK dependencies (for infrastructure work)
cd ../cdk npm install
Generate static files for deployment:
bash build.shThis creates an optimized static export in src/out/ directory.
- ESLint: JavaScript/TypeScript linting with Next.js configuration
- Prettier: Consistent code formatting across the project
- Pre-commit Checks: Automated formatting and linting validation
Frontend (src/ directory):
npm run dev # Start development server
npm run build # Build for production
npm run build-export # Build and export static files
npm run lint # Run ESLint
npm run prettier-check # Check code formatting
npm run prettier-write # Fix code formattingInfrastructure (cdk/ directory):
npm run build # Compile TypeScript
npm run watch # Watch mode for development
cdk synth # Synthesize CloudFormation templates
cdk diff # Show infrastructure changes
cdk deploy # Deploy to AWSThe CI/CD automation is built on GitHub Actions with a sophisticated multi-environment strategy:
main: Production deployments to san99tiago.comdevelop: Development deployments to dev.san99tiago.com- Feature branches: No automatic deployments (manual testing only)
The GitHub Actions workflow includes the following stages:
-
Code Quality Checks
- ESLint validation
- Prettier formatting verification
- Node.js 20 environment setup
-
Build Process
- Next.js static site generation
- Artifact creation and storage
- Build optimization and compression
-
Infrastructure Validation
- CDK synthesis and diff generation
- Checkov security scanning
- CloudFormation template validation
-
Security & Compliance
- Infrastructure security checks with Checkov
- AWS resource compliance validation
- Security headers and SSL/TLS verification
-
Deployment
- Environment-specific AWS credential configuration
- CDK deployment with approval controls
- CloudFront cache invalidation
| Script | Purpose | Usage |
|---|---|---|
build.sh |
Generate Next.js static export | bash build.sh |
deploy.sh |
Deploy CDK infrastructure | bash deploy.sh <environment> |
.github/workflows/deploy.yml |
CI/CD pipeline definition | Triggered by git push |
Production Environment:
- Domain:
san99tiago.com - AWS Account: Production account with enhanced security
- S3 Versioning: Enabled for rollback capabilities
- Monitoring: Full CloudWatch integration
Development Environment:
- Domain:
dev.san99tiago.com - AWS Account: Separate development account
- S3 Versioning: Disabled for cost optimization
- Monitoring: Basic CloudWatch integration
The DNS workflow is designed for a multi-account deployment with DEV/PROD environments:
- PROD: san99tiago.com β Always active
- DEV: dev.san99tiago.com β Active for testing/validation
- Security Isolation: Complete separation between environments
- Cost Management: Independent billing and resource tracking
- Access Control: Environment-specific IAM policies and roles
- Risk Mitigation: Production isolation from development changes
Performance validation using modern load testing:
cd tests/integration
pip install -r requirements.txt
python -m locustTest Scenarios:
- Homepage loading performance
- Experience page navigation
- PDF document downloads
- Concurrent user simulation
Metrics Tracked:
- Response times
- Throughput (requests/second)
- Error rates
- Resource utilization
- CloudFront Distribution: CDN performance and caching
- SSL/TLS Certificates: Security and encryption validation
- DNS Resolution: Multi-environment domain routing
- Static Asset Delivery: Image and document serving
- HTTPS Enforcement: All traffic redirected to HTTPS
- Security Headers: Comprehensive security header policy
- Strict Transport Security (HSTS)
- Content Security Policy (CSP)
- X-Frame-Options protection
- XSS protection headers
- SSL/TLS Certificates: Automated certificate management with AWS ACM
- S3 Security: Private buckets with CloudFront-only access
- IAM Roles: Least privilege access with environment-specific roles
- Static Site Generation: Pre-rendered pages for optimal loading
- CDN Distribution: Global content delivery via CloudFront
- Image Optimization: Next.js image optimization and compression
- Caching Strategy: Intelligent caching for static and dynamic content
- Bundle Optimization: Code splitting and tree shaking
- CloudWatch Integration: Real-time metrics and logging
- Certificate Monitoring: Automated alerts for certificate expiration
- Performance Tracking: Response times and error rate monitoring
- Cost Optimization: Resource usage and billing alerts
The infrastructure is defined using AWS CDK with TypeScript:
Core Resources:
- S3 Bucket: Static website hosting with encryption and versioning
- CloudFront Distribution: Global CDN with custom domain support
- Route 53 Records: DNS management for primary and www domains
- ACM Certificate: SSL/TLS certificate with automatic renewal
- CloudFront Functions: URL rewriting for Next.js compatibility
Security Features:
- Origin Access Identity: Secure S3 access via CloudFront only
- Response Headers Policy: Security headers enforcement
- SSL/TLS Configuration: Modern encryption standards
- Access Logging: Comprehensive request logging
Custom JavaScript function for URL rewriting:
- Handles Next.js static export routing
- Ensures proper
.htmlfile serving - Maintains clean URLs for better UX
Based on Locust load testing framework:
- Concurrent Users: Tested up to 100+ simultaneous users
- Response Times: Average < 200ms for static content
- Throughput: 1000+ requests/second capability
- Error Rate: < 0.1% under normal load conditions
- Global Edge Locations: 400+ edge locations worldwide
- Cache Hit Ratio: 95%+ for static assets
- Origin Shield: Additional caching layer for improved performance
The Route 53 Hosted Zones are pre-configured in both DEV and PROD AWS accounts, enabling automatic ACM certificate validation during CDK deployment. If hosted zones were managed in different AWS accounts, manual DNS validation would be required to verify domain ownership.
Two options for infrastructure cleanup:
- CloudFormation Console: Delete the stack directly from AWS Console
- CDK CLI: Set environment variable and destroy
export DEPLOYMENT_ENVIRONMENT=dev # or prod cd cdk cdk destroy
Note: Destruction is intentionally excluded from CI/CD pipelines to prevent accidental production outages.
- S3 Intelligent Tiering: Automatic cost optimization for storage
- CloudFront Pricing: Optimized for global distribution
- Development Environment: Reduced features for cost efficiency
- Resource Tagging: Comprehensive tagging for cost allocation
- Fork the repository and create a feature branch
- Follow code standards: ESLint and Prettier configurations
- Test your changes: Run local development server
- Update documentation: Keep README and comments current
- Submit pull request: Include detailed description of changes
- JavaScript/TypeScript: ES6+ features, modern React patterns
- Component Structure: Modular, reusable components
- Styling: Chakra UI components with consistent theming
- Accessibility: WCAG 2.1 compliance for inclusive design
This project demonstrates several advanced concepts:
- Static Site Generation: Next.js export functionality
- Infrastructure as Code: AWS CDK with TypeScript
- CI/CD Pipelines: GitHub Actions workflows
- Multi-Account AWS: Environment separation strategies
- Performance Testing: Load testing with Locust
- Security Best Practices: AWS security implementation
- DNS Management: Multi-domain routing strategies
- AWS CDK Examples: Official CDK examples
- Next.js Documentation: Next.js framework guide
- Chakra UI Components: UI component library
- AWS Well-Architected: AWS architecture best practices
- Content Management: Headless CMS integration
- Analytics: Advanced user behavior tracking
- Internationalization: Multi-language support
- Progressive Web App: PWA capabilities
- API Integration: Dynamic content features
- Advanced Monitoring: Custom CloudWatch dashboards
|
Curious DevOps Engineer passionate about advanced cloud-based solutions and deployments in AWS. I am convinced that today's greatest challenges must be solved by people that love what they do.
AWS Community Builder | AWS User Group Medellin Leader |
- π Website: san99tiago.com
- πΌ LinkedIn: san99tiago
- π GitHub: san99tiago
- πΊ YouTube: Santiago Garcia Arango Tech
- π§ Email: Available on website contact page
Copyright 2023 Santiago Garcia Arango
This project is open source and available under the Apache License 2.0.
β‘ Built with passion for cloud technologies and modern web development β‘
Sharing knowledge, one commit at a time



