Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
7b195d3
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
85c8f6c
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
f3709b0
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
9079caf
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
9a40f64
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
4dab8fd
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
f5f5a3b
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
3a8d1bd
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
34d199b
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
19f3f3a
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
71bc7d2
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
916ac62
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
7e4dcf5
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
1ab2290
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
e8e844e
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
17c9eb7
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
eeeddbe
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
d4079a4
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
ab10dec
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
cda2d8f
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
53ff533
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
f014d0d
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
da18c99
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
9220f48
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
5b76605
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
858041a
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
abd3553
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
51469f6
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
a9171df
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
57fedd9
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
14fda06
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
7331ee2
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
a0b1991
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
a1e01bc
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
d77d389
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
92cdd39
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
3f88380
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
6080242
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
b5991c1
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
9d07056
D-121225: Add GH workflow + update contents
harik8 Dec 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: PUBLISH

on: push

permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout

jobs:
S3_SYNC:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2

- name: AWS - Set AWS Credentials
uses: aws-actions/configure-aws-credentials@v5.1.1
with:
aws-region: ${{ vars.AWS_REGION }}
role-to-assume: ${{ secrets.AWS_IAM_GITHUB_OIDC_ROLE_ARN }}
role-session-name: gh_set_aws_credentials

- name: AWS - Assume Role
id: aws_assume_role
uses: aws-actions/configure-aws-credentials@v5.1.1
with:
aws-region: ${{ vars.AWS_REGION }}
role-to-assume: ${{ secrets.AWS_IAM_ASSUME_ROLE_ARN }}
role-session-name: gh_assume_role
role-chaining: true

