1<!doctype html> 2<html lang="en" dir="ltr" class="blog-wrapper blog-list-page plugin-blog plugin-id-default" data-has-hydrated="false"> 3<head> 4<meta charset="UTF-8"> 5<meta name="generator" content="Docusaurus v3.7.0"> 6<title data-rh="true">Day 8: Test Your Network (Prove It Works) | AI Advent Calendar - Let Your AI Agent Make Real Phone Calls</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://norahsakal.com/img/social_media_card.png"><meta data-rh="true" name="twitter:image" content="https://norahsakal.com/img/social_media_card.png"><meta data-rh="true" property="og:url" content="https://norahsakal.com/blog/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="description" content="Blog"><meta data-rh="true" property="og:description" content="Blog"><meta data-rh="true" name="docusaurus_tag" content="blog_posts_list"><meta data-rh="true" name="docsearch:docusaurus_tag" content="blog_posts_list"><meta data-rh="true" property="og:title" content="Day 10: Get Your Custom Domain (Real URLs) | AI Advent Calendar - Let Your AI Agent Make Real Phone Calls"><link data-rh="true" rel="icon" href="/img/icon.jpg"><link data-rh="true" rel="canonical" href="https://norahsakal.com/blog/"><link data-rh="true" rel="alternate" href="https://norahsakal.com/blog/" hreflang="en"><link data-rh="true" rel="alternate" href="https://norahsakal.com/blog/" hreflang="x-default">
6<script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","@id":"https://norahsakal.com/blog","mainEntityOfPage":"https://norahsakal.com/blog","headline":"Blog","description":"Blog","blogPost":[{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/2026-05-29-same-prompt-different-teammate","mainEntityOfPage":"https://norahsakal.com/blog/2026-05-29-same-prompt-different-teammate","url":"https://norahsakal.com/blog/2026-05-29-same-prompt-different-teammate","headline":"Same prompt. Different teammate.","name":"Same prompt. Different teammate.","description":"A quick field note on Opus 4.8, Claude Code and what changed when it started connecting project context I did not spell out.","datePublished":"2026-05-29T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/same-prompt-different-teammate/linkedin_card.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/same-prompt-different-teammate/linkedin_card.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/same-prompt-different-teammate/linkedin_card.png","caption":"title image for the blog post: Same prompt. Different teammate."},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/stop-overbuilding-your-ai-backend","mainEntityOfPage":"https://norahsakal.com/blog/stop-overbuilding-your-ai-backend","url":"https://norahsakal.com/blog/stop-overbuilding-your-ai-backend","headline":"Stop overbuilding your AI backend","name":"Stop overbuilding your AI backend","description":"The smallest backend your AI app actually needs. A five-step backend loop for getting your AI app into production without overbuilding it.","datePublished":"2026-05-28T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/stop-overbuilding-your-ai-backend/linkedin_card.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/stop-overbuilding-your-ai-backend/linkedin_card.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/stop-overbuilding-your-ai-backend/linkedin_card.png","caption":"title image for the blog post: Stop overbuilding your AI backend"},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/vibe-coded-app-now-what","mainEntityOfPage":"https://norahsakal.com/blog/vibe-coded-app-now-what","url":"https://norahsakal.com/blog/vibe-coded-app-now-what","headline":"Your vibe-coded app is live. Now what?","name":"Your vibe-coded app is live. Now what?","description":"The 7 AWS resources you need to go from a working prototype to a deployment you actually own.","datePublished":"2026-05-27T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/vibe-coded-app-now-what/linkedin_card.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/vibe-coded-app-now-what/linkedin_card.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/vibe-coded-app-now-what/linkedin_card.png","caption":"title image for the blog post: Your vibe-coded app is live. Now what?"},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/day-14-deploy-ai-containers-fargate","mainEntityOfPage":"https://norahsakal.com/blog/day-14-deploy-ai-containers-fargate","url":"https://norahsakal.com/blog/day-14-deploy-ai-containers-fargate","headline":"Day 14: Deploy AI Containers to Fargate","name":"Day 14: Deploy AI Containers to Fargate","description":"Today
6we deploy your AI calling agent to AWS Fargate. Build a Docker image, push to ECR, create an ECS cluster and make your first REAL AI phone call. This is where 14 days of infrastructure comes together.","datePublished":"2026-01-22T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_14_linkedin_card.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_14_linkedin_card.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_14_linkedin_card.png","caption":"title image for the blog post: Day 14: Deploy AI Containers to Fargate"},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/day-13-build-secure-backend-trigger","mainEntityOfPage":"https://norahsakal.com/blog/day-13-build-secure-backend-trigger","url":"https://norahsakal.com/blog/day-13-build-secure-backend-trigger","headline":"Day 13: Build your secure backend trigger","name":"Day 13: Build your secure backend trigger","description":"Today we build the secure backend that triggers AI calls. Create a Lambda function, add API Gateway with Cognito authorization and connect your frontend to a protected endpoint. Only authenticated users can trigger calls - no public exposure.","datePublished":"2026-01-17T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_13_linkedin_card.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_13_linkedin_card.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_13_linkedin_card.png","caption":"title image for the blog post: Day 13: Build your secure backend trigger"},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/day-12-deploy-frontend-with-auth","mainEntityOfPage":"https://norahsakal.com/blog/day-12-deploy-frontend-with-auth","url":"https://norahsakal.com/blog/day-12-deploy-frontend-with-auth","headline":"Day 12: Deploy your frontend (with authentication)","name":"Day 12: Deploy your frontend (with authentication)","description":"Today we build and deploy a simple frontend for your AI calling agent. Use Vite + React, add authentication with AWS Cognito and Amplify UI, protect your app from unauthorized access, and deploy to S3 + CloudFront. Give users a secure interface to interact with your AI.","datePublished":"2026-01-14T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_12_linkedin_card.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_12_linkedin_card.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_12_linkedin_card.png","caption":"title image for the blog post: Day 12: Deploy your frontend (with authentication)"},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/day-11-add-https-ssl-certificate","mainEntityOfPage":"https://norahsakal.com/blog/day-11-add-https-ssl-certificate","url":"https://norahsakal.com/blog/day-11-add-https-ssl-certificate","headline":"Day 11: Add HTTPS (SSL certificate)","name":"Day 11: Add HTTPS (SSL certificate)","description":"Today we add HTTPS to your application using AWS Certificate Manager. Request a free SSL certificate, validate domain ownership, attach it to your ALB, and configure HTTPS listener. Make your app production-ready with that green padlock.","datePublished":"2026-01-02T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_11_linkedin_card_v2.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_11_linkedin_card_v2.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_11_linkedin_card_v2.png","caption":"title image for the blog post: Day 11: Add HTTPS (SSL certificate)"},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/day-10-get-custom-domain-route53","mainEntityOfPage":"https://norahsakal.com/blog/day-10-get-custom-domain-route53","url":"https://norahsakal.com/blog/day-10-get-custom-domain-route53","headline":"Day 10: Get your custom domain (real URLs)","name":"Day 10: Get your custom domain (real URLs)","de
6scription":"Today we set up a custom domain using Route 53. Replace your ALB's long AWS URL with something clean like ai-caller.yourdomain.com. Learn DNS basics, create a hosted zone, and point your domain to your load balancer.","datePublished":"2025-12-30T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_10_linkedin_card_v2.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_10_linkedin_card_v2.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_10_linkedin_card_v2.png","caption":"title image for the blog post: Day 10: Get your custom domain (real URLs)"},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/day-9-create-application-load-balancer-front-door","mainEntityOfPage":"https://norahsakal.com/blog/day-9-create-application-load-balancer-front-door","url":"https://norahsakal.com/blog/day-9-create-application-load-balancer-front-door","headline":"Day 9: Create your Application Load Balancer (the front door)","name":"Day 9: Create your Application Load Balancer (the front door)","description":"Today we create an Application Load Balancer: the front door to your AI calling system. It accepts HTTP/HTTPS traffic from the internet, routes it to your Fargate containers in private subnets and provides a stable endpoint for your users.","datePublished":"2025-12-28T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_9_linkedin_card.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_9_linkedin_card.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_9_linkedin_card.png","caption":"title image for the blog post: Day 9: Create your Application Load Balancer (the front door)"},"keywords":[]},{"@type":"BlogPosting","@id":"https://norahsakal.com/blog/day-8-test-your-network-prove-it-works","mainEntityOfPage":"https://norahsakal.com/blog/day-8-test-your-network-prove-it-works","url":"https://norahsakal.com/blog/day-8-test-your-network-prove-it-works","headline":"Day 8: Test your network (prove it works)","name":"Day 8: Test your network (prove it works)","description":"Today we test everything we've built. Launch a test EC2 instance, verify internet connectivity through NAT Gateway, check routing, and confirm your network is production-ready. This is your proof of concept before deploying AI containers.","datePublished":"2025-12-19T00:00:00.000Z","author":{"@type":"Person","name":"Norah Klintberg Sakal","description":"AI Consultant & Developer","url":"https://github.com/norahsakal","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"},"image":{"@type":"ImageObject","@id":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png","url":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png","contentUrl":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png","caption":"title image for the blog post: Day 8: Test your network (prove it works)"},"keywords":[]}]}</script>
6<link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="AI Agents That Work RSS Feed"> 7<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="AI Agents That Work Atom Feed"> 8 9<link rel="preconnect" href="https://www.google-analytics.com"> 10<link rel="preconnect" href="https://www.googletagmanager.com">
vendor: 64 bytes, lines 10-11
10 11<script async src="https://www.googletagmanager.com/gtag/js?id=
11G-FVH6BMHHJ3
vendor: 12 bytes, line 11
11"></script>
12<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-FVH6BMHHJ3",{})</script>
12<link rel="stylesheet" href="/assets/css/styles.710bc056.css">
13<script src="/assets/js/runtime~main.7ff17366.js" defer="defer"></script>
vendor: 1 bytes, line 13
13
14<script src="/assets/js/main.2e1735d4.js" defer="defer"></script>
14 15</head> 16<body class="navigation-with-keyboard">
17<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(n,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script>
17<div id="__docusaurus"><link rel="preload" as="image" href="/img/icon.png"><link rel="preload" as="image" href="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="announcementBar_mb4j" style="background-color:#2e8555;color:#ffffff" role="banner"><div class="content_knG7 announcementBarContent_xLdY">Learn how to build AI Agents â <strong><a href="https://norahsakal.gumroad.com/l/mini-course-1" target="_blank">Free Mini-Course ð</a></strong></div></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/icon.png" alt="Norah Sakal Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/icon.png" alt="Norah Sakal Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Norah Sakal</b></a><a class="navbar__item navbar__link" href="/tutorials/intro/">Tutorials</a><a class="navbar__item navbar__link" href="/courses/">Courses</a><a class="navbar__item navbar__link navbar__link--new small" href="/mini-courses/">Mini-courses</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog/">Blog</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/consulting/">Consulting services</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite" aria-pressed="false"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><div role="group"><h3 class="yearGroupHeading_rMGB">2026</h3><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/2026-05-29-same-prompt-different-teammate/">Same prompt. Different teammate.</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/stop-overbuilding-your-ai-backend/">Stop overbuilding your AI backend</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/vibe-coded-app-now-what/">Your vibe-coded app is live. Now what?</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/day-14-deploy-ai-containers-fargate/">Day 14: Deploy AI Containers to Fargate</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/day-13-build-secure-backend-trigger/">Day 13: Build your secure backend trigger</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/day-12-deploy-frontend-with-auth/">Day 12: Deploy your frontend (with authentication)</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/day-11-add-https-ssl-certificate/">Day 11: Add HTTPS (SSL certificate)</a></li></ul></div></nav></aside><main class="col col--7"><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/2026-05-29-same-prompt-different-teammate/">Same prompt. Different teammate.</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-05-29T00:00:00.000Z">May 29, 2026</time> · <!-- -->4 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#
17000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03
17-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"><p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/same-prompt-different-teammate/linkedin_card.png" alt="Same prompt. Different teammate. My 5 cents on Opus 4.8" title="Same prompt. Different teammate. My 5 cents on Opus 4.8" class="img_ev3q"></p> 18<h2 class="anchor anchorWithStickyNavbar_LWe7" id="same-prompt-different-teammate-my-5-cents-on-opus-48">Same prompt. Different teammate. My 5 cents on Opus 4.8<a href="#same-prompt-different-teammate-my-5-cents-on-opus-48" class="hash-link" aria-label="Direct link to Same prompt. Different teammate. My 5 cents on Opus 4.8" title="Direct link to Same prompt. Different teammate. My 5 cents on Opus 4.8">â</a></h2> 19<p>I'm using Claude Code while creating my <strong>"How to deploy an AI agent"</strong> course.</p> 20<p>Don't get me started. I know it's very meta to use AI while building a course about deploying AI apps, but here we are.</p> 21<p>And after switching to Opus 4.8 today, I noticed a small thing that felt different.</p> 22<p>Not <strong>"the model solved world peace"</strong> different.</p> 23<p>More like <strong>"Did it just understand what I'm actually working on? ð§"</strong></p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Building, deploying, and optimizing AI applications. Covers model training, API integrations, infrastru
23cture design, and best practices for scalable AI development." class="tag_zVej tagRegular_sFm0" href="/blog/tags/ai-development/">AI Development</a></li><li class="tag_QGVx"><a title="Using Claude Code as an AI-assisted development tool. Covers prompting workflows, code generation, debugging, refactoring, project navigation, and the practical limits of using AI agents inside real software projects." class="tag_zVej tagRegular_sFm0" href="/blog/tags/claude-code/">Claude Code</a></li><li class="tag_QGVx"><a title="Building software with AI-assisted coding tools and natural-language prompts. Covers turning generated prototypes into maintainable applications, understanding the code AI creates, fixing gaps, and moving vibe-coded apps toward real deployment." class="tag_zVej tagRegular_sFm0" href="/blog/tags/vibe-coding/">Vibe Coding</a></li><li class="tag_QGVx"><a title="Moving applications from local development to real production environments. Covers build steps, hosting, infrastructure, environment configuration, security, monitoring, and the practical work required to make software accessible, reliable, and owned." class="tag_zVej tagRegular_sFm0" href="/blog/tags/deployment/">Deployment</a></li><li class="tag_QGVx"><a title="Short, timely observations from building in public. Covers small lessons, rough ideas, unexpected findings, workflow notes, and useful things noticed while developing projects, courses, and production systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/field-notes/">Field Notes</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Same prompt. Different teammate." href="/blog/2026-05-29-same-prompt-different-teammate/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/stop-overbuilding-your-ai-backend/">Stop overbuilding your AI backend</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-05-28T00:00:00.000Z">May 28, 2026</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903
231 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"><p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/stop-overbuilding-your-ai-backend/linkedin_card.png" alt="The smallest backend your AI app actually needs" title="The smallest backend your AI app actually needs" class="img_ev3q"></p> 24<p>My #1 rule:</p> 25<blockquote> 26<p>Deploy the boring loop first. Add intelligence later.</p> 27</blockquote> 28<p>Because if the simple loop doesn't work in production, the fancy version won't save you.</p> 29<p>Your vibe-coded AI app does not need a complicated backend on day one.</p> 30<p>ð ââï¸ No RAG<br> 31<!-- -->ð ââï¸ No tools<br> 32<!-- -->ð ââï¸ No streaming<br> 33<!-- -->ð ââï¸ No multi-agent orchestration</p> 34<p>It needs one boring backend loop:</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a title="Building applications without managing servers. Covers event-driven architectures, managed compute, scaling models, cost considerations, and serverless patterns for production systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/serverless/">Serverless</a></li><li class="tag_QGVx"><a title="Running backend logic without managing servers. Covers Lambda functions, event triggers, execution models, permissions, and using Lambda to power APIs and background tasks." class="tag_zVej tagRegular_sFm0" href="/blog/tags/lambda/">AWS Lambda</a></li><li class="tag_QGVx"><a title="Designing scalable AI systems, including AI model infrastru
34cture, cloud deployments, microservices, and efficient model-serving architectures. Covers AI orchestration frameworks and best practices for integrating AI into production environments." class="tag_zVej tagRegular_sFm0" href="/blog/tags/ai-architecture/">AI Architecture</a></li><li class="tag_QGVx"><a title="Moving applications from local development to real production environments. Covers build steps, hosting, infrastructure, environment configuration, security, monitoring, and the practical work required to make software accessible, reliable, and owned." class="tag_zVej tagRegular_sFm0" href="/blog/tags/deployment/">Deployment</a></li><li class="tag_QGVx"><a title="Building software with AI-assisted coding tools and natural-language prompts. Covers turning generated prototypes into maintainable applications, understanding the code AI creates, fixing gaps, and moving vibe-coded apps toward real deployment." class="tag_zVej tagRegular_sFm0" href="/blog/tags/vibe-coding/">Vibe Coding</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Stop overbuilding your AI backend" href="/blog/stop-overbuilding-your-ai-backend/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/vibe-coded-app-now-what/">Your vibe-coded app is live. Now what?</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-05-27T00:00:00.000Z">May 27, 2026</time> · <!-- -->5 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.
34182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"><p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/may/vibe-coded-app-now-what/linkedin_card.png" alt="The 7 AWS resources you need to go from a working prototype to a deployment you actually own." title="The 7 AWS resources you need to go from a working prototype to a deployment you actually own." class="img_ev3q"></p> 35<p>Getting to a live URL is the easy part now.</p> 36<p>The harder question is whether you actually own what you built.</p> 37<p>Can you move it?<br> 38<!-- -->Can you debug it?<br> 39<!-- -->Can you explain the stack to a client?<br> 40<!-- -->Can you protect your API keys?</p> 41<p>If the answer is <strong>"No ðââï¸"</strong> or <strong>"I'm not sure ð¥¹"</strong> â your AI app is still a hosted prototype.</p> 42<p>Here are the <strong>7 things</strong> you need to deploy your vibe-coded app and own the whole stack on AWS:</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a title="Building applications without managing servers. Covers event-driven architectures, managed compute, scaling models, cost considerations, and serverless patterns for production systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/serverless/">Serverless</a></li><li class="tag_QGVx"><a title="Moving applications from local development to real production environments. Covers build steps, hosting, infrastructure, environment configuration, security, monitoring, and the practical work required to make software accessible, reliable, and owned." class="tag_zVej tagRegular_sFm0" href="/blog/tags/deployment/">Deployment</a></li><li class="tag_QGVx"><a title="Building software with AI-assisted coding tools and natural-language prompts. Covers turning generated prototypes into maintainable applications, understanding the code AI creates, fixing gaps, and moving vibe-coded apps toward real deployment." class="tag_zVej tagRegular_sFm0" href="/blog/tags/vibe-coding/">Vibe Coding</a></li><li class="tag_QGVx"><a title="Running backend logic without managing servers. Covers Lambda functions, event triggers, execution models, permissions, and using Lambda to power APIs and background tasks." class="tag_zVej tagRegular_sFm0" href="/blog/tags/lambda/">AWS Lambda</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Your vibe-coded app is live. Now what?" href="/blog/vibe-coded-app-now-what/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/day-14-deploy-ai-containers-fargate/">Day 14: Deploy AI Containers to Fargate</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-01-22T00:00:00.000Z">January 22, 2026</time> · <!-- -->76 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#
42000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03
42-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"> 43<!-- --> 44<!-- --> 45<!-- --> 46<p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_14_linkedin_card.png" alt="Deploy AI Containers to Fargate" title="Deploy AI Containers to Fargate" class="img_ev3q"></p> 47<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info nkx-learn"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 50 50"><path d="M6 4v4H2v35h1c12.613 0 21.508 3.875 21.594 3.914l.406.18.406-.18C25.492 46.875 34.386 43 47 43h1V8h-4V4h-1c-9.84 0-17.36 3.621-18 3.938C24.36 7.62 16.84 4 7 4Zm2 2.09c8.246.234 14.652 2.957 16 3.566v30.848c-2.129-.918-8.113-3.203-16-3.414Zm34 0v31c-7.887.21-13.871 2.496-16 3.414V9.656c1.348-.61 7.754-3.332 16-3.566"></path></svg></span>What you'll learn</div><div class="admonitionContent_BuS1"><p>How to containerize your AI calling agent, push to ECR, deploy to Fargate, store secrets securely with Paramater Store and make your first REAL AI phone call</p></div></div> 48<h2 class="anchor anchorWithStickyNavbar_LWe7" id="this-is-the-day">This is THE day<a href="#this-is-the-day" class="hash-link" aria-label="Direct link to This is THE day" title="Direct link to This is THE day">â</a></h2> 49<p>Day 13: You build a secure backend trigger (mock response)</p> 50<p><strong>Today:</strong> We deploy the <strong>actual AI containers</strong> and make <strong>real phone calls</strong>.</p> 51<p>Remember yesterday's response?</p> 52<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#d6deeb"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"> </span><span class="token property" style="color:rgb(128, 203, 196)">"message"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Call trigger received! (Mock response - Fargate connection coming Day 14)"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N">
52<path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> 53<p><strong>Today, your phone will actually ring</strong> ðð¤</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a title="Running containers without managing servers. Covers task definitions, networking, scaling behavior, IAM roles, and deploying containerized workloads securely in private subnets." class="tag_zVej tagRegular_sFm0" href="/blog/tags/fargate/">AWS Fargate</a></li><li class="tag_QGVx"><a title="Orchestrating containers using Amazon Elastic Container Service. Covers clusters, services, task definitions, scheduling, networking modes, and running production workloads with Fargate or EC2." class="tag_zVej tagRegular_sFm0" href="/blog/tags/ecs/">Amazon ECS</a></li><li class="tag_QGVx"><a title="Storing and managing Docker images using Amazon Elastic Container Registry. Covers repositories, image tagging, lifecycle policies, security scanning, and integrating container images with ECS and CI/CD workflows." class="tag_zVej tagRegular_sFm0" href="/blog/tags/ecr/">Amazon ECR</a></li><li class="tag_QGVx"><a title="Packaging applications into portable containers. Covers Dockerfiles, image builds, local development, environment configuration, and preparing workloads for cloud deployment." class="tag_zVej tagRegular_sFm0" href="/blog/tags/docker/">Docker</a></li><li class="tag_QGVx"><a title="Running applications in isolated, portable environments. Covers container fundamentals, networking, resource isolation, and patterns for deploying containerized services in production." class="tag_zVej tagRegular_sFm0" href="/blog/tags/containers/">Containers</a></li><li class="tag_QGVx"><a title="Exploring OpenAI's ecosystem, including GPT models, DALL·E, Whisper, and Codex. Covers API integration, fine-tuning, embedding generation, and real-world applications of AI in chatbots, search, and automation." class="tag_zVej tagRegular_sFm0" href="/blog/tags/openai/">OpenAI</a></li><li class="tag_QGVx"><a title="Building programmable communication flows with Twilio: Voice, WebSockets, Studio, and custom call logic. Covers telephony automation, AI-powered voice interactions, and production call routing." class="tag_zVej tagRegular_sFm0" href="/blog/tags/twilio/">Twilio</a></li><li class="tag_QGVx"><a title="Daily build-and-ship sequences focused on rapid learning. Covers structured 24-day technical arcs, progressive complexity, and hands-on deployments shipped in small, atomic wins." class="tag_zVej tagRegular_sFm0" href="/blog/tags/advent-calendar/">Advent Calendar</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Day 14: Deploy AI Containers to Fargate" href="/blog/day-14-deploy-ai-containers-fargate/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/day-13-build-secure-backend-trigger/">Day 13: Build your secure backend trigger</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-01-17T00:00:00.000Z">January 17, 2026</time> · <!-- -->38 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#
53000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03
53-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"> 54<!-- --> 55<!-- --> 56<!-- --> 57<p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_13_linkedin_card.png" alt="Build your secure backend trigger" title="Build your secure backend trigger" class="img_ev3q"></p> 58<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info nkx-learn"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 50 50"><path d="M6 4v4H2v35h1c12.613 0 21.508 3.875 21.594 3.914l.406.18.406-.18C25.492 46.875 34.386 43 47 43h1V8h-4V4h-1c-9.84 0-17.36 3.621-18 3.938C24.36 7.62 16.84 4 7 4Zm2 2.09c8.246.234 14.652 2.957 16 3.566v30.848c-2.129-.918-8.113-3.203-16-3.414Zm34 0v31c-7.887.21-13.871 2.496-16 3.414V9.656c1.348-.61 7.754-3.332 16-3.566"></path></svg></span>What you'll learn</div><div class="admonitionContent_BuS1"><p>How to build a secure Lambda backend with API Gateway and Cognito authorization to trigger AI calls</p></div></div> 59<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-you-need-a-secure-trigger">Why you need a secure trigger<a href="#why-you-need-a-secure-trigger" class="hash-link" aria-label="Direct link to Why you need a secure trigger" title="Direct link to Why you need a secure trigger">â</a></h2> 60<p>Day 12: You build a protected frontend</p> 61<p><strong>Today:</strong> We build the <strong>secure backend</strong> that triggers calls</p> 62<p><strong>Here's the critical security issue:</strong></p> 63<p>Remember your ALB endpoint we built on <a href="/blog/day-9-create-application-load-balancer-front-door/" target="_blank" rel="noopener noreferrer">Day 9 â</a>?</p> 64<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#d6deeb"><span class="token plain">https://ai-caller.yourdomain.com</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N">
64<path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> 65<p><strong>If we add a <code>/make-call</code> endpoint directly to Fargate:</strong></p> 66<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#d6deeb"><span class="token plain">POST https://ai-caller.yourdomain.com/make-call</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">â Publicly accessible</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">â Anyone can trigger calls</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">â Could rack up *huge* OpenAI/Twilio bills</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">â Even with frontend auth, the endpoint is exposed</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> 67<p>This is <strong>not</strong> acceptable.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a title="Running backend logic without managing servers. Covers Lambda functions, event triggers, execution models, permissions, and using Lambda to power APIs and background tasks." class="tag_zVej tagRegular_sFm0" href="/blog/tags/lambda/">AWS Lambda</a></li><li class="tag_QGVx"><a title="Exposing backend services as HTTP APIs. Covers REST vs HTTP APIs, routing requests to Lambda, authentication and authorization, request validation, and securing public endpoints." class="tag_zVej tagRegular_sFm0" href="/blog/tags/api-gateway/">API Gateway</a></li><li class="tag_QGVx"><a title="Managing authentication and authorization with AWS Cognito. Covers user pools, identity pools, guest access, token flows, and securing access to APIs and cloud resources." class="tag_zVej tagRegular_sFm0" href="/blog/tags/cognito/">Cognito</a></li><li class="tag_QGVx"><a title="Defining and deploying serverless applications with Infrastructure as Code. Covers SAM templates, local development, Lambda + API Gateway wiring, and repeatable production deployments." class="tag_zVej tagRegular_sFm0" href="/blog/tags/sam/">AWS SAM</a></li><li class="tag_QGVx"><a title="Building applications without managing servers. Covers event-driven architectures, managed compute, scaling models, cost considerations, and serverless patterns for production systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/serverless/">Serverless</a></li><li class="tag_QGVx"><a title="Designing secure cloud environments for AI workloads. Covers network isolation, least-privilege access, private vs public subnets, secure outbound patterns (NAT), and defense-in-depth for production AI agents." class="tag_zVej tagRegular_sFm0" href="/blog/tags/security/">Security</a></li><li class="tag_QGVx"><a title="Daily build-and-ship sequences focused on rapid learning. Covers structured 24-day technical arcs, progressive complexity, and hands-on deployments shipped in small, atomic wins." class="tag_zVej tagRegular_sFm0" href="/blog/tags/advent-calendar/">Advent Calendar</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Day 13: Build your secure backend trigger" href="/blog/day-13-build-secure-backend-trigger/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/day-12-deploy-frontend-with-auth/">Day 12: Deploy your frontend (with authentication)</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-01-14T00:00:00.000Z">January 14, 2026</time> · <!-- -->50 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#
67000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03
67-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"> 68<!-- --> 69<!-- --> 70<!-- --> 71<p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_12_linkedin_card.png" alt="Deploy your frontend (with authentication)" title="Deploy your frontend (with authentication)" class="img_ev3q"></p> 72<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info nkx-learn"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 50 50"><path d="M6 4v4H2v35h1c12.613 0 21.508 3.875 21.594 3.914l.406.18.406-.18C25.492 46.875 34.386 43 47 43h1V8h-4V4h-1c-9.84 0-17.36 3.621-18 3.938C24.36 7.62 16.84 4 7 4Zm2 2.09c8.246.234 14.652 2.957 16 3.566v30.848c-2.129-.918-8.113-3.203-16-3.414Zm34 0v31c-7.887.21-13.871 2.496-16 3.414V9.656c1.348-.61 7.754-3.332 16-3.566"></path></svg></span>What you'll learn</div><div class="admonitionContent_BuS1"><p>How to build a secure frontend with Vite, React and Cognito authentication, then deploy it to S3 + CloudFront</p></div></div> 73<h2 class="anchor anchorWithStickyNavbar_LWe7" id="protect-your-app-from-unauthorized-use">Protect your app from unauthorized use<a href="#protect-your-app-from-unauthorized-use" class="hash-link" aria-label="Direct link to Protect your app from unauthorized use" title="Direct link to Protect your app from unauthorized use">â</a></h2> 74<p>Days 9-11: You built the infrastructure</p> 75<p><strong>Today:</strong> We build the <strong>protected</strong> frontend</p> 76<p><strong>Here's the critical security issue:</strong></p> 77<p>When you deploy your AI calling agent:</p> 78<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#d6deeb"><span class="token plain">https://app.yourdomain.com</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">â Publicly accessible</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">â Anyone can use it</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">â Could rack up huge OpenAI/Twilio bills</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N">
78<path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> 79<p>This is not acceptable.</p> 80<p style="margin-bottom:5px"><strong>What you need:</strong></p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a title="Building client-side applications for production systems. Covers frontend architecture, state management, API integration, deployment considerations, and patterns for connecting UIs to cloud backends." class="tag_zVej tagRegular_sFm0" href="/blog/tags/frontend/">Frontend</a></li><li class="tag_QGVx"><a title="Building user interfaces with React. Covers component architecture, hooks, state management, and integrating React apps with APIs, authentication, and cloud infrastructure." class="tag_zVej tagRegular_sFm0" href="/blog/tags/react/">React</a></li><li class="tag_QGVx"><a title="Modern frontend tooling for fast development and builds. Covers Vite project setup, local dev workflows, optimized production builds, and deploying Vite-based apps to cloud environments." class="tag_zVej tagRegular_sFm0" href="/blog/tags/vite/">Vite</a></li><li class="tag_QGVx"><a title="Managing authentication and authorization with AWS Cognito. Covers user pools, identity pools, guest access, token flows, and securing access to APIs and cloud resources." class="tag_zVej tagRegular_sFm0" href="/blog/tags/cognito/">Cognito</a></li><li class="tag_QGVx"><a title="Using AWS Amplify to connect frontends to cloud backends. Covers auth integration, API calls, environment configuration, and simplifying frontend access to AWS services." class="tag_zVej tagRegular_sFm0" href="/blog/tags/amplify/">Amplify</a></li><li class="tag_QGVx"><a title="Handling user identity and access in applications. Covers login flows, token-based auth, session management, guest access, and best practices for securing frontend and API interactions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/authentication/">Authentication</a></li><li class="tag_QGVx"><a title="Storing and serving static assets and application data in AWS. Covers buckets, permissions, static site hosting, asset storage, and integrating S3 with frontend and backend workflows." class="tag_zVej tagRegular_sFm0" href="/blog/tags/s-3/">Amazon S3</a></li><li class="tag_QGVx"><a title="Delivering content globally using AWS CloudFront. Covers CDN fundamentals, caching behavior, SSL integration, origin configuration, and serving frontend apps with low latency." class="tag_zVej tagRegular_sFm0" href="/blog/tags/cloudfront/">CloudFront</a></li><li class="tag_QGVx"><a title="Daily build-and-ship sequences focused on rapid learning. Covers structured 24-day technical arcs, progressive complexity, and hands-on deployments shipped in small, atomic wins." class="tag_zVej tagRegular_sFm0" href="/blog/tags/advent-calendar/">Advent Calendar</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Day 12: Deploy your frontend (with authentication)" href="/blog/day-12-deploy-frontend-with-auth/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/day-11-add-https-ssl-certificate/">Day 11: Add HTTPS (SSL certificate)</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-01-02T00:00:00.000Z">January 2, 2026</time> · <!-- -->24 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#
80000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03
80-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"> 81<!-- --> 82<!-- --> 83<!-- --> 84<p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_11_linkedin_card_v2.png" alt="Add HTTPS (SSL Certificate)" title="Add HTTPS (SSL Certificate)" class="img_ev3q"></p> 85<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info nkx-learn"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 50 50"><path d="M6 4v4H2v35h1c12.613 0 21.508 3.875 21.594 3.914l.406.18.406-.18C25.492 46.875 34.386 43 47 43h1V8h-4V4h-1c-9.84 0-17.36 3.621-18 3.938C24.36 7.62 16.84 4 7 4Zm2 2.09c8.246.234 14.652 2.957 16 3.566v30.848c-2.129-.918-8.113-3.203-16-3.414Zm34 0v31c-7.887.21-13.871 2.496-16 3.414V9.656c1.348-.61 7.754-3.332 16-3.566"></path></svg></span>What you'll learn</div><div class="admonitionContent_BuS1"><p>How to request a free SSL certificate from AWS and enable HTTPS on your Application Load Balancer</p></div></div> 86<h2 class="anchor anchorWithStickyNavbar_LWe7" id="make-it-secure">Make it secure<a href="#make-it-secure" class="hash-link" aria-label="Direct link to Make it secure" title="Direct link to Make it secure">â</a></h2> 87<p>Day 10: You got a custom domain</p> 88<p><strong>Today:</strong> We make it secure with HTTPS</p> 89<p><strong>Here's the situation:</strong></p> 90<p>Your app is accessible at:</p> 91<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#d6deeb"><span class="token plain">http://ai-caller.yourdomain.com</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS">
91<path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> 92<p><strong>Browser says:</strong> â ï¸ "Not secure":</p> 93<p><img decoding="async" loading="lazy" alt="Browser says: &#39;Not secure&#39;" src="/assets/images/31-not-secure-33079a3ab7de3d37de3692ba1580c2ed.png" title="Browser says: &#39;Not secure&#39;" width="1920" height="1080" class="img_ev3q"></p> 94<div style="text-align:center;margin-top:-20px"><p><strong>Browser says:</strong> â ï¸ "Not secure"</p></div> 95<p><strong>The problem:</strong><br> 96â Data transmitted in plain text <br> 97â Anyone can intercept traffic <br> 98â Users don't trust it <br> 99â Browser shows scary warnings <br> 100â Can't use modern web features (WebRTC, microphone access) <br></p> 101<p><strong>What you need:</strong></p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a title="Managing SSL/TLS certificates in AWS. Covers issuing and validating certificates, DNS-based validation, automatic renewal, and attaching certificates to ALBs, CloudFront, and other AWS services." class="tag_zVej tagRegular_sFm0" href="/blog/tags/acm/">AWS Certificate Manager (ACM)</a></li><li class="tag_QGVx"><a title="Securing network traffic using SSL/TLS encryption. Covers how certificates work, encrypted connections, trust chains, and applying SSL to web applications and cloud infrastructure." class="tag_zVej tagRegular_sFm0" href="/blog/tags/ssl/">SSL</a></li><li class="tag_QGVx"><a title="Serving applications over encrypted HTTPS connections. Covers TLS handshakes, HTTPâHTTPS redirects, browser trust, and best practices for enforcing secure traffic in production systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/https/">HTTPS</a></li><li class="tag_QGVx"><a title="Designing secure cloud environments for AI workloads. Covers network isolation, least-privilege access, private vs public subnets, secure outbound patterns (NAT), and defense-in-depth for production AI agents." class="tag_zVej tagRegular_sFm0" href="/blog/tags/security/">Security</a></li><li class="tag_QGVx"><a title="Working with digital certificates for identity and encryption. Covers certificate authorities, domain validation, trust chains, expiration, and managing certificates for secure cloud deployments." class="tag_zVej tagRegular_sFm0" href="/blog/tags/certificate/">Certificate</a></li><li class="tag_QGVx"><a title="Daily build-and-ship sequences focused on rapid learning. Covers structured 24-day technical arcs, progressive complexity, and hands-on deployments shipped in small, atomic wins." class="tag_zVej tagRegular_sFm0" href="/blog/tags/advent-calendar/">Advent Calendar</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Day 11: Add HTTPS (SSL certificate)" href="/blog/day-11-add-https-ssl-certificate/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/day-10-get-custom-domain-route53/">Day 10: Get your custom domain (real URLs)</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-12-30T00:00:00.000Z">December 30, 2025</time> · <!-- -->23 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#
101000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03
101-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"> 102<!-- --> 103<!-- --> 104<!-- --> 105<p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_10_linkedin_card_v2.png" alt="Get your custom domain (real URLs)" title="Get your custom domain (real URLs)" class="img_ev3q"></p> 106<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info nkx-learn"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 50 50"><path d="M6 4v4H2v35h1c12.613 0 21.508 3.875 21.594 3.914l.406.18.406-.18C25.492 46.875 34.386 43 47 43h1V8h-4V4h-1c-9.84 0-17.36 3.621-18 3.938C24.36 7.62 16.84 4 7 4Zm2 2.09c8.246.234 14.652 2.957 16 3.566v30.848c-2.129-.918-8.113-3.203-16-3.414Zm34 0v31c-7.887.21-13.871 2.496-16 3.414V9.656c1.348-.61 7.754-3.332 16-3.566"></path></svg></span>What you'll learn</div><div class="admonitionContent_BuS1"><p>How to set up a custom domain with Route 53 and point it to your Application Load Balancer.</p></div></div> 107<h2 class="anchor anchorWithStickyNavbar_LWe7" id="no-more-default-urls">No more default URLs<a href="#no-more-default-urls" class="hash-link" aria-label="Direct link to No more default URLs" title="Direct link to No more default URLs">â</a></h2> 108<p>Day 9: You built the front-yard house (ALB)</p> 109<p><strong>Today:</strong> We give it a real address</p> 110<p><strong>Here's the situation:</strong> 111Your ALB has a public endpoint:</p> 112<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#d6deeb"><span class="token plain">fargate-alb-1234567890.us-east-1.elb.amazonaws.com</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS">
112<path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> 113<p><strong>This works, but:</strong> <br> 114â Impossible to remember <br> 115â Looks unprofessional <br> 116â Hard to share <br> 117â Can't use for SSL certificate (Day 11) <br></p> 118<p><strong>What you want:</strong></p> 119<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#d6deeb"><span class="token plain">ai-caller.yourdomain.com</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> 120<p>Clean. Professional. Memorable.</p> 121<p><strong>Solution: Route 53 + Custom Domain</strong></p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a title="Managing domains and DNS in AWS. Covers hosted zones, Alias records, domain registration and transfers, routing traffic to ALB and CloudFront, and AWS-native DNS patterns for production systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/route-53/">Route 53</a></li><li class="tag_QGVx"><a title="Understanding how domain names resolve to infrastructure. Covers DNS fundamentals, record types (A, CNAME, Alias), name servers, propagation, and practical DNS setups for cloud-native applications." class="tag_zVej tagRegular_sFm0" href="/blog/tags/dns/">DNS</a></li><li class="tag_QGVx"><a title="Working with custom domains for production applications. Covers domain registration, subdomains, DNS ownership, routing domains to cloud resources, and replacing default service URLs with clean, professional addresses." class="tag_zVej tagRegular_sFm0" href="/blog/tags/domain/">Domain</a></li><li class="tag_QGVx"><a title="Core cloud networking concepts: IP addressing, routing, NAT, gateways, load balancers, and traffic flow for distributed systems. Focused on production-grade architectures for AI workloads." class="tag_zVej tagRegular_sFm0" href="/blog/tags/networking/">Networking</a></li><li class="tag_QGVx"><a title="Daily build-and-ship sequences focused on rapid learning. Covers structured 24-day technical arcs, progressive complexity, and hands-on deployments shipped in small, atomic wins." class="tag_zVej tagRegular_sFm0" href="/blog/tags/advent-calendar/">Advent Calendar</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Day 10: Get your custom domain (real URLs)" href="/blog/day-10-get-custom-domain-route53/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/day-9-create-application-load-balancer-front-door/">Day 9: Create your Application Load Balancer (the front door)</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-12-28T00:00:00.000Z">December 28, 2025</time> · <!-- -->25 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#
121000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03
121-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"> 122<!-- --> 123<!-- --> 124<!-- --> 125<p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_9_linkedin_card.png" alt="Create your Application Load Balancer (the front door)" title="Create your Application Load Balancer (the front door)" class="img_ev3q"></p> 126<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info nkx-learn"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 50 50"><path d="M6 4v4H2v35h1c12.613 0 21.508 3.875 21.594 3.914l.406.18.406-.18C25.492 46.875 34.386 43 47 43h1V8h-4V4h-1c-9.84 0-17.36 3.621-18 3.938C24.36 7.62 16.84 4 7 4Zm2 2.09c8.246.234 14.652 2.957 16 3.566v30.848c-2.129-.918-8.113-3.203-16-3.414Zm34 0v31c-7.887.21-13.871 2.496-16 3.414V9.656c1.348-.61 7.754-3.332 16-3.566"></path></svg></span>What you'll learn</div><div class="admonitionContent_BuS1"><p>How to create an Application Load Balancer that accepts internet traffic and routes it to your private containers</p></div></div> 127<h2 class="anchor anchorWithStickyNavbar_LWe7" id="your-network-needs-a-front-yard-house">Your network needs a front-yard house<a href="#your-network-needs-a-front-yard-house" class="hash-link" aria-label="Direct link to Your network needs a front-yard house" title="Direct link to Your network needs a front-yard house">â</a></h2> 128<p>Day 8: You tested and validated your network</p> 129<p><strong>Today:</strong> We build the front door (Application Load Balancer)</p> 130<p style="margin-bottom:8px"><strong>Here's the setup:</strong></p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a title="Routing and distributing incoming traffic to backend services in AWS. Covers listener rules, target groups, health checks, path-based routing, and using ALB to expose containerized and serverless workloads securely." class="tag_zVej tagRegular_sFm0" href="/blog/tags/alb/">Application Load Balancer (ALB)</a></li><li class="tag_QGVx"><a title="Distributing traffic across multiple services or instances for scalability and reliability. Covers load-balancing strategies, health checks, fault tolerance, and patterns for exposing applications while keeping backends isolated." class="tag_zVej tagRegular_sFm0" href="/blog/tags/load-balancer/">Load Balancer</a></li><li class="tag_QGVx"><a title="Core cloud networking concepts: IP addressing, routing, NAT, gateways, load balancers, and traffic flow for distributed systems. Focused on production-grade architectures for AI workloads."
130class="tag_zVej tagRegular_sFm0" href="/blog/tags/networking/">Networking</a></li><li class="tag_QGVx"><a title="Building and operating applications in the cloud. Covers AWS fundamentals, distributed system patterns, managed services, scalability, and cloud-native deployment workflows." class="tag_zVej tagRegular_sFm0" href="/blog/tags/cloud/">Cloud</a></li><li class="tag_QGVx"><a title="Foundational systems that power modern applications. Covers VPCs, compute, networking, security, IaC, and the end-to-end architecture required to run AI agents and containerized workloads." class="tag_zVej tagRegular_sFm0" href="/blog/tags/infrastructure/">Infrastructure</a></li><li class="tag_QGVx"><a title="Daily build-and-ship sequences focused on rapid learning. Covers structured 24-day technical arcs, progressive complexity, and hands-on deployments shipped in small, atomic wins." class="tag_zVej tagRegular_sFm0" href="/blog/tags/advent-calendar/">Advent Calendar</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Day 9: Create your Application Load Balancer (the front door)" href="/blog/day-9-create-application-load-balancer-front-door/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/day-8-test-your-network-prove-it-works/">Day 8: Test your network (prove it works)</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-12-19T00:00:00.000Z">December 19, 2025</time> · <!-- -->26 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a class="avatar__photo-link" href="/blog/authors/norah/"><img class="avatar__photo authorImage_XqGP" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg" alt="Norah Klintberg Sakal"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="/blog/authors/norah/"><span class="authorName_yefp">Norah Klintberg Sakal</span></a></div><small class="authorTitle_nd0D" title="AI Consultant & Developer">AI Consultant & Developer</small><div class="authorSocials_rSDt"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 250" preserveAspectRatio="xMidYMid" style="--dark:#000;--light:#fff" class="authorSocialLink_owbf githubSvg_Uu4N"><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.
130182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"></path></svg></a><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" class="authorSocialLink_owbf"><path d="M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453" fill="#0A66C2"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="authorSocialLink_owbf" title="email"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="authorSocialLink_owbf"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M3.6 9h16.8"></path><path d="M3.6 15h16.8"></path><path d="M11.5 3a17 17 0 0 0 0 18"></path><path d="M12.5 3a17 17 0 0 1 0 18"></path></svg></a></div></div></div></div></div></header><div class="markdown"> 131<!-- --> 132<!-- --> 133<!-- --> 134<p><img decoding="async" loading="lazy" src="https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png" alt="Test your network (prove it works)" title="Test your network (prove it works)" class="img_ev3q"></p> 135<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info nkx-learn"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 50 50"><path d="M6 4v4H2v35h1c12.613 0 21.508 3.875 21.594 3.914l.406.18.406-.18C25.492 46.875 34.386 43 47 43h1V8h-4V4h-1c-9.84 0-17.36 3.621-18 3.938C24.36 7.62 16.84 4 7 4Zm2 2.09c8.246.234 14.652 2.957 16 3.566v30.848c-2.129-.918-8.113-3.203-16-3.414Zm34 0v31c-7.887.21-13.871 2.496-16 3.414V9.656c1.348-.61 7.754-3.332 16-3.566"></path></svg></span>What you'll learn</div><div class="admonitionContent_BuS1"><p>How to validate your VPC infrastructure by launching a test instance and verifying connectivity</p></div></div> 136<h2 class="anchor anchorWithStickyNavbar_LWe7" id="trust-but-verify">Trust, but verify<a href="#trust-but-verify" class="hash-link" aria-label="Direct link to Trust, but verify" title="Direct link to Trust, but verify">â</a></h2> 137<p>Days 3-7: You built the entire network infrastructure</p> 138<p><strong>Today:</strong> We prove it actually works</p> 139<p><strong>Here's the situation:</strong></p> 140<p>You've built: <br> 141â VPC with Internet Gateway <br> 142â Public and private subnets <br> 143â NAT Gateway <br> 144â Route Tables <br> 145â Security Groups <br></p> 146<p><strong>But you haven't actually tested any of it.</strong></p> 147<p><strong>What if:</strong></p> 148<ul> 149<li>NAT Gateway isn't running correctly?</li> 150<li>Route tables have the wrong associations?</li> 151<li>Secure Groups are blocking traffic?</li> 152<li>Something is misconfigured?</li> 153</ul> 154<p><strong>You'd fund out after deploying your containers</strong> (painful debugging)</p> 155<p><strong>Solution:</strong> Test first, deploy second.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a title="Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx">
155<a title="Testing systems and infrastructure to ensure they behave as expected. Covers sanity checks, connectivity testing, environment verification, failure scenarios, and validating assumptions before shipping to production." class="tag_zVej tagRegular_sFm0" href="/blog/tags/testing/">Testing</a></li><li class="tag_QGVx"><a title="Core cloud networking concepts: IP addressing, routing, NAT, gateways, load balancers, and traffic flow for distributed systems. Focused on production-grade architectures for AI workloads." class="tag_zVej tagRegular_sFm0" href="/blog/tags/networking/">Networking</a></li><li class="tag_QGVx"><a title="Working with Amazon EC2 instances in AWS. Covers instance types, networking, access patterns, lifecycle management, and practical uses of EC2 for running, debugging, and validating cloud workloads." class="tag_zVej tagRegular_sFm0" href="/blog/tags/ec-2/">EC2</a></li><li class="tag_QGVx"><a title="Foundational systems that power modern applications. Covers VPCs, compute, networking, security, IaC, and the end-to-end architecture required to run AI agents and containerized workloads." class="tag_zVej tagRegular_sFm0" href="/blog/tags/infrastructure/">Infrastructure</a></li><li class="tag_QGVx">
155<a title="Proving that infrastructure is production-ready through concrete checks. Covers outbound internet validation from private subnets, NAT IP verification, DNS and connectivity testing, and confirming assumptions before deploying AI workloads." class="tag_zVej tagRegular_sFm0" href="/blog/tags/validation/">Validation</a></li><li class="tag_QGVx"><a title="Daily build-and-ship sequences focused on rapid learning. Covers structured 24-day technical arcs, progressive complexity, and hands-on deployments shipped in small, atomic wins." class="tag_zVej tagRegular_sFm0" href="/blog/tags/advent-calendar/">Advent Calendar</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Day 8: Test your network (prove it works)" href="/blog/day-8-test-your-network-prove-it-works/"><b>Read more</b></a></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"><a class="pagination-nav__link pagination-nav__link--next" href="/blog/page/2/"><div class="pagination-nav__label">Older entries</div></a></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Tutorials</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/tutorials/intro/">Guides</a></li></ul></div><div class="col footer__col"><div class="footer__title">Courses</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/courses/">Courses</a></li></ul></div><div class="col footer__col"><div class="footer__title">Connect with me</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://twitter.com/norahsakal" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.linkedin.com/in/norah-klintberg-sakal/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/norahsakal" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/blog/">Blog</a></li><li class="footer__item"><a class="footer__link-item" href="/case-studies/">Case studies</a></li><li class="footer__item"><a class="footer__link-item" href="/consulting/">Consulting Services</a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 Norah Klintberg Sakal</div></div></div></footer></div> 156</body> 157</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.