<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Angular on Lonfo Blog</title><link>https://blog.lonfo.fr/categories/angular/</link><description>Recent content in Angular on Lonfo Blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Sat, 17 Jan 2026 09:42:26 +0100</lastBuildDate><atom:link href="https://blog.lonfo.fr/categories/angular/index.xml" rel="self" type="application/rss+xml"/><item><title>Angular Deployment on AWS: The Ultimate S3 + CloudFront Guide with CDK</title><link>https://blog.lonfo.fr/posts/angular-deployment-on-aws-the-ultimate-s3--cloudfront-guide-with-cdk/</link><pubDate>Sat, 17 Jan 2026 09:42:26 +0100</pubDate><guid>https://blog.lonfo.fr/posts/angular-deployment-on-aws-the-ultimate-s3--cloudfront-guide-with-cdk/</guid><description>&lt;h1 id="angular-deployment-on-aws-the-ultimate-s3--cloudfront-guide-with-cdk">Angular Deployment on AWS: The Ultimate S3 + CloudFront Guide with CDK&lt;/h1>
&lt;p>Deploying an Angular Single Page Application (SPA) on AWS doesn&amp;rsquo;t have to be complicated. Forget manual console configuration; we are going to build a Serverless infrastructure, secured by OAC and optimized by CloudFront, all without depending on Route 53.&lt;/p>
&lt;div
 class="alert alert-warning my-6 overflow-hidden rounded-lg border-l-4 transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-warning) 10%, transparent);
 border-left-color: var(--color-warning);
 --hover-bg: color-mix(in srgb, var(--color-warning) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-warning) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title">
 
 &lt;div
 class="
 cursor-pointer
 flex items-center justify-between p-4"
 
 onclick="toggleAlert('alert-0')" role="button" tabindex="0"
 aria-expanded="true" aria-controls="alert-0-content"
 onkeydown="if(event.key==='Enter'||event.key===' '){toggleAlert('alert-0');event.preventDefault();}"
 >
 &lt;div class="flex items-center gap-3">
 
 &lt;div
 class="flex-shrink-0"
 style="color: var(--color-warning);">
 
 &lt;svg class="h-5 w-5"
 fill="none"
 stroke="currentColor"
 viewBox="0 0 24 24">&lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.732-.833-2.464 0L4.34 16.5c-.77.833.192 2.5 1.732 2.5z" />
&lt;/svg>
 &lt;/div>

 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold"
 style="color: var(--color-warning);">
 Tutorial Objectives
 &lt;/h4>
 &lt;/div>

 
 
 &lt;div
 class="flex-shrink-0 transition-transform duration-200"
 style="color: var(--color-warning);"
 id="alert-0-chevron">
 
 &lt;svg class="h-4 w-4"
 fill="none"
 stroke="currentColor"
 viewBox="0 0 24 24">&lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
&lt;/svg>
 &lt;/div>
 
 &lt;/div>

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-4 pb-4">
 &lt;div class="prose prose-sm text-foreground/90 max-w-none">
 &lt;ol>
&lt;li>Organize a global project structure (Frontend + Infra).&lt;/li>
&lt;li>Create a private S3 bucket for storage.&lt;/li>
&lt;li>CConfigure CloudFront for HTTPS and Angular routing.&lt;/li>
&lt;li>Deploy everything with a single command.&lt;/li>
&lt;/ol>
 &lt;/div>
 &lt;/div>
 &lt;/div>

 &lt;script>
 function toggleAlert(alertId) {
 const content = document.getElementById(alertId + "-content");
 const chevron = document.getElementById(alertId + "-chevron");
 const header = content.previousElementSibling;

 if (content.classList.contains("hidden")) {
 content.classList.remove("hidden");
 chevron.style.transform = "rotate(180deg)";
 header.setAttribute("aria-expanded", "true");
 } else {
 content.classList.add("hidden");
 chevron.style.transform = "rotate(0deg)";
 header.setAttribute("aria-expanded", "false");
 }
 }
 &lt;/script>

&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>Before starting, you will need:&lt;/p></description></item></channel></rss>