Portfolio website

Task: Build a modern, responsive and lightweight website using minimalistic technology.

To solve this task, several key decisions were made:
  1. Pages are written in pure HTML5/CSS3 to maintain simplicity and be lightweight.
  2. Layout appearance depends on screen size to ensure proper painting on different devices.
  3. As the website provides static content only, Amazon Simple Storage Service (AWS S3) was chosen for its cost-effectiveness, high availability, and durability.
  4. For security compliance, as well as for loading improvement, CDN Cloudflare was selected as the provider of SSL certificate and caching layer as well.
  5. Git and GitHub Actions were used for version control and CI/CD.



The development process is iterative, with small changes and improvements actively tested. Each update that successfully passes local tests is pushed to the main branch, triggering GitHub Actions. GitHub Actions securely connects to the AWS infrastructure and deploys updates to S3 Bucket, so updates immediately become available to the end user. After deployment, testing continues on real devices, feedback is provided to the developer and all issues are immediately plugged into the planning process.


In the development process, I was guided by DevOps best practices:

This approach increases the speed of development and enhances product quality. Such an environment keeps doors open for experimenting, because of version control and automated integration/deployment. In case the update doesn't perform well in real tests, there is an easy way to roll back to the last stable version in just a few seconds.




Below you can see the YAML configuration for GitHub Actions and the result of the last deployment as well. Keeping security in mind, all sensitive data are hidden in GitHub Secrets. For secure access, AWS provides users with secret keys, which can be rotated on demand. Status of CI/CD pipeline




name: Pipeline to AWS S3

on: 
  push:
    branches: 
      - main

jobs:
  deploy:
    name: CI/CD pipeline
    runs-on: ubuntu-latest
    
    steps:
    - name: Git clone
      uses: actions/checkout@v1

    - name: Get AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with: 
        aws-access-key-id     : ${{ secrets.AWS_ACCESS_KEY }}
        aws-secret-access-key : ${{ secrets.AWS_SECRET_KEY }}
        aws-region            : ${{ secrets.AWS_REGION_NAME }}

    - name: Sync to AWS S3
      run: |
        aws s3 sync . s3://${{ secrets.AWS_BUCKET_NAME }} \
        --delete \
        --exclude ".git/*" \
        --exclude ".github/*"

    - name: Success log msg
      run: echo "Successfully deployed to AWS S3 Bucket"