- name: AWS - S3 sync
run: |
# Mask sensitive info from logs
set +e
OUTPUT=$(aws s3 sync ./src s3://${{ secrets.AWS_S3_HP_DOT_DEV_S3_BUCKET }}/static --delete 2>&1)
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "S3 upload failed"
echo "$OUTPUT" | \
sed 's/arn:aws:iam::[0-9]*:/arn:aws:iam::***:/g' | \
sed 's/arn:aws:sts::[0-9]*:/arn:aws:sts::***:/g' | \
sed 's/assumed-role\/[^/]*/assumed-role\/***\//g' | \
sed 's/arn:aws:s3:::[^"]*"/arn:aws:s3:::***"/g'
fi
exit $EXIT_CODE
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# hari.karthigasu.io
# hariprasad.dev
Binary file removed assets/img/Hari_Karthigasu.pdf
Binary file not shown.
Binary file removed assets/img/dp.png
Binary file not shown.
352 changes: 0 additions & 352 deletions index.html

This file was deleted.

Binary file added src/icons/aws.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/icons/cicd.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/icons/docker.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/icons/golang.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/icons/kubernetes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/icons/python.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/img/dp-new.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
172 changes: 172 additions & 0 deletions src/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://code.iconify.design/1/1.0.5/iconify.min.js"></script>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="Hari Karthigasu's personal portfolio website, a Cloud, DevOps, and Platform Engineer based in The Netherlands." />
<meta name="author" content="Hari Karthigasu" />
<title>Hari Prasad Karthigasu</title>
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script>
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css" />
<link href="/static/styles.css" rel="stylesheet" />
</head>
<body id="page-top">
<nav class="navbar navbar-expand-lg bg-secondary text-uppercase fixed-top" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="#page-top">ஹரி கார்த்திகேசு</a>
<button class="navbar-toggler navbar-toggler-right text-uppercase font-weight-bold bg-primary text-white rounded" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
Menu <i class="fas fa-bars"></i>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item mx-0 mx-lg-1"><a class="nav-link py-3 px-0 px-lg-3 rounded js-scroll-trigger" href="#">About</a></li>
<li class="nav-item mx-0 mx-lg-1"><a class="nav-link py-3 px-0 px-lg-3 rounded js-scroll-trigger" href="#contents">Contents</a></li>
<li class="nav-item mx-0 mx-lg-1"><a class="nav-link py-3 px-0 px-lg-3 rounded js-scroll-trigger" href="#stack">Tech</a></li>
<li class="nav-item mx-0 mx-lg-1"><a class="nav-link py-3 px-0 px-lg-3 rounded js-scroll-trigger" href="#footer">Contact</a></li>
</ul>
</div>
</div>
</nav>
<header class="masthead bg-primary text-white text-center">
<div class="container d-flex align-items-center flex-column">
<img class="masthead-avatar mb-5 rounded-circle" src="/static/img/dp-new.jpeg" alt="Hari Karthigasu's profile picture" />
<div class="divider-custom divider-light">
<div class="divider-custom-line"></div>
<div class="divider-custom-icon"><i class="fas fa-star"></i></div>
<div class="divider-custom-line"></div>
</div>
<p class="masthead-subheading font-weight-light mb-0">Hi, I'm Hari — a passionate Cloud, DevOps, and Platform Engineer based in The Netherlands. With over a decade of hands-on experience, I’ve worked on everything from traditional data centers to modern, scalable cloud.
I mainly work with AWS and follow DevOps practices, focusing on building solutions that are reliable, automated, and efficient. <br><br>
Since 2021, I’ve been part of the AWS Community Builders program, where I share what I learn through articles and videos.
I enjoy solving real-world problems and sharing the lessons I’ve learned <br><br> In my spare time, I enjoy biking, going for walks, and doing photography.
</p>
</div>
</header>

<section class="page-section bg-light" id="contents">
<div class="container">
<h2 class="page-section-heading text-center text-uppercase text-secondary mb-0">Contents</h2>
<div class="divider-custom">
<div class="divider-custom-line"></div>
<div class="divider-custom-icon"><i class="fas fa-star"></i></div>
<div class="divider-custom-line"></div>
</div>
<h4 class="text-uppercase text-left text-secondary mt-5">Popular</h4>
<div class="row justify-content-center" id="popular-posts">
<div class="col-md-6 col-lg-4 mb-5">
<div class="card h-100 shadow border-0">
<div class="card-body d-flex flex-column">
<h5 class="card-title"><u>VIDEO</u> - AWS SES Send HTML Template EMail.</h5>
<p class="card-text">AWS SES Send HTML Template EMail.</p>
<a href="https://www.youtube.com/watch?v=64Ut2HZbyWw" target="_blank" class="btn btn-primary mt-auto">View</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4 mb-5">
<div class="card h-100 shadow border-0">
<div class="card-body d-flex flex-column">
<h5 class="card-title"><u>ARTICLE</u> - When multiple identical VPC CIDRs compete for an AWS Transit Gateway!</h5>
<p class="card-text">When multiple identical VPC CIDRs compete for an AWS Transit Gateway!.</p>
<a href="https://medium.com/p/10e086eddc70" target="_blank" class="btn btn-primary mt-auto">View</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4 mb-5">
<div class="card h-100 shadow border-0">
<div class="card-body d-flex flex-column">
<h5 class="card-title"><u>ARTICLE</u> - Understanding self-assumption and scoped-down policy in AWS IAM</h5>
<p class="card-text">Understanding self-assumption and scoped-down policy in AWS IAM.</p>
<a href="https://dev.to/aws-builders/understanding-self-assumption-and-scoped-down-policy-in-aws-iam-2io" target="_blank" class="btn btn-primary mt-auto">View</a>
</div>
</div>
</div>
</div>
<h4 class="text-uppercase text-left text-secondary mt-5">Recent</h4>
<div class="row justify-content-center" id="devto-posts">
</div>
</div>
</section>

<section class="page-section" id="stack">
<div class="container text-center">
<h2 class="page-section-heading text-center text-uppercase text-secondary mb-4">Tech</h2>
<div class="divider-custom mb-4">
<div class="divider-custom-line"></div>
<div class="divider-custom-icon"><i class="fas fa-star"></i></div>
<div class="divider-custom-line"></div>
</div>
<p class="lead tech-stack-line">
<img src="/static/icons/aws.png" alt="AWS" title="AWS" width="50" height="50" style="margin: 0 25px;" />
<img src="/static/icons/kubernetes.png" alt="Kubernetes" title="Kubernetes" width="50" height="50" style="margin: 0 25px;" />
<img src="/static/icons/cicd.png" alt="Jenkins" title="Jenkins" width="50" height="50" style="margin: 0 25px;" />
<img src="/static/icons/python.png" alt="Python" title="Python" width="50" height="50" style="margin: 0 25px;" />
<img src="/static/icons/golang.png" alt="Golang" title="Golang" width="50" height="50" style="margin: 0 25px;" />
</p>
</div>
</section>

<footer class="footer text-center">
<div class="container" id="footer">
<div class="row">
<div class="col-lg-4 mb-5 mb-lg-0">
<h4 class="text-uppercase mb-4"></h4>
<p class="lead mb-0"><br /></p>
</div>
<div class="col-lg-5 mb-5 mb-lg-0">
<h4 class="text-uppercase mb-4">Find Me</h4>
<a class="btn btn-outline-light btn-social mx-1" href="https://github.com/harik8/" aria-label="GitHub"><i class="fab fa-fw fa-github"></i></a>
<a class="btn btn-outline-light btn-social mx-1" href="https://www.linkedin.com/in/hari-karthigasu/" aria-label="LinkedIn"><i class="fab fa-fw fa-linkedin-in"></i></a>
<a class="btn btn-outline-light btn-social mx-1" href="https://www.youtube.com/@harikarthigasu" aria-label="YouTube"><i class="fab fa-fw fa-youtube"></i></a>
<a class="btn btn-outline-light btn-social mx-1" href="https://medium.com/@harik8" aria-label="Medium"><i class="fab fa-fw fa-medium"></i></a>
<a class="btn btn-outline-light btn-social mx-1" href="https://www.dev.to/harik8" aria-label="Dev.to"><i class="fab fa-fw fa-dev"></i></a>
<a class="btn btn-outline-light btn-social mx-1" href="https://www.instagram.com/hari.praxad/" aria-label="Instagram"><i class="fab fa-fw fa-instagram"></i></a>
</div>
</div>
</div>
</footer>
<section class="copyright py-4 text-center text-white">
<div class="container"><small>Copyright © hariprasad.dev 2025</small></div>
</section>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"></script>
<script src="assets/mail/jqBootstrapValidation.js"></script>
<script src="assets/mail/contact_me.js"></script>
<script src="js/scripts.js"></script>
<script>
fetch("https://dev.to/api/articles?username=harik8&per_page=6")
.then(response => response.json())
.then(data => {
const postsContainer = document.getElementById("devto-posts");
if (data.length > 0) {
data.forEach(post => {
const postHTML = `
<div class="col-md-6 col-lg-4 mb-5">
<div class="card h-100 shadow border-0">
<div class="card-body d-flex flex-column">
<h5 class="card-title">${post.title}</h5>
<p class="card-text">${post.description}</p>
<a href="${post.url}" target="_blank" class="btn btn-primary mt-auto">View</a>
</div>
</div>
</div>`;
postsContainer.innerHTML += postHTML;
});
} else {
postsContainer.innerHTML = '<div class="col-12"><p class="text-center">No recent posts found.</p></div>';
}
})
.catch(error => {
console.error("Error fetching blog posts:", error);
const postsContainer = document.getElementById("devto-posts");
postsContainer.innerHTML = '<div class="col-12"><p class="text-center text-danger">Failed to load recent posts. Please try again later.</p></div>';
});
</script>
</body>
</html>
File renamed without changes.
Loading