<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: abdullah haroon</title>
    <description>The latest articles on DEV Community by abdullah haroon (@abdullah_haroon_092cf10d3).</description>
    <link>https://dev.to/abdullah_haroon_092cf10d3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3372552%2Fe3ec4f00-626f-4460-925c-de5f8970650a.jpg</url>
      <title>DEV Community: abdullah haroon</title>
      <link>https://dev.to/abdullah_haroon_092cf10d3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abdullah_haroon_092cf10d3"/>
    <language>en</language>
    <item>
      <title>Building DreamCanvas: An AI Agent That Imagines a New World Every Day | 10 Days of Building AI Agents on AWS | Day 10</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Tue, 01 Sep 2026 03:24:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/building-dreamcanvas-an-ai-agent-that-imagines-a-new-world-every-day-10-days-of-building-ai-4j26</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/building-dreamcanvas-an-ai-agent-that-imagines-a-new-world-every-day-10-days-of-building-ai-4j26</guid>
      <description>&lt;h1&gt;
  
  
  Building DreamCanvas: An AI Agent That Imagines a New World Every Day
&lt;/h1&gt;

&lt;h2&gt;
  
  
  10 Days of Building AI Agents on AWS | Day 10
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tag:&lt;/strong&gt; &lt;code&gt;#agents&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;DreamCanvas is an always-on AI creative agent that imagines a new fictional world every day before you even open the app.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Vision: Creativity That Does Not Wait
&lt;/h2&gt;

&lt;p&gt;Most creative applications wait for a user to open them, enter a prompt, and request something new.&lt;/p&gt;

&lt;p&gt;I wanted to explore a different idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if a creative application could continue creating even when nobody was actively using it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That idea became &lt;strong&gt;DreamCanvas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;DreamCanvas is an autonomous AI creative agent that generates a brand-new fictional world every day.&lt;/p&gt;

&lt;p&gt;Instead of opening an application and asking an AI to imagine something, the user can return later and discover that a completely new world has already been created.&lt;/p&gt;

&lt;p&gt;The experience is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You leave → DreamCanvas keeps working → You return → A new world is waiting&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The goal was to create an experience where inspiration is already waiting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does DreamCanvas Create?
&lt;/h2&gt;

&lt;p&gt;Each generated world has its own identity and creative details.&lt;/p&gt;

&lt;p&gt;A world can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unique world name&lt;/li&gt;
&lt;li&gt;Genre&lt;/li&gt;
&lt;li&gt;Atmosphere&lt;/li&gt;
&lt;li&gt;Tagline&lt;/li&gt;
&lt;li&gt;World overview&lt;/li&gt;
&lt;li&gt;Environment&lt;/li&gt;
&lt;li&gt;Inhabitants&lt;/li&gt;
&lt;li&gt;A special rule of the universe&lt;/li&gt;
&lt;li&gt;Main conflict&lt;/li&gt;
&lt;li&gt;A surprising discovery&lt;/li&gt;
&lt;li&gt;A story seed that could become the beginning of a larger story&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means DreamCanvas does not simply generate a short idea or random paragraph.&lt;/p&gt;

&lt;p&gt;It creates the foundation of an entirely new fictional universe.&lt;/p&gt;

&lt;p&gt;Every day, the agent has the opportunity to create something completely different.&lt;/p&gt;

&lt;p&gt;One day, it might imagine a civilization living beneath an endless ocean.&lt;/p&gt;

&lt;p&gt;The next day, it could create a city where memories are traded as currency.&lt;/p&gt;

&lt;p&gt;Another day, it might imagine a forgotten kingdom floating between planets.&lt;/p&gt;

&lt;p&gt;The user does not need to ask for these worlds.&lt;/p&gt;

&lt;p&gt;They are already waiting.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Always-On Agent Workflow
&lt;/h1&gt;

&lt;p&gt;DreamCanvas works differently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User leaves
        ↓
EventBridge wakes the agent automatically
        ↓
Agent checks recent worlds
        ↓
Agent remembers previous creative directions
        ↓
Agent chooses a different direction
        ↓
Groq generates a new fictional world
        ↓
Lambda validates the response
        ↓
World is stored in DynamoDB
        ↓
User returns later
        ↓
A new world is already waiting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application does useful creative work without waiting for a user to request it.&lt;/p&gt;

&lt;p&gt;That is the main idea I wanted to explore.&lt;/p&gt;

&lt;h1&gt;
  
  
  Lightweight Agent Memory
&lt;/h1&gt;

&lt;p&gt;One of the important features of DreamCanvas is memory.&lt;/p&gt;

&lt;p&gt;Before generating a new world, the agent retrieves recent creations from &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The recent worlds provide context such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Previous world names&lt;/li&gt;
&lt;li&gt;Genres&lt;/li&gt;
&lt;li&gt;Atmospheres&lt;/li&gt;
&lt;li&gt;Settings&lt;/li&gt;
&lt;li&gt;Main concepts&lt;/li&gt;
&lt;li&gt;Inhabitants&lt;/li&gt;
&lt;li&gt;Conflicts&lt;/li&gt;
&lt;li&gt;Summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This information is provided to the AI during the next generation.&lt;/p&gt;

&lt;p&gt;The agent is instructed to avoid repeating similar creative directions.&lt;/p&gt;

&lt;p&gt;For example, if recent worlds have focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Futuristic cities&lt;/li&gt;
&lt;li&gt;Fantasy kingdoms&lt;/li&gt;
&lt;li&gt;Dark mysterious worlds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next generation can be encouraged to explore something meaningfully different.&lt;/p&gt;

&lt;p&gt;Perhaps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A peaceful alien ecosystem&lt;/li&gt;
&lt;li&gt;A world inside a living machine&lt;/li&gt;
&lt;li&gt;A civilization existing in people's dreams&lt;/li&gt;
&lt;li&gt;An ancient world where time moves differently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives DreamCanvas a lightweight form of memory.&lt;/p&gt;

&lt;p&gt;I deliberately did not use a vector database or a complicated AI framework.&lt;/p&gt;

&lt;p&gt;For this use case, recent DynamoDB records provide enough context to influence future generations while keeping the architecture simple.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5cuqyxvxtc169ti7lpol.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5cuqyxvxtc169ti7lpol.PNG" alt=" " width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was an important design decision.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Not every AI agent needs a complex memory system. Sometimes remembering the most recent actions is enough.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  How I Built It
&lt;/h1&gt;

&lt;p&gt;I intentionally kept the project architecture simple and focused.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend
&lt;/h2&gt;

&lt;p&gt;The frontend uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Vanilla JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did not use a large frontend framework because the main purpose of the project was to demonstrate the always-on AI agent architecture.&lt;/p&gt;

&lt;p&gt;The website allows users to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View today's generated world&lt;/li&gt;
&lt;li&gt;Explore complete world details&lt;/li&gt;
&lt;li&gt;Browse previously imagined worlds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the user opens the application, the frontend requests the latest generated world from the backend.&lt;/p&gt;

&lt;p&gt;Because the autonomous workflow has already run, the new world is ready to display.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Autonomous Backend
&lt;/h2&gt;

&lt;p&gt;The most important part of DreamCanvas runs on AWS.&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;Amazon EventBridge schedule&lt;/strong&gt; automatically wakes the agent every day.&lt;/p&gt;

&lt;p&gt;The scheduled event invokes an &lt;strong&gt;AWS Lambda&lt;/strong&gt; function.&lt;/p&gt;

&lt;p&gt;The workflow begins with an important check.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Check for Today's World
&lt;/h3&gt;

&lt;p&gt;Lambda first checks whether a world has already been generated for the current day.&lt;/p&gt;

&lt;p&gt;This makes the workflow idempotent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Has today's world already been created?

YES → Stop

NO → Continue generation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents accidental duplicate generations and unnecessary AI API usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Retrieve Recent Memory
&lt;/h3&gt;

&lt;p&gt;If no world exists for the current day, Lambda retrieves several recent worlds from &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These records act as the agent's memory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fft4d12twit1ucko1bb27.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fft4d12twit1ucko1bb27.PNG" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Choose a New Creative Direction
&lt;/h3&gt;

&lt;p&gt;The recent worlds are used as context.&lt;/p&gt;

&lt;p&gt;The AI is instructed to create something meaningfully different from recent generations.&lt;/p&gt;

&lt;p&gt;The goal is not simply randomness.&lt;/p&gt;

&lt;p&gt;The goal is informed variety.&lt;/p&gt;

&lt;p&gt;The agent knows what it recently created and uses that information when creating something new.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Generate the World
&lt;/h3&gt;

&lt;p&gt;Lambda sends the creative context to the AI through the &lt;strong&gt;Groq API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Groq acts as the creative generation engine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Validate the AI Response
&lt;/h3&gt;

&lt;p&gt;The backend does not blindly store the AI response.&lt;/p&gt;

&lt;p&gt;The Lambda validates the generated data before saving it.&lt;/p&gt;

&lt;p&gt;This is important because the application expects structured information.&lt;/p&gt;

&lt;p&gt;The validation checks that the required data exists and that the response can be safely processed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr2dmc7a8c5jsepqmqj6y.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr2dmc7a8c5jsepqmqj6y.PNG" alt=" " width="799" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the AI response is malformed, the application handles the problem safely and can retry generation rather than storing invalid data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Save the New World
&lt;/h3&gt;

&lt;p&gt;Once validation succeeds, the new world is stored in &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The generated world then becomes available through the application's API.&lt;/p&gt;

&lt;p&gt;When the user returns later, the frontend can immediately display it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Separating AI Generation from Infrastructure
&lt;/h1&gt;

&lt;p&gt;One of the key architectural decisions was separating the AI generation service from the always-on application infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Groq&lt;/strong&gt; handles creative AI generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS&lt;/strong&gt; handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduling&lt;/li&gt;
&lt;li&gt;Serverless execution&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;API access&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The separation looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS EventBridge
        ↓
AWS Lambda
        ↓
DynamoDB Memory
        ↓
Groq API
        ↓
AWS Lambda Validation
        ↓
DynamoDB Storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows the application to combine an external AI model with AWS serverless infrastructure.&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS Services Used
&lt;/h1&gt;

&lt;p&gt;DreamCanvas uses a lightweight serverless architecture built with the following AWS services.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Lambda
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt; runs the DreamCanvas agent and backend API logic.&lt;/p&gt;

&lt;p&gt;It handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily world generation&lt;/li&gt;
&lt;li&gt;Checking for duplicates&lt;/li&gt;
&lt;li&gt;Retrieving recent worlds&lt;/li&gt;
&lt;li&gt;Preparing AI prompts&lt;/li&gt;
&lt;li&gt;Calling the Groq API&lt;/li&gt;
&lt;li&gt;Validating responses&lt;/li&gt;
&lt;li&gt;Storing new worlds&lt;/li&gt;
&lt;li&gt;Serving API requests&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon EventBridge
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon EventBridge&lt;/strong&gt; automatically triggers the DreamCanvas agent every day.&lt;/p&gt;

&lt;p&gt;This is what transforms the project from a normal AI application into an always-on system.&lt;/p&gt;

&lt;p&gt;The user does not need to press a button.&lt;/p&gt;

&lt;p&gt;The scheduled event wakes the agent automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon DynamoDB
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon DynamoDB&lt;/strong&gt; stores the generated fictional worlds.&lt;/p&gt;

&lt;p&gt;It also acts as lightweight agent memory.&lt;/p&gt;

&lt;p&gt;Before creating a new world, the agent retrieves recent records and uses them as context to avoid repetitive output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon API Gateway
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon API Gateway&lt;/strong&gt; provides API endpoints for the frontend.&lt;/p&gt;

&lt;p&gt;The frontend can use these endpoints to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retrieve today's world&lt;/li&gt;
&lt;li&gt;Browse previous worlds&lt;/li&gt;
&lt;li&gt;View individual world details&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon S3
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon S3&lt;/strong&gt; hosts the static frontend.&lt;/p&gt;

&lt;p&gt;The frontend consists of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Secrets Manager
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Secrets Manager&lt;/strong&gt; securely stores the Groq API key.&lt;/p&gt;

&lt;p&gt;The key is never exposed in browser code or committed to the repository.&lt;/p&gt;

&lt;p&gt;The Lambda backend retrieves the secret using AWS permissions.&lt;/p&gt;

&lt;p&gt;The security flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
    ↓
API Gateway
    ↓
Lambda
    ↓
Secrets Manager
    ↓
Retrieve Groq API Key
    ↓
Groq API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Amazon CloudWatch
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon CloudWatch&lt;/strong&gt; provides logs and monitoring.&lt;/p&gt;

&lt;p&gt;It helps monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduled generation events&lt;/li&gt;
&lt;li&gt;Lambda execution&lt;/li&gt;
&lt;li&gt;Validation failures&lt;/li&gt;
&lt;li&gt;API errors&lt;/li&gt;
&lt;li&gt;Application debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS SAM
&lt;/h2&gt;

&lt;p&gt;I used &lt;strong&gt;AWS SAM&lt;/strong&gt; to define and deploy the serverless infrastructure.&lt;/p&gt;

&lt;p&gt;SAM uses AWS CloudFormation underneath and makes it easier to define serverless resources as infrastructure as code.&lt;/p&gt;

&lt;p&gt;This means the AWS environment can be deployed consistently from the project instead of manually creating resources one by one.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;DreamCanvas is an always-on AI creative agent that remembers recently imagined worlds, automatically creates a new one every day using Groq, and uses AWS serverless services to make sure the next world is waiting before the user even opens the application.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  App and Source Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt;&lt;br&gt;
[&lt;a href="http://dreamcanvas-frontend-305218268847-us-east-1.s3-website-us-east-1.amazonaws.com/" rel="noopener noreferrer"&gt;http://dreamcanvas-frontend-305218268847-us-east-1.s3-website-us-east-1.amazonaws.com/&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building FridgeChef AI: Turning Available Ingredients into Recipes | 10 Days of Building AI Agents on AWS | Day 9</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Mon, 31 Aug 2026 02:28:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/building-fridgechef-ai-turning-available-ingredients-into-recipes-10-days-of-building-ai-agents-3p76</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/building-fridgechef-ai-turning-available-ingredients-into-recipes-10-days-of-building-ai-agents-3p76</guid>
      <description>&lt;h2&gt;
  
  
  10 Days of Building AI Agents on AWS | Day 8
&lt;/h2&gt;

&lt;p&gt;Opening the fridge and still not knowing what to cook is a frustrating daily problem.&lt;/p&gt;

&lt;p&gt;You may already have chicken, eggs, vegetables, rice, spices, and other ingredients at home, but still spend more time searching for recipes than actually preparing a meal.&lt;/p&gt;

&lt;p&gt;That was the problem behind &lt;strong&gt;FridgeChef AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;FridgeChef AI is an AI-powered recipe assistant that transforms the ingredients already available in your kitchen into personalized meal ideas using generative AI and AWS serverless technologies.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Available Ingredients → Preferences → AI → Personalized Recipe&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of searching through multiple recipe websites, users can enter what they already have and let AI suggest what they can cook.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq6ft0nyz8mbg4eq4zdri.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq6ft0nyz8mbg4eq4zdri.webp" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Vision and What FridgeChef AI Does
&lt;/h2&gt;

&lt;p&gt;One of the most common everyday frustrations is standing in front of the refrigerator wondering:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What can I actually cook with this?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even when we have several ingredients available, it can be difficult to combine them into a complete meal idea.&lt;/p&gt;

&lt;p&gt;This often leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wasted time searching for recipes&lt;/li&gt;
&lt;li&gt;Unnecessary grocery purchases&lt;/li&gt;
&lt;li&gt;Ingredients being forgotten&lt;/li&gt;
&lt;li&gt;Food eventually expiring unused&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to build a focused application that solves this one problem.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;FridgeChef AI&lt;/strong&gt;, users simply enter the ingredients available in their kitchen and select optional preferences such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preferred cuisine&lt;/li&gt;
&lt;li&gt;Dietary restrictions&lt;/li&gt;
&lt;li&gt;Cooking time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI then generates personalized recipe suggestions in seconds.&lt;/p&gt;

&lt;p&gt;Each response can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recipe suggestions&lt;/li&gt;
&lt;li&gt;Required ingredients&lt;/li&gt;
&lt;li&gt;Cooking instructions&lt;/li&gt;
&lt;li&gt;Estimated cooking time&lt;/li&gt;
&lt;li&gt;Additional cooking tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was not to build a complete recipe platform with thousands of manually created recipes.&lt;/p&gt;

&lt;p&gt;Instead, the focus was on one useful experience:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tell FridgeChef what you have, and let AI help you decide what to cook.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By encouraging users to cook with ingredients they already have, the application can also help reduce unnecessary food waste.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I wanted the project to use a modern serverless architecture while keeping the deployment process automated and reproducible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;p&gt;The frontend was built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interface uses a warm, kitchen-inspired design focused on making the experience simple and intuitive.&lt;/p&gt;

&lt;p&gt;Users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add available ingredients&lt;/li&gt;
&lt;li&gt;Select cuisine preferences&lt;/li&gt;
&lt;li&gt;Choose dietary options&lt;/li&gt;
&lt;li&gt;Specify their preferred cooking time&lt;/li&gt;
&lt;li&gt;Generate personalized recipes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend communicates with the backend through an API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;p&gt;The backend was developed using &lt;strong&gt;Node.js&lt;/strong&gt; and deployed as an &lt;strong&gt;AWS Lambda&lt;/strong&gt; function.&lt;/p&gt;

&lt;p&gt;Instead of maintaining a traditional server, the backend runs only when a request is received.&lt;/p&gt;

&lt;p&gt;The request flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User enters ingredients
        ↓
Frontend sends request
        ↓
Amazon API Gateway
        ↓
AWS Lambda
        ↓
Groq API
        ↓
Recipe generation
        ↓
Structured JSON response
        ↓
Frontend displays recipes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;This architecture keeps the backend lightweight and serverless.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Recipe Generation
&lt;/h2&gt;

&lt;p&gt;For AI-powered recipe generation, I integrated the &lt;strong&gt;Groq API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The backend receives the user's ingredients and preferences and creates a structured prompt.&lt;/p&gt;

&lt;p&gt;For example, the input may contain:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;br&gt;
Ingredients:&lt;br&gt;
Chicken, rice, onions, tomatoes, garlic&lt;/p&gt;

&lt;p&gt;Cuisine:&lt;br&gt;
Pakistani&lt;/p&gt;

&lt;p&gt;Dietary Preference:&lt;br&gt;
None&lt;/p&gt;

&lt;p&gt;Cooking Time:&lt;br&gt;
30 minutes&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;plaintext&lt;/p&gt;

&lt;p&gt;The backend sends this information to the AI model and requests a structured recipe response.&lt;/p&gt;

&lt;p&gt;The AI can generate information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recipe name&lt;/li&gt;
&lt;li&gt;Description&lt;/li&gt;
&lt;li&gt;Ingredients&lt;/li&gt;
&lt;li&gt;Cooking instructions&lt;/li&gt;
&lt;li&gt;Estimated preparation time&lt;/li&gt;
&lt;li&gt;Cooking tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The response is then formatted into structured JSON before being returned to the frontend.&lt;/p&gt;

&lt;p&gt;Using structured responses makes it easier for the application to reliably display the generated recipes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Chose a Serverless Architecture
&lt;/h2&gt;

&lt;p&gt;This project did not need a traditional server running continuously.&lt;/p&gt;

&lt;p&gt;Recipe generation happens only when a user submits ingredients.&lt;/p&gt;

&lt;p&gt;That makes a serverless architecture a good fit.&lt;/p&gt;

&lt;p&gt;The backend can remain inactive until a request arrives:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;No request → No backend processing&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When a user generates a recipe:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Request arrives → Lambda runs → AI generates recipe → Response returns&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This allowed me to focus on the application rather than managing servers.&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS Services and Architecture
&lt;/h1&gt;

&lt;p&gt;The application uses several AWS services.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Amplify Hosting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Amplify&lt;/strong&gt; hosts the React frontend and makes the application publicly accessible.&lt;/p&gt;

&lt;p&gt;It provides the hosting layer for the user interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon API Gateway
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon API Gateway&lt;/strong&gt; receives requests from the frontend and routes them to the serverless backend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7yhoinvvv2ukdbhffnk.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7yhoinvvv2ukdbhffnk.webp" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The frontend does not communicate directly with the AI provider.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
Frontend&lt;br&gt;
    ↓&lt;br&gt;
API Gateway&lt;br&gt;
    ↓&lt;br&gt;
AWS Lambda&lt;br&gt;
    ↓&lt;br&gt;
Groq API&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;plaintext&lt;/p&gt;

&lt;p&gt;This keeps the AI integration inside the backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Lambda
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt; runs the Node.js backend.&lt;/p&gt;

&lt;p&gt;It is responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Receiving recipe requests&lt;/li&gt;
&lt;li&gt;Processing ingredients and preferences&lt;/li&gt;
&lt;li&gt;Creating the AI prompt&lt;/li&gt;
&lt;li&gt;Calling the Groq API&lt;/li&gt;
&lt;li&gt;Processing the AI response&lt;/li&gt;
&lt;li&gt;Returning structured recipe data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lambda runs when the application receives a request, so there is no continuously running backend server.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS SAM
&lt;/h2&gt;

&lt;p&gt;I used &lt;strong&gt;AWS SAM (Serverless Application Model)&lt;/strong&gt; to simplify the development and deployment of the serverless backend.&lt;/p&gt;

&lt;p&gt;SAM makes it easier to define and deploy resources such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambda functions&lt;/li&gt;
&lt;li&gt;API Gateway endpoints&lt;/li&gt;
&lt;li&gt;IAM permissions&lt;/li&gt;
&lt;li&gt;Environment configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS CloudFormation
&lt;/h2&gt;

&lt;p&gt;The infrastructure is provisioned using &lt;strong&gt;AWS CloudFormation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rather than manually creating resources through the AWS Console, the infrastructure is defined as code.&lt;/p&gt;

&lt;p&gt;This means the deployment can be repeated consistently.&lt;/p&gt;

&lt;p&gt;The infrastructure definition includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda configuration&lt;/li&gt;
&lt;li&gt;API Gateway configuration&lt;/li&gt;
&lt;li&gt;IAM roles and permissions&lt;/li&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Required service connections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The workflow becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Infrastructure Code → AWS SAM → CloudFormation → AWS Resources&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Amazon CloudWatch
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon CloudWatch&lt;/strong&gt; is used for monitoring and debugging.&lt;/p&gt;

&lt;p&gt;During development, CloudWatch logs helped identify deployment and runtime issues.&lt;/p&gt;

&lt;h1&gt;
  
  
  Architecture Overview
&lt;/h1&gt;

&lt;p&gt;The complete architecture looks like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
                         USER&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                    AWS Amplify&lt;br&gt;
                  React + Vite App&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                 Amazon API Gateway&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                      AWS Lambda&lt;br&gt;
                       Node.js&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                        Groq API&lt;br&gt;
                    AI Recipe Generation&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                      AWS Lambda&lt;br&gt;
                   Process AI Response&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                 Amazon API Gateway&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                    React Frontend&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                Personalized Recipes&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The application starts when a user submits a list of ingredients through the frontend.&lt;/p&gt;

&lt;p&gt;API Gateway receives the request and invokes the Lambda function.&lt;/p&gt;

&lt;p&gt;Lambda prepares the AI prompt and sends it to the Groq API.&lt;/p&gt;

&lt;p&gt;Once the AI generates recipe suggestions, the backend formats the result into structured JSON and returns it through API Gateway.&lt;/p&gt;

&lt;p&gt;The frontend then displays the recipes to the user.&lt;/p&gt;

&lt;h1&gt;
  
  
  Infrastructure as Code
&lt;/h1&gt;

&lt;p&gt;One of my main goals was to avoid manually configuring cloud resources.&lt;/p&gt;

&lt;p&gt;I used &lt;strong&gt;AWS SAM and AWS CloudFormation&lt;/strong&gt; to automate the infrastructure deployment.&lt;/p&gt;

&lt;p&gt;Instead of creating resources one by one through the AWS Console, the backend infrastructure can be deployed using the AWS CLI.&lt;/p&gt;

&lt;p&gt;This approach makes deployments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repeatable&lt;/li&gt;
&lt;li&gt;Easier to manage&lt;/li&gt;
&lt;li&gt;Easier to update&lt;/li&gt;
&lt;li&gt;Less dependent on manual configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During development, I encountered challenges related to CloudFormation parameter handling and environment variables.&lt;/p&gt;

&lt;p&gt;After debugging the deployment scripts and configuration, I was able to automate the deployment workflow and deploy the backend consistently.&lt;/p&gt;

&lt;p&gt;This was an important learning experience because it showed me that building an application is not only about writing the frontend and backend code.&lt;/p&gt;

&lt;p&gt;Deployment and infrastructure configuration are also important parts of the development process.&lt;/p&gt;

&lt;h1&gt;
  
  
  Challenges I Faced
&lt;/h1&gt;

&lt;p&gt;Like other serverless projects, the main challenges were related to deployment and configuration.&lt;/p&gt;

&lt;p&gt;Some of the issues involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CloudFormation parameters&lt;/li&gt;
&lt;li&gt;Environment variable configuration&lt;/li&gt;
&lt;li&gt;Deployment scripts&lt;/li&gt;
&lt;li&gt;AWS resource configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Debugging these issues helped me better understand how the different parts of a serverless application connect together.&lt;/p&gt;

&lt;p&gt;Using Infrastructure as Code also made it easier to identify configuration problems because the infrastructure was defined explicitly instead of being hidden inside manual AWS Console settings.&lt;/p&gt;

&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Building FridgeChef AI gave me valuable hands-on experience with serverless application development on AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure as Code
&lt;/h2&gt;

&lt;p&gt;I strengthened my understanding of Infrastructure as Code by deploying the backend through AWS SAM and CloudFormation.&lt;/p&gt;

&lt;p&gt;This helped me understand how cloud resources can be defined and managed as part of the application codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Gateway and Lambda
&lt;/h2&gt;

&lt;p&gt;I learned more about integrating Amazon API Gateway with AWS Lambda.&lt;/p&gt;

&lt;p&gt;The project required designing the flow between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The React frontend&lt;/li&gt;
&lt;li&gt;API Gateway&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;The external AI provider&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gave me more experience with serverless APIs and event-driven backend architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Integration
&lt;/h2&gt;

&lt;p&gt;Another important learning was integrating an external AI provider into an AWS application.&lt;/p&gt;

&lt;p&gt;Groq handles the AI inference, while AWS provides the infrastructure required to deliver the application.&lt;/p&gt;

&lt;p&gt;The combination looks like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AWS manages the application infrastructure → Groq provides AI generation&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This separation allows the application to use managed cloud services while integrating specialized AI capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging Deployments
&lt;/h2&gt;

&lt;p&gt;Working through CloudFormation and deployment issues also improved my troubleshooting skills.&lt;/p&gt;

&lt;p&gt;I learned more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing deployment parameters&lt;/li&gt;
&lt;li&gt;Working with environment variables&lt;/li&gt;
&lt;li&gt;Reading deployment errors&lt;/li&gt;
&lt;li&gt;Debugging CloudFormation configuration&lt;/li&gt;
&lt;li&gt;Structuring applications for repeatable deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FridgeChef AI is an experiment in combining generative AI with AWS serverless technologies to solve a simple everyday problem.&lt;/p&gt;

&lt;p&gt;The application takes ingredients that users already have and transforms them into personalized meal ideas.&lt;/p&gt;

&lt;p&gt;The complete workflow is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Open the App → Enter Ingredients → Choose Preferences → Generate Recipes&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Building the project gave me more experience with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React and Vite&lt;/li&gt;
&lt;li&gt;AWS Amplify&lt;/li&gt;
&lt;li&gt;Amazon API Gateway&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;AWS SAM&lt;/li&gt;
&lt;li&gt;AWS CloudFormation&lt;/li&gt;
&lt;li&gt;Amazon CloudWatch&lt;/li&gt;
&lt;li&gt;Serverless architecture&lt;/li&gt;
&lt;li&gt;Infrastructure as Code&lt;/li&gt;
&lt;li&gt;Groq AI integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, it demonstrated how quickly a useful AI-powered application can be built by combining managed AWS services with a focused product idea.&lt;/p&gt;

&lt;p&gt;Sometimes the best project is not the one with the most features.&lt;/p&gt;

&lt;p&gt;It is the one that solves a small, annoying problem well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try FridgeChef AI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live Application:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://staging.d2rlx4nfgtm79o.amplifyapp.com/" rel="noopener noreferrer"&gt;https://staging.d2rlx4nfgtm79o.amplifyapp.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building VibePlaylist AI: Turning Everyday Moods into AI-Curated Playlists | 10 Days of Building AI Agents on AWS | Day 8</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Sat, 29 Aug 2026 02:18:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/building-vibeplaylist-ai-turning-everyday-moods-into-ai-curated-playlists-10-days-of-building-ai-42h</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/building-vibeplaylist-ai-turning-everyday-moods-into-ai-curated-playlists-10-days-of-building-ai-42h</guid>
      <description>&lt;h2&gt;
  
  
  10 Days of Building AI Agents on AWS | Day 8
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tag:&lt;/strong&gt; &lt;code&gt;#agents&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Have you ever had a very specific mood but could not find the right music for it?&lt;/p&gt;

&lt;p&gt;Maybe it is a late-night drive after a long day, a quiet evening when you are feeling nostalgic, a study session that needs focus, or simply a moment that feels difficult to describe with a normal playlist.&lt;/p&gt;

&lt;p&gt;That is the idea behind &lt;strong&gt;VibePlaylist AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;VibePlaylist AI is a generative AI application that turns a user's situation, feeling, memory, place, or activity into a personalized themed playlist.&lt;/p&gt;

&lt;p&gt;Instead of manually searching through hundreds of songs, users can describe what they are experiencing, choose a vibe, and let AI curate a musical concept around that idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea Behind VibePlaylist AI
&lt;/h2&gt;

&lt;p&gt;A user can enter something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Late-night drive through Islamabad after a long and exhausting day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They can then select a vibe such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chill&lt;/li&gt;
&lt;li&gt;Romantic&lt;/li&gt;
&lt;li&gt;Sad&lt;/li&gt;
&lt;li&gt;Energetic&lt;/li&gt;
&lt;li&gt;Dreamy&lt;/li&gt;
&lt;li&gt;Nostalgic&lt;/li&gt;
&lt;li&gt;Focus&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After clicking &lt;strong&gt;Create Playlist&lt;/strong&gt;, VibePlaylist AI generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A playlist name&lt;/li&gt;
&lt;li&gt;A short description&lt;/li&gt;
&lt;li&gt;The selected vibe&lt;/li&gt;
&lt;li&gt;Eight song recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, the result could become &lt;strong&gt;Midnight Miles&lt;/strong&gt;, with a description inspired by quiet roads, city lights, and reflective thoughts, followed by eight songs that fit the atmosphere.&lt;/p&gt;

&lt;p&gt;The core experience is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Your Moment → Choose a Vibe → AI Curates → Discover Your Playlist&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The application is not intended to replace music streaming platforms. There is no music playback or Spotify integration.&lt;/p&gt;

&lt;p&gt;The creative part is the curation itself.&lt;/p&gt;

&lt;p&gt;A simple sentence from the user becomes a complete musical concept that they can explore on their preferred streaming platform.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgvjsttrrvxa4w5k4uif.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgvjsttrrvxa4w5k4uif.webp" alt=" " width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Experience
&lt;/h2&gt;

&lt;p&gt;For this project, I deliberately kept the scope focused.&lt;/p&gt;

&lt;p&gt;The application has one primary purpose: turn a feeling or situation into a themed playlist.&lt;/p&gt;

&lt;p&gt;Almost every part of the interface supports that single interaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;p&gt;The frontend was built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML5&lt;/li&gt;
&lt;li&gt;CSS3&lt;/li&gt;
&lt;li&gt;Vanilla JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I chose a lightweight frontend because the application did not require complex state management or a large component system.&lt;/p&gt;

&lt;p&gt;The visual design uses a cinematic black-and-gold theme with clean typography and simple interactive elements.&lt;/p&gt;

&lt;p&gt;The main interface contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A text input for describing the moment&lt;/li&gt;
&lt;li&gt;Vibe selection buttons&lt;/li&gt;
&lt;li&gt;A single Create Playlist action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the AI response arrives, the playlist is displayed in a dedicated result section containing the playlist name, description, vibe, and track list.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Behind the Playlist
&lt;/h2&gt;

&lt;p&gt;The AI layer is powered by the &lt;strong&gt;Groq API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The backend sends two important pieces of information to the model:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What the user is experiencing&lt;/li&gt;
&lt;li&gt;The vibe they selected&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I designed the prompt so the model behaves more like a music curator rather than simply returning random song names.&lt;/p&gt;

&lt;p&gt;The AI is instructed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a suitable playlist title&lt;/li&gt;
&lt;li&gt;Match the requested mood&lt;/li&gt;
&lt;li&gt;Generate exactly eight tracks&lt;/li&gt;
&lt;li&gt;Avoid duplicate songs&lt;/li&gt;
&lt;li&gt;Create a relevant playlist description&lt;/li&gt;
&lt;li&gt;Return a predictable JSON response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The request flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User describes a moment
          ↓
User selects a vibe
          ↓
Frontend sends request
          ↓
AWS Lambda processes it
          ↓
Groq analyzes the mood
          ↓
AI creates playlist JSON
          ↓
Frontend displays the playlist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Structured AI Output Matters
&lt;/h2&gt;

&lt;p&gt;One of the practical challenges was making sure the AI response could be reliably consumed by the frontend.&lt;/p&gt;

&lt;p&gt;AI-generated text can be unpredictable.&lt;/p&gt;

&lt;p&gt;Rather than asking the browser to interpret a large block of generated text, the backend requests structured JSON containing information such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
json&lt;br&gt;
{&lt;br&gt;
  "playlistName": "Midnight Miles",&lt;br&gt;
  "description": "A soundtrack for quiet roads and reflective thoughts.",&lt;br&gt;
  "vibe": "Nostalgic",&lt;br&gt;
  "tracks": [&lt;br&gt;
    {&lt;br&gt;
      "title": "Song Name",&lt;br&gt;
      "artist": "Artist Name"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;json&lt;/p&gt;

&lt;p&gt;This makes the response much easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate&lt;/li&gt;
&lt;li&gt;Process&lt;/li&gt;
&lt;li&gt;Display&lt;/li&gt;
&lt;li&gt;Handle when errors occur&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also keeps the frontend logic simple.&lt;/p&gt;

&lt;p&gt;This project reinforced an important lesson for me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A good AI application is not only about the prompt. The format and reliability of the response matter just as much.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Keeping the API Key Secure
&lt;/h2&gt;

&lt;p&gt;Another important consideration was API security.&lt;/p&gt;

&lt;p&gt;The Groq API key is never placed inside the frontend code.&lt;/p&gt;

&lt;p&gt;The browser does not communicate directly with Groq.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
Browser&lt;br&gt;
   ↓&lt;br&gt;
AWS API Gateway&lt;br&gt;
   ↓&lt;br&gt;
AWS Lambda&lt;br&gt;
   ↓&lt;br&gt;
Groq API&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;plaintext&lt;/p&gt;

&lt;p&gt;This keeps the AI API key away from client-side JavaScript.&lt;/p&gt;

&lt;p&gt;The serverless backend handles communication with the external AI service.&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS Architecture
&lt;/h1&gt;

&lt;p&gt;VibePlaylist AI uses a serverless AWS architecture.&lt;/p&gt;

&lt;p&gt;There is no traditional server that needs to remain running continuously.&lt;/p&gt;

&lt;p&gt;The main AWS services used are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt; for storing the static frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudFront&lt;/strong&gt; for global delivery and HTTPS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon API Gateway&lt;/strong&gt; for exposing the &lt;code&gt;POST /generate&lt;/code&gt; endpoint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda&lt;/strong&gt; for running the Node.js backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS IAM&lt;/strong&gt; for permissions and access control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CloudFormation&lt;/strong&gt; for defining and provisioning infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The complete architecture looks like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
                         USER&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                     CloudFront&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                      Amazon S3&lt;br&gt;
                  HTML / CSS / JavaScript&lt;br&gt;
                           │&lt;br&gt;
                           │&lt;br&gt;
                 Create Playlist Request&lt;br&gt;
                           ▼&lt;br&gt;
                    Amazon API Gateway&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                      AWS Lambda&lt;br&gt;
                       Node.js&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                        Groq API&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                      Playlist JSON&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                     User Interface&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure as Code
&lt;/h2&gt;

&lt;p&gt;One of my goals was to avoid manually building the AWS environment through the console.&lt;/p&gt;

&lt;p&gt;The infrastructure is described in an &lt;strong&gt;AWS CloudFormation YAML template&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS resources&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Service connections&lt;/li&gt;
&lt;li&gt;API configuration&lt;/li&gt;
&lt;li&gt;Stack outputs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the infrastructure part of the project itself.&lt;/p&gt;

&lt;p&gt;Instead of manually recreating the environment, it can be provisioned from the template.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing Multiple AWS Accounts
&lt;/h2&gt;

&lt;p&gt;For deployment, I used a dedicated AWS CLI profile named &lt;code&gt;account2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Because multiple AWS accounts were configured on my development machine, I added identity verification to the deployment process.&lt;/p&gt;

&lt;p&gt;Before creating or updating resources, the workflow checks the AWS identity being used.&lt;/p&gt;

&lt;p&gt;This helped prevent deploying infrastructure to the wrong AWS account.&lt;/p&gt;

&lt;p&gt;The deployment process follows this idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Verify Account → Deploy Infrastructure → Confirm Outputs&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is a small safeguard, but useful when working across multiple AWS accounts.&lt;/p&gt;

&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Building VibePlaylist AI gave me practical experience with the complete lifecycle of a small AI application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing Frontend and Backend APIs
&lt;/h2&gt;

&lt;p&gt;I learned more about designing communication between a frontend and a serverless backend, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sending JSON requests&lt;/li&gt;
&lt;li&gt;Handling asynchronous responses&lt;/li&gt;
&lt;li&gt;Validating generated data&lt;/li&gt;
&lt;li&gt;Managing API errors&lt;/li&gt;
&lt;li&gt;Displaying results cleanly&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Working with API Gateway and Lambda
&lt;/h2&gt;

&lt;p&gt;The project helped me better understand the serverless model.&lt;/p&gt;

&lt;p&gt;Instead of running a Node.js server continuously, the Lambda function is invoked when the application receives a request.&lt;/p&gt;

&lt;p&gt;The flow is event-driven:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Request arrives → Lambda runs → AI is called → Response is returned&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Infrastructure as Code with CloudFormation
&lt;/h2&gt;

&lt;p&gt;CloudFormation was another important learning experience.&lt;/p&gt;

&lt;p&gt;Defining the AWS environment as YAML changed how I think about deployment.&lt;/p&gt;

&lt;p&gt;Instead of treating the AWS Console as the place where the application is built, the infrastructure becomes part of the project.&lt;/p&gt;

&lt;p&gt;That means it can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Versioned&lt;/li&gt;
&lt;li&gt;Reproduced&lt;/li&gt;
&lt;li&gt;Updated&lt;/li&gt;
&lt;li&gt;Deployed consistently&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI Responses Need More Than a Good Prompt
&lt;/h2&gt;

&lt;p&gt;One of the biggest lessons from this project was that the prompt is only one part of an AI application.&lt;/p&gt;

&lt;p&gt;A complete application also needs to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Response structure&lt;/li&gt;
&lt;li&gt;Data validation&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;API security&lt;/li&gt;
&lt;li&gt;Frontend integration&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generating good output is important.&lt;/p&gt;

&lt;p&gt;Making that output reliable and useful inside a real application is equally important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping the Product Focused
&lt;/h2&gt;

&lt;p&gt;Most importantly, VibePlaylist AI reinforced the idea that a creative AI application does not need dozens of features.&lt;/p&gt;

&lt;p&gt;A simple idea, a focused interface, and one useful AI interaction can create an enjoyable experience.&lt;/p&gt;

&lt;p&gt;The entire application revolves around one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What does this moment sound like?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user provides the moment.&lt;/p&gt;

&lt;p&gt;AI creates the musical direction.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;VibePlaylist AI is a small experiment in turning everyday moments into musical ideas using generative AI.&lt;/p&gt;

&lt;p&gt;A late-night drive, a difficult day, a nostalgic memory, a study session, or any other feeling can become the starting point for a curated playlist.&lt;/p&gt;

&lt;p&gt;By combining Groq with AWS serverless services, I built a simple workflow:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Describe Your Moment → Select a Vibe → Generate a Playlist&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This project demonstrates how AI can take a simple piece of human input and transform it into a creative experience.&lt;/p&gt;

&lt;p&gt;It also gave me more hands-on experience with serverless architecture, API design, structured AI responses, CloudFormation, and secure backend integration.&lt;/p&gt;

&lt;p&gt;Sometimes, a creative AI application does not need to do everything.&lt;/p&gt;

&lt;p&gt;It only needs to do one thing well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try VibePlaylist AI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://d1u2qhbqs932dd.cloudfront.net/" rel="noopener noreferrer"&gt;https://d1u2qhbqs932dd.cloudfront.net/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>ReplyPilot AI: Generating Email Replies with AI | 10 Days of Building AI Agents on AWS | Day 7</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Fri, 28 Aug 2026 02:08:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/replypilot-ai-generating-email-replies-with-ai-10-days-of-building-ai-agents-on-aws-day-7-2080</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/replypilot-ai-generating-email-replies-with-ai-10-days-of-building-ai-agents-on-aws-day-7-2080</guid>
      <description>&lt;h3&gt;
  
  
  10 Days of Building AI Agents on AWS | Day 7
&lt;/h3&gt;

&lt;p&gt;One of the most repetitive tasks in my daily workflow is replying to emails.&lt;/p&gt;

&lt;p&gt;Whether it is acknowledging a meeting request, responding to a client, replying to a colleague, or sending a professional follow-up, I often spend more time thinking about how to phrase the message than actually writing it.&lt;/p&gt;

&lt;p&gt;To solve this problem, I built &lt;strong&gt;ReplyPilot AI&lt;/strong&gt;, an AI-powered email reply assistant that generates professional email responses within seconds.&lt;/p&gt;

&lt;p&gt;Instead of manually drafting every response, users simply:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste the email they received&lt;/li&gt;
&lt;li&gt;Choose the desired tone&lt;/li&gt;
&lt;li&gt;Generate a polished AI reply&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The application also keeps a history of generated replies, allowing users to revisit previous responses without generating the same reply again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Writing an email is usually not technically difficult.&lt;/p&gt;

&lt;p&gt;The difficult part is deciding how to write it.&lt;/p&gt;

&lt;p&gt;Questions such as these can slow down even a simple reply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How formal should I be?&lt;/li&gt;
&lt;li&gt;Should I sound friendly or strictly professional?&lt;/li&gt;
&lt;li&gt;How do I politely decline?&lt;/li&gt;
&lt;li&gt;How should I follow up?&lt;/li&gt;
&lt;li&gt;How can I acknowledge a request professionally?&lt;/li&gt;
&lt;li&gt;What is the best way to phrase my response?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These small decisions happen repeatedly throughout the day.&lt;/p&gt;

&lt;p&gt;ReplyPilot AI was built to reduce that friction.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Received Email → Select Tone → AI Generates Reply&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of starting from a blank page, the user receives a polished draft within seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ReplyPilot AI Does
&lt;/h2&gt;

&lt;p&gt;ReplyPilot AI is a web application that uses generative AI to create professional email replies.&lt;/p&gt;

&lt;p&gt;Users provide the received email and select a desired writing style or tone.&lt;/p&gt;

&lt;p&gt;The AI analyzes the content and generates an appropriate response.&lt;/p&gt;

&lt;p&gt;The application allows users to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste a received email&lt;/li&gt;
&lt;li&gt;Choose a writing tone&lt;/li&gt;
&lt;li&gt;Generate a professional reply&lt;/li&gt;
&lt;li&gt;Copy the generated response&lt;/li&gt;
&lt;li&gt;Browse previously generated replies&lt;/li&gt;
&lt;li&gt;Revisit reply history&lt;/li&gt;
&lt;li&gt;View simple usage statistics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every generated reply is stored in &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This provides a searchable history and prevents users from losing previous AI-generated drafts.&lt;/p&gt;

&lt;p&gt;The application also tracks statistics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total replies generated&lt;/li&gt;
&lt;li&gt;Processed emails&lt;/li&gt;
&lt;li&gt;Application usage&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I wanted the application to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight&lt;/li&gt;
&lt;li&gt;Serverless&lt;/li&gt;
&lt;li&gt;Responsive&lt;/li&gt;
&lt;li&gt;Scalable&lt;/li&gt;
&lt;li&gt;Inexpensive to operate&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;p&gt;The frontend was developed using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interface allows users to generate replies, browse previous replies, and view application statistics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;p&gt;The backend is built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;serverless-http&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fww2no1193p6feo6jrp0h.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fww2no1193p6feo6jrp0h.webp" alt=" " width="800" height="707"&gt;&lt;/a&gt;&lt;br&gt;
Express runs inside AWS Lambda using &lt;code&gt;serverless-http&lt;/code&gt;, allowing the API to operate in a serverless environment.&lt;/p&gt;

&lt;p&gt;The frontend communicates with the backend through &lt;strong&gt;Amazon API Gateway&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  AI Generation
&lt;/h3&gt;

&lt;p&gt;For AI inference, I integrated the &lt;strong&gt;Groq API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Lambda backend sends the received email and selected tone to the AI.&lt;/p&gt;

&lt;p&gt;Groq generates a professional response based on that context.&lt;/p&gt;

&lt;p&gt;The workflow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Received Email
       ↓
Choose Tone
       ↓
React Frontend
       ↓
Amazon API Gateway
       ↓
AWS Lambda
Express.js Backend
       ↓
Groq API
       ↓
Generated Reply
       ↓
Amazon DynamoDB
       ↓
Reply History
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  AWS Architecture
&lt;/h2&gt;

&lt;p&gt;ReplyPilot AI uses a fully serverless AWS architecture.&lt;/p&gt;

&lt;p&gt;The main AWS services used are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AWS Amplify&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon API Gateway&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS CloudFormation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS SAM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon CloudWatch&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The overall architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
        │
        ▼
AWS Amplify
React Frontend
        │
        ▼
Amazon API Gateway
        │
        ▼
AWS Lambda
Express API
        │
   ┌────┴────┐
   ▼         ▼
Groq API   Amazon DynamoDB
   │         │
   └────┬────┘
        ▼
Generated Reply and History
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the Workflow Works
&lt;/h2&gt;

&lt;p&gt;The complete workflow follows these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user opens ReplyPilot AI on AWS Amplify.&lt;/li&gt;
&lt;li&gt;The user pastes the email they received.&lt;/li&gt;
&lt;li&gt;The user selects the desired tone.&lt;/li&gt;
&lt;li&gt;The React frontend sends the request to Amazon API Gateway.&lt;/li&gt;
&lt;li&gt;API Gateway invokes AWS Lambda.&lt;/li&gt;
&lt;li&gt;Lambda processes the request through the Express backend.&lt;/li&gt;
&lt;li&gt;Lambda sends the prompt to the Groq API.&lt;/li&gt;
&lt;li&gt;Groq generates a professional email reply.&lt;/li&gt;
&lt;li&gt;The generated reply is returned to the frontend.&lt;/li&gt;
&lt;li&gt;The reply is also stored in Amazon DynamoDB.&lt;/li&gt;
&lt;li&gt;The user can later access the reply from the history section.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq235iivikv35ecyv2n8u.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq235iivikv35ecyv2n8u.webp" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This creates a simple but useful workflow:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Email → AI → Professional Reply → Stored History&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Infrastructure as Code
&lt;/h2&gt;

&lt;p&gt;The backend infrastructure is managed using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS SAM&lt;/li&gt;
&lt;li&gt;AWS CloudFormation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of manually creating resources through the AWS Console, the infrastructure is defined as code.&lt;/p&gt;

&lt;p&gt;This makes the deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repeatable&lt;/li&gt;
&lt;li&gt;Easier to reproduce&lt;/li&gt;
&lt;li&gt;Easier to update&lt;/li&gt;
&lt;li&gt;More consistent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The complete serverless backend can be recreated through the deployment workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges I Faced
&lt;/h2&gt;

&lt;p&gt;Building ReplyPilot AI involved several deployment and infrastructure challenges.&lt;/p&gt;

&lt;h3&gt;
  
  
  CloudFormation Parameter Validation
&lt;/h3&gt;

&lt;p&gt;One of the early issues involved CloudFormation parameter validation.&lt;/p&gt;

&lt;p&gt;Infrastructure templates must match expected configurations precisely, and incorrect parameter definitions can prevent deployments before the application even starts.&lt;/p&gt;

&lt;p&gt;This helped me better understand the importance of validating infrastructure configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lambda Configuration Problems
&lt;/h3&gt;

&lt;p&gt;I also encountered Lambda configuration issues during deployment.&lt;/p&gt;

&lt;p&gt;These required reviewing the function settings and ensuring the deployed environment matched what the application expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Gateway Routing Issues
&lt;/h3&gt;

&lt;p&gt;Another challenge involved API Gateway routing.&lt;/p&gt;

&lt;p&gt;The frontend and backend both worked individually, but requests needed to be correctly routed from API Gateway to the Express application running inside Lambda.&lt;/p&gt;

&lt;p&gt;Debugging this helped me understand how API Gateway and Lambda integrate in a serverless API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Out of Memory Error
&lt;/h3&gt;

&lt;p&gt;After deployment, I encountered an out-of-memory error.&lt;/p&gt;

&lt;p&gt;The application required adjustments to its Lambda memory configuration during testing.&lt;/p&gt;

&lt;p&gt;Using logs and deployment tools, I identified the issue, updated the configuration, and redeployed successfully.&lt;/p&gt;

&lt;p&gt;This was an important reminder that serverless applications still require resource planning.&lt;/p&gt;

&lt;p&gt;Even though there are no servers to manage, memory and runtime configuration still directly affect application performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging with CloudWatch
&lt;/h2&gt;

&lt;p&gt;One of the most valuable tools during development was &lt;strong&gt;Amazon CloudWatch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CloudWatch logs helped me diagnose Lambda runtime issues and understand what was happening after deployment.&lt;/p&gt;

&lt;p&gt;When something worked locally but failed in the cloud, logs provided the information needed to investigate the actual serverless execution environment.&lt;/p&gt;

&lt;p&gt;The development workflow involved:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Deploy → Test → Check CloudWatch Logs → Identify Issue → Update Configuration → Redeploy&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This gave me practical experience debugging production-style serverless applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building ReplyPilot AI gave me hands-on experience with several AWS services and modern application development concepts.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Serverless Development
&lt;/h3&gt;

&lt;p&gt;I gained practical experience using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Amazon API Gateway&lt;/li&gt;
&lt;li&gt;Amazon DynamoDB&lt;/li&gt;
&lt;li&gt;AWS Amplify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These services work together to create a complete application without managing traditional servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Infrastructure as Code
&lt;/h3&gt;

&lt;p&gt;Using AWS SAM and CloudFormation helped me understand the value of defining infrastructure as code.&lt;/p&gt;

&lt;p&gt;Resources can be deployed consistently instead of manually recreating them through the AWS Console.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting Frontend and Serverless Backend
&lt;/h3&gt;

&lt;p&gt;I learned more about connecting a modern React application with a serverless backend.&lt;/p&gt;

&lt;p&gt;The flow between Amplify, API Gateway, Lambda, and DynamoDB became a complete end-to-end application architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Debugging Serverless Applications
&lt;/h3&gt;

&lt;p&gt;CloudWatch logs, AWS SAM, and repeated testing helped me understand how to troubleshoot problems in deployed serverless environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building Around Everyday Problems
&lt;/h3&gt;

&lt;p&gt;Most importantly, this project reinforced a simple lesson:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A small everyday annoyance can become a genuinely useful application.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Writing professional email replies is something many people do every day.&lt;/p&gt;

&lt;p&gt;Reducing the time spent drafting them can make a small but meaningful difference.&lt;/p&gt;

&lt;p&gt;The application demonstrates how:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI can automate repetitive communication tasks&lt;/li&gt;
&lt;li&gt;Serverless architecture can keep infrastructure simple&lt;/li&gt;
&lt;li&gt;DynamoDB can provide persistent reply history&lt;/li&gt;
&lt;li&gt;AWS SAM and CloudFormation can make deployments repeatable&lt;/li&gt;
&lt;li&gt;CloudWatch can help debug real deployment issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core workflow remains simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Received Email → Choose Tone → AI Generates Reply → Save to History&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes the most useful AI applications are not the most complicated ones.&lt;/p&gt;

&lt;p&gt;They simply remove friction from tasks we already do every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ReplyPilot AI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://staging.d50wiy1iuq3mr.amplifyapp.com/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Open ReplyPilot AI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building DevDigest AI: An Always-On Agent That Prepares Your Daily Developer Briefing | Day 6</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Wed, 26 Aug 2026 01:57:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/building-devdigest-ai-an-always-on-agent-that-prepares-your-daily-developer-briefing-day-6-2hn7</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/building-devdigest-ai-an-always-on-agent-that-prepares-your-daily-developer-briefing-day-6-2hn7</guid>
      <description>&lt;h3&gt;
  
  
  10 Days of Building AI Agents on AWS | Day 6
&lt;/h3&gt;

&lt;p&gt;Developers live in a world of constant information.&lt;/p&gt;

&lt;p&gt;Every day brings new AI models, AWS announcements, cloud updates, open-source releases, developer tools, frameworks, GitHub projects, and learning opportunities.&lt;/p&gt;

&lt;p&gt;Access to information has never been easier.&lt;/p&gt;

&lt;p&gt;Keeping up with everything, however, has become increasingly difficult.&lt;/p&gt;

&lt;p&gt;That is the problem I wanted to solve with &lt;strong&gt;DevDigest AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;DevDigest AI is an &lt;strong&gt;always-on AI agent that prepares a daily developer briefing before you even open the app&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of manually visiting multiple websites, checking feeds, and deciding which updates actually matter, the agent works in the background and prepares a concise digest automatically.&lt;/p&gt;

&lt;p&gt;The vision behind the project is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The best tool is one that does useful work before you ask it to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Vision: Your Developer World, Summarized Every Day
&lt;/h2&gt;

&lt;p&gt;DevDigest AI collects fresh information from reliable developer-focused sources and transforms it into a short, readable daily briefing.&lt;/p&gt;

&lt;p&gt;The digest can include important updates from areas such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI&lt;/li&gt;
&lt;li&gt;AWS and cloud computing&lt;/li&gt;
&lt;li&gt;Open source&lt;/li&gt;
&lt;li&gt;Developer tools&lt;/li&gt;
&lt;li&gt;Frameworks and technologies&lt;/li&gt;
&lt;li&gt;Relevant opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbk4c94gtx97tzc8up0fk.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbk4c94gtx97tzc8up0fk.PNG" alt=" " width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It also includes a &lt;strong&gt;Learn Today&lt;/strong&gt; section that highlights one useful technical concept or topic.&lt;/p&gt;

&lt;p&gt;The goal is not to collect as much information as possible.&lt;/p&gt;

&lt;p&gt;The goal is to identify &lt;strong&gt;what matters&lt;/strong&gt; and make it easier for developers to stay informed without manually searching through dozens of sources.&lt;/p&gt;

&lt;p&gt;Most importantly, the user does not need to press a button to start the process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu6s0b7bjbe360vnyif93.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu6s0b7bjbe360vnyif93.PNG" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every day, the autonomous workflow runs in the background:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EventBridge wakes the agent
        ↓
The agent collects fresh information
        ↓
Duplicate and low-value items are filtered
        ↓
Recent digests are checked
        ↓
Groq analyzes and summarizes the information
        ↓
The AI response is validated
        ↓
The completed digest is stored
        ↓
The user returns later
        ↓
Today's briefing is already waiting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is what makes DevDigest AI an &lt;strong&gt;always-on AI agent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It independently gathers information, remembers what it has previously reported, creates a new briefing, and prepares the result before the user returns.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built DevDigest AI
&lt;/h2&gt;

&lt;p&gt;I intentionally kept the architecture simple and serverless.&lt;/p&gt;

&lt;p&gt;For the frontend, I chose &lt;strong&gt;plain HTML, CSS, and JavaScript&lt;/strong&gt; instead of introducing a large frontend framework.&lt;/p&gt;

&lt;p&gt;The goal was to focus on the autonomous agent rather than add unnecessary complexity.&lt;/p&gt;

&lt;p&gt;The frontend retrieves the latest digest from an API and presents it in a clean, developer-focused interface.&lt;/p&gt;

&lt;p&gt;For the backend, I used &lt;strong&gt;Node.js and AWS Lambda&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The core daily agent is triggered automatically on a schedule.&lt;/p&gt;

&lt;p&gt;It performs several tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Collects information from reliable sources&lt;/li&gt;
&lt;li&gt;Removes duplicate items&lt;/li&gt;
&lt;li&gt;Filters low-value information&lt;/li&gt;
&lt;li&gt;Checks previous digests&lt;/li&gt;
&lt;li&gt;Selects relevant fresh updates&lt;/li&gt;
&lt;li&gt;Sends the selected information to Groq&lt;/li&gt;
&lt;li&gt;Validates the AI-generated response&lt;/li&gt;
&lt;li&gt;Stores the completed digest&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Keeping the AI Grounded in Real Sources
&lt;/h2&gt;

&lt;p&gt;One of my key decisions was to avoid giving the AI unrestricted freedom to invent information.&lt;/p&gt;

&lt;p&gt;DevDigest AI provides Groq with collected source material and instructs it to summarize only that information.&lt;/p&gt;

&lt;p&gt;The generated response is then validated before it is stored.&lt;/p&gt;

&lt;p&gt;This includes checking that generated source URLs correspond to actual collected sources.&lt;/p&gt;

&lt;p&gt;The goal is to reduce the risk of the AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inventing news&lt;/li&gt;
&lt;li&gt;Creating fake announcements&lt;/li&gt;
&lt;li&gt;Adding events that did not happen&lt;/li&gt;
&lt;li&gt;Generating incorrect source links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI acts as an analysis and summarization layer rather than an unrestricted source of information.&lt;/p&gt;

&lt;p&gt;The workflow looks like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Collected Sources → Filtered Information → AI Analysis → Validation → Daily Digest&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Lightweight Agent Memory with DynamoDB
&lt;/h2&gt;

&lt;p&gt;DevDigest AI also has a lightweight form of memory.&lt;/p&gt;

&lt;p&gt;Before generating a new briefing, the system checks recent digests stored in &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This gives the agent context about what it has already reported.&lt;/p&gt;

&lt;p&gt;For example, if an important AI announcement was already included in yesterday's digest, the agent can avoid repeatedly presenting the same update unless there is meaningful new information.&lt;/p&gt;

&lt;p&gt;This helps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce repetition&lt;/li&gt;
&lt;li&gt;Provide more variety&lt;/li&gt;
&lt;li&gt;Prioritize genuinely new information&lt;/li&gt;
&lt;li&gt;Give the agent context about previous outputs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I deliberately did not use a vector database or a complex agent framework.&lt;/p&gt;

&lt;p&gt;For this project's requirements, recent digest history in DynamoDB provides a simpler and more appropriate memory mechanism.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not every AI agent needs complex memory. Sometimes recent structured history is enough.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  AWS Services and Architecture
&lt;/h1&gt;

&lt;p&gt;I used &lt;strong&gt;AWS SAM (Serverless Application Model)&lt;/strong&gt; to define and deploy the infrastructure as code.&lt;/p&gt;

&lt;p&gt;The main services used are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS SAM&lt;/strong&gt; for serverless infrastructure and deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon EventBridge&lt;/strong&gt; to automatically wake the agent every day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda&lt;/strong&gt; to run the daily agent and backend API logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon DynamoDB&lt;/strong&gt; to store daily digests and provide lightweight memory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Secrets Manager&lt;/strong&gt; to securely store the Groq API key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon API Gateway&lt;/strong&gt; to expose backend endpoints to the frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt; to host the static HTML, CSS, and JavaScript frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudWatch&lt;/strong&gt; for logs and monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture follows this flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EventBridge Schedule
        ↓
DevDigest Daily Agent
AWS Lambda
        ↓
Reliable RSS Feeds and APIs
        ↓
Filter and Deduplicate Information
        ↓
Check Recent Digests
Amazon DynamoDB
        ↓
Retrieve Groq API Key
AWS Secrets Manager
        ↓
Groq AI Analysis and Summarization
        ↓
Validate AI Output
        ↓
Store Daily Digest
Amazon DynamoDB
        ↓
API Gateway + Lambda
        ↓
HTML, CSS and JavaScript Frontend
Amazon S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Infrastructure as Code with AWS SAM
&lt;/h2&gt;

&lt;p&gt;I used AWS SAM because I wanted the infrastructure to be reproducible.&lt;/p&gt;

&lt;p&gt;Instead of manually creating resources through the AWS Console, the infrastructure is defined and deployed as code.&lt;/p&gt;

&lt;p&gt;The project includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serverless infrastructure definitions&lt;/li&gt;
&lt;li&gt;Automated deployment scripts&lt;/li&gt;
&lt;li&gt;Resource configuration&lt;/li&gt;
&lt;li&gt;IAM permissions&lt;/li&gt;
&lt;li&gt;API configuration&lt;/li&gt;
&lt;li&gt;Account verification before deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deployment workflow verifies the currently authenticated AWS account before making infrastructure changes.&lt;/p&gt;

&lt;p&gt;This helps ensure that the project is deployed only to the intended AWS account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges and Key Decisions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Automation vs Information Quality
&lt;/h3&gt;

&lt;p&gt;One of the biggest challenges was balancing automation with information quality.&lt;/p&gt;

&lt;p&gt;An autonomous agent should not simply collect everything it finds.&lt;/p&gt;

&lt;p&gt;That would recreate the same information overload the project is designed to solve.&lt;/p&gt;

&lt;p&gt;To address this, the workflow focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collecting a limited number of reliable items&lt;/li&gt;
&lt;li&gt;Removing duplicates&lt;/li&gt;
&lt;li&gt;Preferring newer information&lt;/li&gt;
&lt;li&gt;Filtering low-value items&lt;/li&gt;
&lt;li&gt;Using recent digests as memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not more information.&lt;/p&gt;

&lt;p&gt;The goal is better information.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preventing AI Hallucinations
&lt;/h3&gt;

&lt;p&gt;Another important challenge was preventing the AI from inventing information.&lt;/p&gt;

&lt;p&gt;The agent must not create fake news, events, announcements, or source links.&lt;/p&gt;

&lt;p&gt;For this reason:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Information is collected first.&lt;/li&gt;
&lt;li&gt;The AI receives the collected source material.&lt;/li&gt;
&lt;li&gt;The AI is instructed to summarize only that material.&lt;/li&gt;
&lt;li&gt;The generated response is validated.&lt;/li&gt;
&lt;li&gt;Source URLs are checked against the collected source data.&lt;/li&gt;
&lt;li&gt;Only validated output is stored.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This makes the system more reliable than simply asking an AI model to tell the user what happened today.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keeping the Architecture Affordable
&lt;/h3&gt;

&lt;p&gt;I also wanted to keep the architecture simple and affordable.&lt;/p&gt;

&lt;p&gt;Serverless services allow the application to run without maintaining an always-running server.&lt;/p&gt;

&lt;p&gt;The daily workload is event-driven.&lt;/p&gt;

&lt;p&gt;The infrastructure performs work when the agent is scheduled to run rather than continuously consuming resources.&lt;/p&gt;

&lt;p&gt;This makes serverless architecture a good fit for an autonomous agent that performs a scheduled daily task.&lt;/p&gt;

&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Building DevDigest AI taught me several important lessons about AWS and autonomous systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Event-Driven Serverless Architecture
&lt;/h2&gt;

&lt;p&gt;I gained hands-on experience with an architecture where &lt;strong&gt;Amazon EventBridge&lt;/strong&gt; triggers work automatically without user interaction.&lt;/p&gt;

&lt;p&gt;A scheduled event can completely change how an AI application works.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User opens app → User asks → AI responds&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The workflow becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Schedule → Agent wakes up → Information is collected → AI analyzes → Result is stored → User discovers it later&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Infrastructure as Code
&lt;/h2&gt;

&lt;p&gt;I learned more about using AWS SAM and infrastructure as code to define and deploy cloud resources consistently.&lt;/p&gt;

&lt;p&gt;Instead of treating infrastructure as a collection of manually created services, I could define the system as code and reproduce the deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple Agent Memory
&lt;/h2&gt;

&lt;p&gt;Another important lesson was that an agent does not always need a complicated framework or vector database.&lt;/p&gt;

&lt;p&gt;For DevDigest AI, DynamoDB provides memory by allowing the system to review recent outputs before creating something new.&lt;/p&gt;

&lt;p&gt;The memory is simple, but it directly supports the agent's purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validating AI Output
&lt;/h2&gt;

&lt;p&gt;AI is powerful for summarization and analysis, but external information should be handled carefully.&lt;/p&gt;

&lt;p&gt;Restricting the AI to collected source material and validating its final response makes the system more reliable.&lt;/p&gt;

&lt;p&gt;This was one of the most important design decisions in the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thinking Beyond Reactive AI
&lt;/h2&gt;

&lt;p&gt;Finally, this project helped me think differently about AI applications.&lt;/p&gt;

&lt;p&gt;Many AI applications are reactive.&lt;/p&gt;

&lt;p&gt;The user opens an app and asks the AI to do something.&lt;/p&gt;

&lt;p&gt;But an always-on agent can work proactively.&lt;/p&gt;

&lt;p&gt;It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wake up automatically&lt;/li&gt;
&lt;li&gt;Collect information&lt;/li&gt;
&lt;li&gt;Review its previous outputs&lt;/li&gt;
&lt;li&gt;Analyze new data&lt;/li&gt;
&lt;li&gt;Create something useful&lt;/li&gt;
&lt;li&gt;Prepare the result before the user asks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That changes the relationship between the user and the application.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;DevDigest AI is my experiment in building an autonomous developer intelligence agent.&lt;/p&gt;

&lt;p&gt;Every day, it wakes up automatically, remembers what it has already reported, collects fresh information, filters duplicates, analyzes relevant updates, validates its output, and prepares a new briefing.&lt;/p&gt;

&lt;p&gt;The user simply returns to the application.&lt;/p&gt;

&lt;p&gt;Today's digest is already waiting.&lt;/p&gt;

&lt;p&gt;The core idea behind the project is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI applications do not always need to wait for the user to start the conversation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes, the most useful agent is one that does the work while you are away.&lt;/p&gt;

&lt;h2&gt;
  
  
  DevDigest AI in One Sentence
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DevDigest AI is an always-on AI agent that wakes up every day, remembers recent developer updates, collects and analyzes fresh information, and prepares a new developer briefing before you even open the application.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try DevDigest AI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://devdigest-ai-frontendbucket-algc5lxb9l2x.s3-website-us-east-1.amazonaws.com/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Open DevDigest AI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building Meeting2Tasks: Turning Meeting Conversations into Actionable Tasks with AI and AWS | 10 Days of Building AI Agents on AWS | Day 5</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Mon, 24 Aug 2026 01:40:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/building-meeting2tasks-turning-meeting-conversations-into-actionable-tasks-with-ai-and-aws-10-2m08</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/building-meeting2tasks-turning-meeting-conversations-into-actionable-tasks-with-ai-and-aws-10-2m08</guid>
      <description>&lt;h3&gt;
  
  
  10 Days of Building AI Agents on AWS | Day 5
&lt;/h3&gt;

&lt;p&gt;Meetings are essential for collaboration, but they often create another problem: someone has to spend time reviewing notes, writing summaries, extracting action items, and documenting key decisions.&lt;/p&gt;

&lt;p&gt;Whether it is a team stand-up, client discussion, or project planning session, this repetitive work can sometimes take almost as long as the meeting itself.&lt;/p&gt;

&lt;p&gt;To solve this problem, I built &lt;strong&gt;Meeting2Tasks&lt;/strong&gt;, an AI-powered web application that automatically transforms meeting transcripts into structured summaries, actionable tasks, key decisions, risks, and unanswered questions.&lt;/p&gt;

&lt;p&gt;Instead of manually organizing notes after every meeting, users simply paste their meeting transcript, and the application does the rest in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;One of the most repetitive tasks in project management is documenting meetings.&lt;/p&gt;

&lt;p&gt;After almost every meeting, someone needs to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read through lengthy meeting notes or transcripts&lt;/li&gt;
&lt;li&gt;Summarize the discussion&lt;/li&gt;
&lt;li&gt;Identify action items&lt;/li&gt;
&lt;li&gt;Record important decisions&lt;/li&gt;
&lt;li&gt;Highlight project risks&lt;/li&gt;
&lt;li&gt;Capture unanswered questions&lt;/li&gt;
&lt;li&gt;Save everything so it can be reviewed later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This process is repetitive, time-consuming, and can result in inconsistent documentation.&lt;/p&gt;

&lt;p&gt;I wanted to build a tool that could eliminate much of this manual work while producing structured and consistent results.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Meeting2Tasks Does
&lt;/h2&gt;

&lt;p&gt;Meeting2Tasks is a web application designed to automate meeting documentation.&lt;/p&gt;

&lt;p&gt;Users simply:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste a meeting transcript&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Analyze&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Let AI process the conversation&lt;/li&gt;
&lt;li&gt;Receive structured insights&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fygpz3d5s7g3hlcfra4nb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fygpz3d5s7g3hlcfra4nb.webp" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A concise meeting summary&lt;/li&gt;
&lt;li&gt;Actionable tasks&lt;/li&gt;
&lt;li&gt;Important decisions&lt;/li&gt;
&lt;li&gt;Identified risks&lt;/li&gt;
&lt;li&gt;Open questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzrr42d4etdvvfefh7k5i.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzrr42d4etdvvfefh7k5i.webp" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;br&gt;
Once the analysis is complete, the application stores the meeting and its generated insights in &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Users can revisit previous meetings whenever needed, while the dashboard provides statistics and access to meeting history.&lt;/p&gt;

&lt;p&gt;The result is a faster and more organized workflow for teams that regularly conduct meetings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdjwzsj0llf7efzwgxtrm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdjwzsj0llf7efzwgxtrm.webp" alt=" " width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The workflow is straightforward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Meeting Transcript → AI Analysis → Structured Insights → Stored Meeting History&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When a user submits a transcript, the application sends it through the backend for AI analysis.&lt;/p&gt;

&lt;p&gt;The Groq API processes the meeting content and returns structured results.&lt;/p&gt;

&lt;p&gt;These results are then stored in DynamoDB for future access.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User submits transcript
        │
        ▼
React + Vite Frontend
        │
        ▼
Amazon API Gateway
        │
        ▼
AWS Lambda
        │
   ┌────┴─────┐
   ▼          ▼
Groq API   DynamoDB
   │          │
   └────┬─────┘
        ▼
Structured Meeting Insights
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3qh6xv0kxviw14kdwvfq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3qh6xv0kxviw14kdwvfq.webp" alt=" " width="718" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The application consists of a React frontend and a serverless backend running on AWS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;p&gt;The frontend was developed using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This provides a fast and responsive interface for submitting transcripts, viewing results, and accessing previous meetings.&lt;/p&gt;

&lt;p&gt;The frontend communicates with a REST API exposed through Amazon API Gateway.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;p&gt;The backend uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Express.js&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Express.js application runs inside AWS Lambda, allowing the backend to scale automatically without managing traditional servers.&lt;/p&gt;

&lt;p&gt;When a user submits a transcript, the backend processes the request and sends the transcript to the Groq API.&lt;/p&gt;

&lt;p&gt;The AI then generates structured insights including summaries, tasks, decisions, risks, and open questions.&lt;/p&gt;

&lt;p&gt;The processed results are stored in Amazon DynamoDB.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;p&gt;The frontend is deployed using &lt;strong&gt;AWS Amplify&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The backend infrastructure is built and deployed using &lt;strong&gt;AWS SAM&lt;/strong&gt;, which helps define and manage the serverless application.&lt;/p&gt;

&lt;p&gt;Using this architecture allowed me to focus more on building the application instead of managing servers and infrastructure manually.&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS Services Used
&lt;/h1&gt;

&lt;h2&gt;
  
  
  AWS Amplify
&lt;/h2&gt;

&lt;p&gt;Used to host and deploy the React frontend.&lt;/p&gt;

&lt;p&gt;This makes the application publicly accessible and simplifies frontend deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon API Gateway
&lt;/h2&gt;

&lt;p&gt;Provides REST API endpoints connecting the frontend with the backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Lambda
&lt;/h2&gt;

&lt;p&gt;Runs the Express.js backend in a serverless environment.&lt;/p&gt;

&lt;p&gt;The backend executes when requests arrive without requiring an always-running server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon DynamoDB
&lt;/h2&gt;

&lt;p&gt;Stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Meeting records&lt;/li&gt;
&lt;li&gt;AI-generated summaries&lt;/li&gt;
&lt;li&gt;Action items&lt;/li&gt;
&lt;li&gt;Decisions&lt;/li&gt;
&lt;li&gt;Risks&lt;/li&gt;
&lt;li&gt;Open questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows users to revisit and manage previous meeting results.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS SAM
&lt;/h2&gt;

&lt;p&gt;AWS Serverless Application Model was used to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define the backend infrastructure&lt;/li&gt;
&lt;li&gt;Build the serverless application&lt;/li&gt;
&lt;li&gt;Test deployments&lt;/li&gt;
&lt;li&gt;Deploy Lambda and API resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Groq API
&lt;/h2&gt;

&lt;p&gt;Groq handles the AI analysis.&lt;/p&gt;

&lt;p&gt;It transforms raw meeting transcripts into structured and actionable insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;The complete architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         User
                           │
                           ▼
                 React + Vite Frontend
                           │
                           ▼
                     AWS Amplify
                           │
                           ▼
                  Amazon API Gateway
                           │
                           ▼
               AWS Lambda (Express.js)
                           │
                 ┌─────────┴─────────┐
                 ▼                   ▼
              Groq API         Amazon DynamoDB
                 │                   │
                 └─────────┬─────────┘
                           ▼
            AI Analysis and Stored Meetings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The workflow starts whenever a user submits a meeting transcript through the web application.&lt;/p&gt;

&lt;p&gt;The backend handles the AI request, processes the response, stores the relevant data, and returns structured results to the user.&lt;/p&gt;

&lt;h1&gt;
  
  
  Challenges I Faced
&lt;/h1&gt;

&lt;p&gt;Like most real-world projects, building Meeting2Tasks involved several technical challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running Express.js with AWS Lambda
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges was integrating an Express.js application with AWS Lambda while ensuring API Gateway correctly routed requests.&lt;/p&gt;

&lt;p&gt;This required understanding how a traditional web framework could work inside a serverless execution environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  DynamoDB Reserved Attribute Names
&lt;/h2&gt;

&lt;p&gt;I also encountered issues with DynamoDB because some attribute names conflicted with reserved words.&lt;/p&gt;

&lt;p&gt;This required modifying database queries and expressions to avoid those conflicts.&lt;/p&gt;

&lt;p&gt;It was a useful reminder that database design and query syntax need careful attention, even in serverless applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment to the Wrong AWS SAM Stack
&lt;/h2&gt;

&lt;p&gt;Another significant challenge involved deployment.&lt;/p&gt;

&lt;p&gt;During debugging, I discovered that updates were being deployed to the wrong AWS SAM stack.&lt;/p&gt;

&lt;p&gt;This caused new API routes not to appear in production, even though everything worked correctly locally.&lt;/p&gt;

&lt;p&gt;After identifying the stack configuration issue and deploying to the correct stack, all endpoints functioned as expected.&lt;/p&gt;

&lt;p&gt;This experience helped me better understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serverless deployments&lt;/li&gt;
&lt;li&gt;Stack configuration&lt;/li&gt;
&lt;li&gt;Production debugging&lt;/li&gt;
&lt;li&gt;The difference between local and deployed environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Building Meeting2Tasks gave me valuable hands-on experience with modern serverless application development.&lt;/p&gt;

&lt;p&gt;Some of the key things I learned include:&lt;/p&gt;

&lt;h3&gt;
  
  
  Building Serverless APIs
&lt;/h3&gt;

&lt;p&gt;How to build REST APIs using AWS Lambda and API Gateway without managing traditional servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS SAM Deployments
&lt;/h3&gt;

&lt;p&gt;How AWS SAM can simplify building, testing, and deploying serverless applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hosting React Applications
&lt;/h3&gt;

&lt;p&gt;How AWS Amplify can be used to deploy and host a modern React frontend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serverless Architecture Design
&lt;/h3&gt;

&lt;p&gt;How services such as API Gateway, Lambda, and DynamoDB can work together as a complete backend architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrating External AI
&lt;/h3&gt;

&lt;p&gt;How to connect an external AI service such as Groq with an AWS-based application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Debugging Deployments
&lt;/h3&gt;

&lt;p&gt;How configuration mistakes, stack selection, and deployment environments can cause production issues even when an application works locally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistent Data with DynamoDB
&lt;/h3&gt;

&lt;p&gt;How DynamoDB can store application data and make AI-generated results available for future use.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why This Matters
&lt;/h1&gt;

&lt;p&gt;The main idea behind Meeting2Tasks is simple.&lt;/p&gt;

&lt;p&gt;Teams should spend more time making decisions and completing important work, not repeatedly documenting conversations.&lt;/p&gt;

&lt;p&gt;AI can help automate the repetitive part.&lt;/p&gt;

&lt;p&gt;Instead of manually reviewing a long transcript, users can receive structured information within seconds.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Transcript → Summary → Tasks → Decisions → Risks → Questions&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This does not replace the meeting itself. It reduces the administrative work that follows it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Meeting2Tasks started with one simple problem: manually documenting meetings is repetitive and time-consuming.&lt;/p&gt;

&lt;p&gt;By combining AI with serverless AWS technologies, I built an application that transforms lengthy meeting transcripts into structured, actionable insights within seconds.&lt;/p&gt;

&lt;p&gt;The project demonstrates how AI can help eliminate repetitive work while allowing teams to focus more on making decisions instead of documenting them.&lt;/p&gt;

&lt;p&gt;It also showed me how services such as AWS Lambda, API Gateway, DynamoDB, Amplify, and SAM can work together with an external AI provider to build a scalable application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Source Code and Live Application
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/ABDULLAH408/Meeting2Tasks?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Meeting2Tasks on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Application:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://main.djzodsq2i1utx.amplifyapp.com/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Open Meeting2Tasks&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building VerseCraft AI: Turning Ideas and Emotions Into Original Poems | 10 Days of Building AI Agents on AWS | Day 4</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Fri, 21 Aug 2026 19:00:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/building-versecraft-ai-turning-ideas-and-emotions-into-original-poems-10-days-of-building-ai-4ban</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/building-versecraft-ai-turning-ideas-and-emotions-into-original-poems-10-days-of-building-ai-4ban</guid>
      <description>&lt;h1&gt;
  
  
  Building VerseCraft AI: Turning Ideas and Emotions Into Original Poems
&lt;/h1&gt;

&lt;h3&gt;
  
  
  10 Days of Building AI Agents on AWS | Day 4
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Tag:&lt;/strong&gt; &lt;code&gt;#creative-expression&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;VerseCraft AI transforms simple ideas, emotions, memories, and thoughts into original poems using generative AI.&lt;/p&gt;

&lt;p&gt;The project combines Groq with a serverless AWS architecture to explore how a focused creative experience can bring together AI, web development, and cloud services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vision and What the App Does
&lt;/h2&gt;

&lt;p&gt;What if you could turn a simple thought, feeling, memory, or idea into a poem in seconds?&lt;/p&gt;

&lt;p&gt;That was the idea behind &lt;strong&gt;VerseCraft AI&lt;/strong&gt;, a simple AI-powered creative writing application.&lt;/p&gt;

&lt;p&gt;Instead of asking users to write a complete poem themselves, VerseCraft lets them provide a simple idea and choose a mood. The application then transforms that input into an original poem.&lt;/p&gt;

&lt;p&gt;For example, a user can enter:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A lonely person watching the rain from a rooftop at midnight."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They can then select a mood such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Emotional&lt;/li&gt;
&lt;li&gt;Romantic&lt;/li&gt;
&lt;li&gt;Sad&lt;/li&gt;
&lt;li&gt;Inspirational&lt;/li&gt;
&lt;li&gt;Dark&lt;/li&gt;
&lt;li&gt;Peaceful&lt;/li&gt;
&lt;li&gt;Funny&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After clicking &lt;strong&gt;Generate Poem&lt;/strong&gt;, VerseCraft creates a title and an original poem inspired by the user's idea and selected mood.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0xpcw6z7jlv09rzo9q1t.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0xpcw6z7jlv09rzo9q1t.webp" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal was not to build a complicated AI platform.&lt;/p&gt;

&lt;p&gt;I wanted to create one focused creative experience that is simple to understand, enjoyable to use, and produces something people can share.&lt;/p&gt;

&lt;p&gt;The generated poem is displayed in a clean, artistic interface with options to copy the poem and generate another one.&lt;/p&gt;

&lt;p&gt;The application is designed to make creative writing feel accessible, even when someone does not know where to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I decided early that I wanted to keep the application focused and avoid unnecessary complexity.&lt;/p&gt;

&lt;p&gt;There are no:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User accounts&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Payment systems&lt;/li&gt;
&lt;li&gt;Complicated dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The entire application revolves around one simple interaction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Idea → Mood → AI → Poem&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The frontend was built using &lt;strong&gt;HTML, CSS, and JavaScript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I wanted the interface to feel more like a small digital writing studio than a traditional AI dashboard, so I focused on a minimal design with a black, white, and yellow or gold visual theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Generation with Groq
&lt;/h2&gt;

&lt;p&gt;For AI generation, I used the &lt;strong&gt;Groq API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The backend receives the user's idea and selected mood and sends them to the AI with a carefully designed prompt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F97o6nivltj008f4j6h2r.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F97o6nivltj008f4j6h2r.webp" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The prompt instructs the model to generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A suitable title&lt;/li&gt;
&lt;li&gt;An original poem&lt;/li&gt;
&lt;li&gt;A structured response that the frontend can display cleanly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The generation flow is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;User Idea → Selected Mood → Backend → Groq AI → Generated Poem&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One important decision was to keep the Groq API key completely away from the frontend.&lt;/p&gt;

&lt;p&gt;The browser communicates with the backend API instead of communicating directly with Groq.&lt;/p&gt;

&lt;p&gt;This prevents the API key from being exposed in client-side JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless Backend
&lt;/h2&gt;

&lt;p&gt;The backend uses &lt;strong&gt;Node.js running on AWS Lambda&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When a user requests a poem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user enters an idea and selects a mood.&lt;/li&gt;
&lt;li&gt;The frontend sends the request to API Gateway.&lt;/li&gt;
&lt;li&gt;API Gateway invokes AWS Lambda.&lt;/li&gt;
&lt;li&gt;Lambda processes the input.&lt;/li&gt;
&lt;li&gt;Lambda securely calls the Groq API.&lt;/li&gt;
&lt;li&gt;Groq generates the poem.&lt;/li&gt;
&lt;li&gt;Lambda returns the structured result.&lt;/li&gt;
&lt;li&gt;The frontend displays the poem.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  │
  ▼
Frontend
  │
  ▼
API Gateway
  │
  ▼
AWS Lambda
  │
  ▼
Groq API
  │
  ▼
Poem JSON
  │
  ▼
Frontend displays poem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  AWS Services Used and Architecture
&lt;/h2&gt;

&lt;p&gt;VerseCraft AI uses several AWS services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt; for storing and hosting the static frontend files, including HTML, CSS, and JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudFront&lt;/strong&gt; for delivering the frontend globally through a CDN and providing HTTPS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon API Gateway&lt;/strong&gt; for providing the public API endpoint used by the frontend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda&lt;/strong&gt; for running the serverless Node.js backend that communicates with Groq.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS IAM&lt;/strong&gt; for providing permissions and execution roles required by AWS services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CloudFormation&lt;/strong&gt; for defining and provisioning infrastructure using YAML.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The overall architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         USER
                           │
                           ▼
                    ┌──────────────┐
                    │  CloudFront  │
                    │ HTTPS / CDN  │
                    └──────┬───────┘
                           │
                           ▼
                    ┌──────────────┐
                    │      S3      │
                    │ HTML/CSS/JS  │
                    └──────────────┘

       User clicks "Generate Poem"
                           │
                           ▼
                    ┌──────────────┐
                    │ API Gateway  │
                    │POST /generate│
                    └──────┬───────┘
                           │
                           ▼
                    ┌──────────────┐
                    │    Lambda    │
                    │   Node.js    │
                    └──────┬───────┘
                           │
                           ▼
                    ┌──────────────┐
                    │   Groq API   │
                    │ Generative AI│
                    └──────┬───────┘
                           │
                           ▼
                       POEM JSON
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CloudFormation ties the AWS infrastructure together and makes deployment reproducible.&lt;/p&gt;

&lt;p&gt;Instead of manually creating every AWS resource, the infrastructure can be provisioned from a YAML template.&lt;/p&gt;

&lt;p&gt;This serverless architecture also means there is no always-running application server to maintain.&lt;/p&gt;

&lt;p&gt;The backend runs when requests arrive, making the architecture a good fit for a focused creative application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Kept It Simple
&lt;/h2&gt;

&lt;p&gt;A key decision behind VerseCraft AI was to focus on one experience and do it well.&lt;/p&gt;

&lt;p&gt;It would have been easy to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User profiles&lt;/li&gt;
&lt;li&gt;Saved poem collections&lt;/li&gt;
&lt;li&gt;Social features&lt;/li&gt;
&lt;li&gt;Multiple dashboards&lt;/li&gt;
&lt;li&gt;Complex AI settings&lt;/li&gt;
&lt;li&gt;Payment systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But none of those were necessary for the core idea.&lt;/p&gt;

&lt;p&gt;The most important workflow is simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A person has an idea. AI helps turn that idea into something creative.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Keeping the application focused allowed me to concentrate on the experience and the underlying serverless architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building VerseCraft AI gave me the opportunity to combine several areas I had been learning separately into one complete application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting AI to a Frontend
&lt;/h3&gt;

&lt;p&gt;It is easy to call an AI API from a simple script.&lt;/p&gt;

&lt;p&gt;Building the complete flow is different.&lt;/p&gt;

&lt;p&gt;I had to think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser requests&lt;/li&gt;
&lt;li&gt;API design&lt;/li&gt;
&lt;li&gt;Request formats&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Structured AI responses&lt;/li&gt;
&lt;li&gt;Backend security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The complete flow became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Browser → API Gateway → Lambda → Groq → Lambda → Browser&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Serverless Backend Development
&lt;/h3&gt;

&lt;p&gt;I learned more about how &lt;strong&gt;AWS Lambda and API Gateway&lt;/strong&gt; can create a backend without maintaining a traditional server.&lt;/p&gt;

&lt;p&gt;The application only runs backend code when a request arrives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Infrastructure as Code
&lt;/h3&gt;

&lt;p&gt;Using CloudFormation made me think about AWS infrastructure as a complete system rather than a collection of resources manually created through the AWS Console.&lt;/p&gt;

&lt;p&gt;Defining resources, permissions, dependencies, and outputs in YAML makes deployments easier to reproduce.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple AI Experiences Can Still Be Useful
&lt;/h3&gt;

&lt;p&gt;One of my biggest takeaways was that a creative AI application does not need to be complicated to be useful.&lt;/p&gt;

&lt;p&gt;The most important part of VerseCraft AI is the experience:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give someone a blank box, let them express an idea, and turn that idea into something creative.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;VerseCraft AI is a small experiment in combining creative expression, generative AI, and serverless AWS infrastructure.&lt;/p&gt;

&lt;p&gt;The core idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Idea → Mood → AI → Poem&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes, a focused application can create a better experience than a feature-heavy platform.&lt;/p&gt;

&lt;p&gt;VerseCraft AI gives users a simple starting point. They bring an idea, feeling, memory, or even just one sentence, and the AI helps transform it into something creative.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try VerseCraft AI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://d3ahx0v89bhhzc.cloudfront.net/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Open VerseCraft AI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have an idea, a feeling, a memory, or simply a sentence in your head, give it to VerseCraft AI and see where it takes you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building StoryForge: An Always-On AI Agent That Creates a New Story | 10 Days of Building AI Agents on AWS | Day 3</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Fri, 21 Aug 2026 01:26:05 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/weekend-creative-agent-challenge-storyforge-3pcd</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/weekend-creative-agent-challenge-storyforge-3pcd</guid>
      <description>&lt;h1&gt;
  
  
  Building StoryForge: An Always-On AI Agent That Creates a New Story Every Day
&lt;/h1&gt;

&lt;h3&gt;
  
  
  10 Days of Building AI Agents on AWS | Day 3
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Tag:&lt;/strong&gt; &lt;code&gt;#agents&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;What if your creative app didn't wait for you to open it?&lt;/p&gt;

&lt;p&gt;That was the idea behind &lt;strong&gt;StoryForge&lt;/strong&gt;, an always-on AI storytelling agent that creates a brand-new story every day before you even visit the application.&lt;/p&gt;

&lt;p&gt;Traditional AI writing tools are reactive. You open a website, enter a prompt, choose some options, and ask the AI to generate something.&lt;/p&gt;

&lt;p&gt;StoryForge takes a different approach.&lt;/p&gt;

&lt;p&gt;It works in the background as an autonomous creative agent.&lt;/p&gt;

&lt;p&gt;Every day, it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wakes up automatically&lt;/li&gt;
&lt;li&gt;Remembers what it has created recently&lt;/li&gt;
&lt;li&gt;Chooses a new creative direction&lt;/li&gt;
&lt;li&gt;Generates a fresh story&lt;/li&gt;
&lt;li&gt;Validates the result&lt;/li&gt;
&lt;li&gt;Saves it for the user&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So when the user comes back, a brand-new story is already waiting.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The user leaves → the agent wakes up automatically → it remembers recent stories → it creates something new → the user returns to discover it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Vision
&lt;/h2&gt;

&lt;p&gt;I wanted to build something simple while demonstrating an important idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The best creative tool does not always need to wait for instructions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;StoryForge is built around the concept of passive creativity.&lt;/p&gt;

&lt;p&gt;Instead of opening an application and asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should I write today?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user can simply return and discover what the AI agent has already created.&lt;/p&gt;

&lt;p&gt;The goal wasn't to build a complicated multi-agent system or a massive AI platform.&lt;/p&gt;

&lt;p&gt;I wanted to demonstrate one clear always-on agent workflow.&lt;/p&gt;

&lt;p&gt;The agent should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Act without waiting for the user&lt;/li&gt;
&lt;li&gt;Run automatically&lt;/li&gt;
&lt;li&gt;Remember recent context&lt;/li&gt;
&lt;li&gt;Use that context to influence its next action&lt;/li&gt;
&lt;li&gt;Create something new&lt;/li&gt;
&lt;li&gt;Have its work ready before the user returns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwbuq6qpcyg89rq81qvkf.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwbuq6qpcyg89rq81qvkf.PNG" alt=" " width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lightweight Agent Memory
&lt;/h2&gt;

&lt;p&gt;One challenge with generating stories automatically is repetition.&lt;/p&gt;

&lt;p&gt;If the AI receives the same instructions every day, it may repeatedly generate similar genres, themes, settings, or story structures.&lt;/p&gt;

&lt;p&gt;To reduce this, StoryForge has a lightweight form of memory.&lt;/p&gt;

&lt;p&gt;Before generating a new story, the agent retrieves recent stories from its database, including information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Genre&lt;/li&gt;
&lt;li&gt;Theme&lt;/li&gt;
&lt;li&gt;Setting&lt;/li&gt;
&lt;li&gt;Summary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This recent creative history is provided to the AI as context.&lt;/p&gt;

&lt;p&gt;The generation instructions tell the agent to avoid repeating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Similar premises&lt;/li&gt;
&lt;li&gt;Recent genres&lt;/li&gt;
&lt;li&gt;Themes&lt;/li&gt;
&lt;li&gt;Settings&lt;/li&gt;
&lt;li&gt;Story structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means StoryForge isn't simply running the exact same prompt every day.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It uses its recent creative history to influence what it creates next.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  How StoryForge Works
&lt;/h1&gt;

&lt;p&gt;The entire workflow begins automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: EventBridge Scheduler wakes up the agent
&lt;/h2&gt;

&lt;p&gt;Every day, &lt;strong&gt;Amazon EventBridge Scheduler&lt;/strong&gt; triggers the story-generation workflow.&lt;/p&gt;

&lt;p&gt;The user doesn't need to click a button.&lt;/p&gt;

&lt;p&gt;The agent wakes up automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EventBridge Scheduler
        ↓
AWS Lambda
        ↓
Check today's story
        ↓
Retrieve recent memory
        ↓
Generate a new story with Groq
        ↓
Validate response
        ↓
Save to DynamoDB
        ↓
Story is ready for the user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Check for duplicate generations
&lt;/h2&gt;

&lt;p&gt;The Lambda function first checks whether a story has already been generated for the current day.&lt;/p&gt;

&lt;p&gt;This makes the workflow &lt;strong&gt;idempotent&lt;/strong&gt; and prevents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Duplicate stories&lt;/li&gt;
&lt;li&gt;Unnecessary AI API calls&lt;/li&gt;
&lt;li&gt;Extra costs&lt;/li&gt;
&lt;li&gt;Multiple executions creating conflicting data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Retrieve recent stories from DynamoDB
&lt;/h2&gt;

&lt;p&gt;The agent retrieves recently generated stories from &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These stories act as the agent's lightweight memory.&lt;/p&gt;

&lt;p&gt;For StoryForge, I didn't need a vector database or complex memory architecture.&lt;/p&gt;

&lt;p&gt;The last few stories provide enough information for the AI to understand what it has recently created and move in a different creative direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Generate a fresh story with Groq
&lt;/h2&gt;

&lt;p&gt;The Lambda function sends the generation request to the &lt;strong&gt;Groq API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Groq acts as the creative AI engine, while AWS handles the infrastructure, automation, storage, and security surrounding the agent.&lt;/p&gt;

&lt;p&gt;The AI returns a structured story containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Genre&lt;/li&gt;
&lt;li&gt;Theme&lt;/li&gt;
&lt;li&gt;Setting&lt;/li&gt;
&lt;li&gt;Summary&lt;/li&gt;
&lt;li&gt;Full story&lt;/li&gt;
&lt;li&gt;Moral&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Lambda validates the response before saving it.&lt;/p&gt;

&lt;p&gt;If the AI returns malformed or incomplete data, the system handles the failure safely instead of storing corrupted information.&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS Architecture
&lt;/h1&gt;

&lt;p&gt;The architecture is intentionally simple and serverless:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EventBridge Scheduler
        ↓
AWS Lambda
        ↓
Amazon DynamoDB
        ↓
Groq API
        ↓
Amazon DynamoDB
        ↓
API Gateway
        ↓
Static HTML, CSS and JavaScript
        ↓
Amazon S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3y4kz2p0m10g94yg05u9.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3y4kz2p0m10g94yg05u9.PNG" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Services Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda&lt;/strong&gt;: Autonomous story-generation agent and backend API logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon DynamoDB&lt;/strong&gt;: Story storage and lightweight memory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon EventBridge Scheduler&lt;/strong&gt;: Automatically wakes the agent every day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon API Gateway HTTP API&lt;/strong&gt;: Connects the frontend with the backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Secrets Manager&lt;/strong&gt;: Securely stores the Groq API key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt;: Hosts the static frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudFormation&lt;/strong&gt;: Infrastructure as Code and automated deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudWatch Logs&lt;/strong&gt;: Monitoring and debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Security
&lt;/h1&gt;

&lt;p&gt;The Groq API key is never exposed in the frontend or committed to source code.&lt;/p&gt;

&lt;p&gt;It is securely stored in &lt;strong&gt;AWS Secrets Manager&lt;/strong&gt;, and Lambda retrieves it using IAM permissions following the principle of least privilege.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
    No API Key
        ↓
API Gateway
        ↓
Lambda
        ↓
AWS Secrets Manager
        ↓
Groq API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Why HTML, CSS, and Vanilla JavaScript?
&lt;/h1&gt;

&lt;p&gt;I deliberately kept the frontend simple.&lt;/p&gt;

&lt;p&gt;The goal wasn't to demonstrate a complex frontend framework. The focus was on the autonomous AI agent architecture.&lt;/p&gt;

&lt;p&gt;The frontend only needs to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Display today's story&lt;/li&gt;
&lt;li&gt;Browse previous stories&lt;/li&gt;
&lt;li&gt;View individual stories&lt;/li&gt;
&lt;li&gt;Communicate with the backend API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HTML, CSS, and vanilla JavaScript were enough.&lt;/p&gt;

&lt;p&gt;This allowed me to focus on:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Automation, Memory, AI, and Serverless Architecture&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Challenges and Key Decisions
&lt;/h1&gt;

&lt;p&gt;The biggest challenge was balancing the idea of an &lt;strong&gt;AI agent&lt;/strong&gt; with the need to keep the project simple.&lt;/p&gt;

&lt;p&gt;It would have been easy to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vector databases&lt;/li&gt;
&lt;li&gt;Complex agent frameworks&lt;/li&gt;
&lt;li&gt;Multiple AI models&lt;/li&gt;
&lt;li&gt;Several interacting agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But those additions weren't necessary for this use case.&lt;/p&gt;

&lt;p&gt;Instead, I focused on the essential characteristics of an always-on agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It acts without waiting for the user.&lt;/li&gt;
&lt;li&gt;It runs on a schedule.&lt;/li&gt;
&lt;li&gt;It remembers recent context.&lt;/li&gt;
&lt;li&gt;It uses that context to influence its next action.&lt;/li&gt;
&lt;li&gt;It creates something new.&lt;/li&gt;
&lt;li&gt;Its output is ready when the user returns.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Why DynamoDB Was Enough for Memory
&lt;/h1&gt;

&lt;p&gt;A major lesson from this project was that &lt;strong&gt;not every AI agent needs a complex memory system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For StoryForge, the agent only needs to know what it created recently.&lt;/p&gt;

&lt;p&gt;Retrieving recent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Titles&lt;/li&gt;
&lt;li&gt;Genres&lt;/li&gt;
&lt;li&gt;Themes&lt;/li&gt;
&lt;li&gt;Settings&lt;/li&gt;
&lt;li&gt;Summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;provides enough context to encourage creative variety.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sometimes the simplest memory architecture is the one that best fits the problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Building StoryForge helped me better understand:&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless Architecture
&lt;/h2&gt;

&lt;p&gt;How Lambda, API Gateway, DynamoDB, and S3 can work together to create a complete application without managing servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Event-Driven Automation
&lt;/h2&gt;

&lt;p&gt;How EventBridge Scheduler can transform a traditional reactive AI application into an always-on system.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User → Request → AI → Result&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The workflow becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Schedule → Agent → Memory → AI → Storage → User discovers the result&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user is no longer responsible for initiating every action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lightweight Agent Memory
&lt;/h2&gt;

&lt;p&gt;Not every agent needs a vector database or complicated retrieval system.&lt;/p&gt;

&lt;p&gt;For StoryForge, DynamoDB provides enough recent context to influence future generations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure as Code
&lt;/h2&gt;

&lt;p&gt;CloudFormation makes infrastructure deployment more repeatable and consistent while reducing manual configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Secure AI Integration
&lt;/h2&gt;

&lt;p&gt;AWS Secrets Manager keeps the Groq API key away from the frontend and source code, while IAM controls access.&lt;/p&gt;

&lt;h1&gt;
  
  
  What's Next?
&lt;/h1&gt;

&lt;p&gt;StoryForge currently focuses on one simple promise:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A new story every day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the future, I would like to explore allowing the agent to develop a stronger creative identity over time.&lt;/p&gt;

&lt;p&gt;It could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze patterns in previous stories&lt;/li&gt;
&lt;li&gt;Experiment with different narrative styles&lt;/li&gt;
&lt;li&gt;Track genres it has used most&lt;/li&gt;
&lt;li&gt;Explore underused creative directions&lt;/li&gt;
&lt;li&gt;Adapt to genres users enjoy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for now, I intentionally kept the project focused.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;StoryForge proves that an always-on AI agent doesn't need to be complicated.&lt;/p&gt;

&lt;p&gt;Sometimes, all it takes is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A scheduled event, a little memory, an AI model, storage, and the ability to act while the user is away.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That combination can transform a traditional reactive AI application into something proactive.&lt;/p&gt;

&lt;p&gt;The key idea behind StoryForge is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The user doesn't have to ask for creativity every day. The system can create while they're away.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  StoryForge in One Sentence
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;StoryForge is an always-on AI storytelling agent that automatically remembers its recent stories, creates a new one every day using Groq, and saves it with AWS before the user even opens the app.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try StoryForge
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://storyforge-websitebucket-laklmio97kkg.s3-website-us-east-1.amazonaws.com" rel="noopener noreferrer"&gt;Open StoryForge&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>agentaichallenge</category>
    </item>
    <item>
      <title>Building ByteMentor AI: An Always-On Learning Agent with AWS Serverless | 10 Days of Building AI Agents on AWS | Day 2</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Fri, 24 Jul 2026 05:00:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/building-bytementor-ai-an-always-on-learning-agent-with-aws-serverless-46d</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/building-bytementor-ai-an-always-on-learning-agent-with-aws-serverless-46d</guid>
      <description>&lt;p&gt;Self-learning has never been easier, yet staying consistent remains one of the biggest challenges. We have access to countless tutorials, courses, documentation, and videos, but deciding what to learn next often becomes a task of its own. Even after choosing a topic, preparing study material, finding practice exercises, and creating revision questions can consume valuable time before any actual learning begins.&lt;/p&gt;

&lt;p&gt;I wanted to solve this problem by building &lt;strong&gt;ByteMentor AI&lt;/strong&gt;, an autonomous learning companion that prepares personalized daily learning content before the learner even opens the application.&lt;/p&gt;

&lt;p&gt;Instead of functioning as another AI chatbot that waits for user input, ByteMentor proactively generates structured learning sessions on a schedule. Every day, it analyzes the learner's roadmap, determines the next topic, generates a complete lesson with practical examples, coding exercises, quizzes, and revision material, then stores everything so it is immediately available when the learner returns.&lt;/p&gt;

&lt;p&gt;The objective was straightforward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Allow learners to focus on learning instead of planning what to learn.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F943iu35xu1yk6iqe6od9.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F943iu35xu1yk6iqe6od9.PNG" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  The Idea
&lt;/h1&gt;

&lt;p&gt;Learning roadmaps have become increasingly popular, but they usually stop after listing topics in order. The learner is still responsible for researching each concept, finding quality resources, and deciding what to study every day.&lt;/p&gt;

&lt;p&gt;I wanted to extend the roadmap into something more intelligent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87emjx6pg7p0tdkujkre.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87emjx6pg7p0tdkujkre.PNG" alt=" " width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of simply displaying a list of topics, ByteMentor continuously transforms that roadmap into daily learning sessions. Once a roadmap has been created, the application knows exactly what should come next and prepares everything automatically.&lt;/p&gt;

&lt;p&gt;Each generated lesson includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detailed explanation of the topic&lt;/li&gt;
&lt;li&gt;Practical coding examples&lt;/li&gt;
&lt;li&gt;Hands-on programming exercises&lt;/li&gt;
&lt;li&gt;Multiple-choice quiz questions&lt;/li&gt;
&lt;li&gt;Learning summary&lt;/li&gt;
&lt;li&gt;Productivity tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the learner opens the application, today's lesson is already waiting.&lt;/p&gt;




&lt;h1&gt;
  
  
  System Architecture
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                GitHub
                   │
                   ▼
             AWS Amplify
                   │
                   ▼
          React + TypeScript
                   │
                   ▼
            Amazon API Gateway
                   │
                   ▼
              AWS Lambda
        (ByteMentor AI Agent)
           │             │
           ▼             ▼
        Groq API     DynamoDB
           ▲             │
           └──────┬──────┘
                  ▲
                  │
      Amazon EventBridge Scheduler
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each AWS service is responsible for a single part of the workflow, resulting in a scalable and event-driven architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhwf5e7zyf5e0a1rnxukz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhwf5e7zyf5e0a1rnxukz.PNG" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Frontend
&lt;/h1&gt;

&lt;p&gt;The frontend is built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interface allows learners to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate personalized learning roadmaps&lt;/li&gt;
&lt;li&gt;View today's lesson&lt;/li&gt;
&lt;li&gt;Browse previous lessons&lt;/li&gt;
&lt;li&gt;Track learning history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application is deployed using &lt;strong&gt;AWS Amplify&lt;/strong&gt;, which automatically builds and deploys the frontend directly from GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fln06lpcj4cgd4m7oam4b.PNG" alt=" " width="800" height="368"&gt;
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Backend
&lt;/h1&gt;

&lt;p&gt;The backend is built using &lt;strong&gt;Node.js&lt;/strong&gt; and &lt;strong&gt;AWS Lambda&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Amazon API Gateway exposes REST endpoints that communicate with Lambda functions responsible for handling business logic.&lt;/p&gt;

&lt;p&gt;The backend is responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading learning roadmaps&lt;/li&gt;
&lt;li&gt;Determining the next lesson&lt;/li&gt;
&lt;li&gt;Generating AI content&lt;/li&gt;
&lt;li&gt;Saving generated lessons&lt;/li&gt;
&lt;li&gt;Retrieving previous learning sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because everything runs inside Lambda, there are no servers to manage, making the application lightweight and cost-effective.&lt;/p&gt;




&lt;h1&gt;
  
  
  AI Content Generation
&lt;/h1&gt;

&lt;p&gt;ByteMentor integrates with a large language model to generate structured educational content.&lt;/p&gt;

&lt;p&gt;Rather than requesting plain text responses, the application prompts the model to return structured JSON, making it easy to render lessons consistently across the interface.&lt;/p&gt;

&lt;p&gt;Each lesson contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Topic overview&lt;/li&gt;
&lt;li&gt;Step-by-step explanation&lt;/li&gt;
&lt;li&gt;Code snippets&lt;/li&gt;
&lt;li&gt;Practical exercise&lt;/li&gt;
&lt;li&gt;Quiz questions&lt;/li&gt;
&lt;li&gt;Key takeaways&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach creates a much richer learning experience than simply displaying AI-generated paragraphs.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq145fvboaethgo85uua3.PNG" alt=" " width="800" height="721"&gt;
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Persistent Storage
&lt;/h1&gt;

&lt;p&gt;Amazon DynamoDB stores all generated learning content.&lt;/p&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning roadmaps&lt;/li&gt;
&lt;li&gt;Daily lessons&lt;/li&gt;
&lt;li&gt;Learning history&lt;/li&gt;
&lt;li&gt;Generated quizzes&lt;/li&gt;
&lt;li&gt;Coding exercises&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since lessons are stored after generation, learners can revisit previous sessions without requiring the AI model to generate them again.&lt;/p&gt;




&lt;h1&gt;
  
  
  Making the Agent Autonomous
&lt;/h1&gt;

&lt;p&gt;The defining feature of ByteMentor is that it operates proactively rather than reactively.&lt;/p&gt;

&lt;p&gt;Instead of waiting for a user to request a lesson, &lt;strong&gt;Amazon EventBridge Scheduler&lt;/strong&gt; automatically invokes the Lambda function every morning.&lt;/p&gt;

&lt;p&gt;The scheduled workflow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EventBridge Scheduler
        │
        ▼
AWS Lambda
        │
        ▼
Read learning roadmap
        │
        ▼
Determine today's topic
        │
        ▼
Generate lesson
        │
        ▼
Create coding challenge
        │
        ▼
Generate quiz
        │
        ▼
Store in DynamoDB
        │
        ▼
Lesson ready before user logs in
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means the learner is welcomed with fresh learning content every day without initiating any manual action.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvf8yzb02bbe9rjty9dh7.PNG" alt=" " width="800" height="397"&gt;
&lt;/h2&gt;

&lt;h1&gt;
  
  
  AWS Services Used
&lt;/h1&gt;

&lt;p&gt;The project combines several AWS services into a single serverless workflow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Amplify&lt;/li&gt;
&lt;li&gt;Amazon API Gateway&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Amazon EventBridge Scheduler&lt;/li&gt;
&lt;li&gt;Amazon DynamoDB&lt;/li&gt;
&lt;li&gt;Amazon CloudWatch&lt;/li&gt;
&lt;li&gt;AWS IAM&lt;/li&gt;
&lt;li&gt;AWS SAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each service contributes a focused responsibility, making the system easy to maintain and extend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foqebwbg2pofjfys74n9o.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foqebwbg2pofjfys74n9o.PNG" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Development Process
&lt;/h1&gt;

&lt;p&gt;The project began with designing a clean learning workflow rather than focusing solely on AI generation.&lt;/p&gt;

&lt;p&gt;The roadmap became the central source of truth for determining future lessons. Once that workflow was established, the backend was designed around AWS Lambda functions capable of generating and storing lessons independently.&lt;/p&gt;

&lt;p&gt;The frontend was then built to consume those generated lessons, allowing users to view content without worrying about how or when it was created.&lt;/p&gt;

&lt;p&gt;Finally, EventBridge Scheduler transformed the application from an on-demand AI tool into an autonomous learning agent by moving lesson generation to a scheduled background process.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Building ByteMentor provided valuable experience across several AWS services and architectural patterns.&lt;/p&gt;

&lt;p&gt;Some of the key takeaways include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing event-driven serverless applications&lt;/li&gt;
&lt;li&gt;Building production deployments using AWS SAM&lt;/li&gt;
&lt;li&gt;Using Amazon EventBridge Scheduler for background automation&lt;/li&gt;
&lt;li&gt;Connecting API Gateway with AWS Lambda&lt;/li&gt;
&lt;li&gt;Designing DynamoDB data models&lt;/li&gt;
&lt;li&gt;Building structured AI prompts that consistently return machine-readable responses&lt;/li&gt;
&lt;li&gt;Separating frontend and backend responsibilities for easier maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, the project reinforced the idea that AI becomes significantly more useful when it performs work proactively instead of waiting for user requests.&lt;/p&gt;




&lt;h1&gt;
  
  
  Future Improvements
&lt;/h1&gt;

&lt;p&gt;There are several features I plan to add in future iterations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Cognito authentication&lt;/li&gt;
&lt;li&gt;Progress tracking and learning analytics&lt;/li&gt;
&lt;li&gt;Achievement badges and learning streaks&lt;/li&gt;
&lt;li&gt;PDF lesson exports&lt;/li&gt;
&lt;li&gt;Voice narration&lt;/li&gt;
&lt;li&gt;AI-generated diagrams&lt;/li&gt;
&lt;li&gt;Spaced repetition for long-term retention&lt;/li&gt;
&lt;li&gt;Multi-user support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These additions will further enhance the personalized learning experience while maintaining the autonomous nature of the platform.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;ByteMentor AI demonstrates how serverless AWS services can be combined to create an autonomous learning system that works continuously in the background.&lt;/p&gt;

&lt;p&gt;By leveraging AWS Lambda, EventBridge Scheduler, DynamoDB, API Gateway, and Amplify, the application generates personalized learning sessions without requiring user intervention. Instead of deciding what to study every day, learners can simply open the application and begin learning immediately.&lt;/p&gt;

&lt;p&gt;Building this project was an excellent opportunity to explore event-driven architectures, serverless development, and AI-powered automation while creating a practical solution to a real productivity problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  Live Demo
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://main.d2qeklo0lut2is.amplifyapp.com/" rel="noopener noreferrer"&gt;https://main.d2qeklo0lut2is.amplifyapp.com/&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  GitHub Repository
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/ABDULLAH408/ByteMentor_AI" rel="noopener noreferrer"&gt;https://github.com/ABDULLAH408/ByteMentor_AI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>agents</category>
    </item>
    <item>
      <title>Building FocusAI: Simplifying Daily Task Planning: 10 Days of Building AI Agents on AWS | Day 1</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Thu, 16 Jul 2026 22:05:58 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/building-focusai-simplifying-daily-task-planning-with-aws-serverless-and-amazon-bedrock-1581</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/building-focusai-simplifying-daily-task-planning-with-aws-serverless-and-amazon-bedrock-1581</guid>
      <description>&lt;p&gt;Every morning begins the same way. I sit down, make a list of everything I need to accomplish, and then spend several minutes deciding where to start.&lt;/p&gt;

&lt;p&gt;The challenge is rarely creating the list. The real challenge is prioritizing it.&lt;/p&gt;

&lt;p&gt;Some tasks are urgent. Others are important but not time-sensitive. Some can wait until later in the day. Deciding what deserves immediate attention often becomes a task of its own, creating unnecessary friction before any real work has even started.&lt;/p&gt;

&lt;p&gt;That everyday problem inspired me to build &lt;strong&gt;FocusAI&lt;/strong&gt;, an AI-powered productivity assistant that helps transform a simple list of tasks into a structured action plan.&lt;/p&gt;

&lt;p&gt;Rather than replacing project management platforms or adding another complex productivity system, FocusAI focuses on solving one specific problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What should I work on first today?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The objective was straightforward. Build a practical application that removes the mental overhead of planning the day so users can spend more time doing meaningful work.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Idea Behind FocusAI
&lt;/h1&gt;

&lt;p&gt;There is no shortage of productivity applications available today. Most of them are packed with features such as project management, kanban boards, recurring tasks, collaboration tools, reminders, calendars, and detailed reporting.&lt;/p&gt;

&lt;p&gt;While these tools are incredibly powerful, they can also introduce additional complexity for someone who simply wants to organize today's workload.&lt;/p&gt;

&lt;p&gt;FocusAI takes a different approach.&lt;/p&gt;

&lt;p&gt;Instead of asking users to create projects, assign priorities, organize boards, or maintain workflows, it asks for only one thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your list of tasks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the tasks are submitted, FocusAI analyzes them using generative AI and produces an organized action plan within seconds.&lt;/p&gt;

&lt;p&gt;The experience is intentionally lightweight, allowing users to focus on execution rather than planning.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1lhro7h982jsdy5lt420.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1lhro7h982jsdy5lt420.PNG" alt=" " width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What FocusAI Does
&lt;/h1&gt;

&lt;p&gt;The workflow is designed to be as simple as possible.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter or paste your list of daily tasks.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Prioritize My Day&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Receive an AI-generated plan almost instantly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For every task, FocusAI generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Priority level&lt;/li&gt;
&lt;li&gt;Estimated completion time&lt;/li&gt;
&lt;li&gt;Recommended first step&lt;/li&gt;
&lt;li&gt;Reasoning behind the recommendation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition to task-level insights, the application also provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A summary of the day's workload&lt;/li&gt;
&lt;li&gt;A productivity tip based on the submitted tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5zlt5aougwlvt3svpq8h.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5zlt5aougwlvt3svpq8h.PNG" alt=" " width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The interface intentionally avoids unnecessary features and distractions. Every design decision was made with one goal in mind: helping users start working as quickly as possible.&lt;/p&gt;




&lt;h1&gt;
  
  
  Architecture
&lt;/h1&gt;

&lt;p&gt;From the beginning, I wanted the application to be fully serverless.&lt;/p&gt;

&lt;p&gt;A serverless architecture removes the need to manage infrastructure while providing scalability, reliability, and a streamlined deployment process.&lt;/p&gt;

&lt;p&gt;The overall architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React + Vite
      │
      ▼
AWS Amplify
      │
      ▼
Amazon API Gateway
      │
      ▼
AWS Lambda
      │
      ▼
Amazon Bedrock
(Amazon Nova Lite)
      │
      ▼
AI Generated Productivity Plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Technology Stack
&lt;/h1&gt;

&lt;p&gt;The frontend was built using &lt;strong&gt;React&lt;/strong&gt; and &lt;strong&gt;Vite&lt;/strong&gt;, providing a fast development experience and a responsive user interface.&lt;/p&gt;

&lt;p&gt;The application is hosted on &lt;strong&gt;AWS Amplify&lt;/strong&gt;, which automatically builds and deploys new versions whenever changes are pushed to GitHub.&lt;/p&gt;

&lt;p&gt;The backend consists of an &lt;strong&gt;AWS Lambda&lt;/strong&gt; function exposed through &lt;strong&gt;Amazon API Gateway&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When a user submits their tasks, the Lambda function constructs a structured prompt and sends it to &lt;strong&gt;Amazon Bedrock&lt;/strong&gt;, where &lt;strong&gt;Amazon Nova Lite&lt;/strong&gt; analyzes the task list and generates recommendations.&lt;/p&gt;

&lt;p&gt;The response is then returned to the frontend and presented as a clean, structured productivity plan.&lt;/p&gt;




&lt;h1&gt;
  
  
  AWS Services Used
&lt;/h1&gt;

&lt;p&gt;FocusAI is built using the following AWS services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Amplify&lt;/li&gt;
&lt;li&gt;Amazon API Gateway&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Amazon Bedrock&lt;/li&gt;
&lt;li&gt;Amazon Nova Lite&lt;/li&gt;
&lt;li&gt;Amazon CloudWatch&lt;/li&gt;
&lt;li&gt;AWS Identity and Access Management (IAM)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub is used for source control and continuous deployment.&lt;/p&gt;




&lt;h1&gt;
  
  
  Designing for Reliability
&lt;/h1&gt;

&lt;p&gt;One aspect I wanted to address early in development was reliability.&lt;/p&gt;

&lt;p&gt;AI-powered applications should continue to provide value even when AI services are temporarily unavailable because of quota limits, service interruptions, or network issues.&lt;/p&gt;

&lt;p&gt;To handle these scenarios, I implemented a fallback planner.&lt;/p&gt;

&lt;p&gt;Whenever Amazon Bedrock cannot process a request, the application automatically generates a structured productivity plan using predefined prioritization logic instead of returning an error.&lt;/p&gt;

&lt;p&gt;Although the fallback is not as sophisticated as the AI-generated response, it ensures the application remains functional and useful under all circumstances.&lt;/p&gt;

&lt;p&gt;This small addition significantly improved both the user experience and the resilience of the application.&lt;/p&gt;




&lt;h1&gt;
  
  
  Challenges Along the Way
&lt;/h1&gt;

&lt;p&gt;Like most cloud-native applications, the majority of the work involved connecting services together rather than building the interface itself.&lt;/p&gt;

&lt;p&gt;Some of the biggest challenges included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configuring Amazon API Gateway correctly&lt;/li&gt;
&lt;li&gt;Resolving CORS issues between the frontend and backend&lt;/li&gt;
&lt;li&gt;Setting up IAM permissions for Amazon Bedrock&lt;/li&gt;
&lt;li&gt;Debugging Lambda function execution&lt;/li&gt;
&lt;li&gt;Successfully invoking Amazon Nova Lite through Bedrock&lt;/li&gt;
&lt;li&gt;Monitoring requests using Amazon CloudWatch Logs&lt;/li&gt;
&lt;li&gt;Managing deployment through AWS Amplify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Working through these challenges provided valuable hands-on experience with AWS services that is difficult to gain from documentation alone.&lt;/p&gt;




&lt;h1&gt;
  
  
  Key Takeaways
&lt;/h1&gt;

&lt;p&gt;Building FocusAI strengthened my understanding of modern serverless application development.&lt;/p&gt;

&lt;p&gt;Some of the most valuable lessons included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building scalable applications with AWS Lambda&lt;/li&gt;
&lt;li&gt;Deploying frontend applications using AWS Amplify&lt;/li&gt;
&lt;li&gt;Creating REST APIs with Amazon API Gateway&lt;/li&gt;
&lt;li&gt;Integrating foundation models through Amazon Bedrock&lt;/li&gt;
&lt;li&gt;Managing permissions securely with IAM&lt;/li&gt;
&lt;li&gt;Using CloudWatch for monitoring and debugging&lt;/li&gt;
&lt;li&gt;Designing graceful fallback mechanisms for AI-powered systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perhaps the most important lesson was that AI should enhance an application rather than become a dependency that prevents it from functioning.&lt;/p&gt;

&lt;p&gt;Building software that continues to deliver value even when intelligent services are unavailable is an important aspect of creating reliable user experiences.&lt;/p&gt;




&lt;h1&gt;
  
  
  Future Improvements
&lt;/h1&gt;

&lt;p&gt;There are several features I would like to explore in future iterations of FocusAI.&lt;/p&gt;

&lt;p&gt;Some of the planned improvements include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User authentication with Amazon Cognito&lt;/li&gt;
&lt;li&gt;Productivity history and analytics&lt;/li&gt;
&lt;li&gt;Weekly productivity reports&lt;/li&gt;
&lt;li&gt;Calendar integration&lt;/li&gt;
&lt;li&gt;Meeting summarization&lt;/li&gt;
&lt;li&gt;AI-generated daily schedules&lt;/li&gt;
&lt;li&gt;Smart reminders and notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These additions would allow FocusAI to evolve from a daily planning assistant into a more complete productivity companion while maintaining its simplicity.&lt;/p&gt;




&lt;h1&gt;
  
  
  Live Demo
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Try FocusAI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://main.d10s0skyfp0lmj.amplifyapp.com/" rel="noopener noreferrer"&gt;https://main.d10s0skyfp0lmj.amplifyapp.com/&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Source Code
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ABDULLAH408/FocusAI" rel="noopener noreferrer"&gt;https://github.com/ABDULLAH408/FocusAI&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Closing Thoughts
&lt;/h1&gt;

&lt;p&gt;Building FocusAI was an opportunity to explore how modern serverless technologies and generative AI can work together to solve an everyday problem.&lt;/p&gt;

&lt;p&gt;The project reinforced an idea that I find increasingly important in software development. Great applications do not always need dozens of features. Sometimes the best solution is the one that removes a small but recurring source of friction from a user's day.&lt;/p&gt;

&lt;p&gt;FocusAI was built with that philosophy in mind.&lt;/p&gt;

&lt;p&gt;It takes a simple list of tasks and turns it into a clear plan, allowing users to spend less time deciding what to do next and more time making meaningful progress.&lt;/p&gt;

&lt;p&gt;I hope you find it useful, and I would love to hear your feedback or suggestions for future improvements.&lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>bedrock</category>
      <category>programming</category>
    </item>
    <item>
      <title>Day 6: Why Vibe Coding Fails in Production (And How Kiro Helps to Fix It)</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Mon, 18 May 2026 09:17:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/day-6-why-vibe-coding-fails-in-production-and-how-kiro-helps-to-fix-it-22i1</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/day-6-why-vibe-coding-fails-in-production-and-how-kiro-helps-to-fix-it-22i1</guid>
      <description>&lt;p&gt;After building a project using Kiro’s spec-driven development workflow and comparing it with tools like Cursor and GitHub Copilot, one thing became very clear: &lt;em&gt;AI coding itself is not the issue. The real problem is how we approach it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most developers today are unintentionally practicing what is now called &lt;strong&gt;&lt;em&gt;“vibe coding”&lt;/em&gt;&lt;/strong&gt;, a workflow where you rely heavily on AI prompts, quick iterations, and instant code generation without properly designing the system beforehand. It feels fast, flexible, and even powerful in the beginning. But when you try to take that same approach into production-level systems, the cracks start to show.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Vibe Coding Actually Looks Like&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vibe coding usually starts with a simple prompt. You ask the AI to build something like a game, a dashboard, or a backend system, and it immediately generates working code. From there, you keep improving it step by step using follow-up prompts such as “fix this bug,” “add this feature,” or “make it cleaner.”&lt;/p&gt;

&lt;p&gt;At first, this feels like rapid development. You are building fast, seeing instant results, and constantly moving forward. But the issue is that there is no real system design behind the code. Everything is being added reactively instead of being designed intentionally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Vibe Coding Breaks in Production&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest problem with vibe coding is that it works only in the early stage. As the project grows, structure starts to break.&lt;/p&gt;

&lt;p&gt;First, architecture becomes unclear because features are added through separate prompts, leading to inconsistent code organization. Second, context starts to degrade, and AI may lose track of earlier decisions. Third, complexity increases uncontrollably because everything is patched together instead of being designed properly. This is the point where projects start becoming hard to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My project Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I noticed this clearly while building Flappy Bird in Node.js. At the start, everything was smooth and fast. But as more features were added, the logic started overlapping, debugging became harder, and small changes affected other parts of the game. It felt productive at first, but over time, the lack of structure started creating problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Kiro Changes the Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kiro solves this by introducing spec-driven development. Instead of jumping straight into prompts like “build Flappy Bird,” you first define a structured specification describing how the system should work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4ju0m7t5up8ixlwb1g8.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4ju0m7t5up8ixlwb1g8.PNG" alt=" " width="791" height="44"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my case, I defined gameplay rules like gravity, pipes, scoring, and collision before any code was generated. Kiro then built the implementation based on that structure. This shifts development from reactive coding to intentional system design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From Reactive to Structured Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In vibe coding, you fix problems after they appear. In Kiro, you define the system first, and most issues never appear in the first place. This makes development more controlled, predictable, and structured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Structure Matters More Than Speed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most AI tools focus on speed, but speed without structure does not scale. Vibe coding works well for prototypes and experiments, but breaks down in larger systems because complexity grows too quickly. Kiro solves this by introducing structure before code exists&lt;/p&gt;

&lt;p&gt;Final Thoughts:&lt;br&gt;
AI development is evolving from fast code generation to structured system design.Copilot helps you write faster, Cursor helps you work with code, but Kiro helps you define systems before they are built. And that’s the key difference.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Vibe coding fails in production not because AI is weak, but because structure is missing from the process.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>kiro</category>
    </item>
    <item>
      <title>Day 5: Kiro vs Cursor vs GitHub Copilot (Real Developer Comparison)</title>
      <dc:creator>abdullah haroon</dc:creator>
      <pubDate>Sun, 17 May 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/abdullah_haroon_092cf10d3/day-5-kiro-vs-cursor-vs-github-copilot-real-developer-comparison-5879</link>
      <guid>https://dev.to/abdullah_haroon_092cf10d3/day-5-kiro-vs-cursor-vs-github-copilot-real-developer-comparison-5879</guid>
      <description>&lt;p&gt;After building a project in Node.js using Kiro’s spec-driven workflow, We started to clearly understand where Kiro stands in the AI development ecosystem. Up until now, I had used multiple AI coding tools in real projects: Cursor, GitHub Copilot, and now Kiro, but this was the first time I compared them from a workflow perspective, not just feature lists. And honestly, the difference is not just in “code quality.” It’s in how each tool shapes the way you think while building software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding the Three Tools First&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before comparing them, it’s important to understand what each tool is actually optimizing for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; is mainly focused on speed. It helps you write code faster inside your editor by suggesting completions as you type. It’s great for small improvements and boilerplate reduction, but it still depends heavily on your own structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; takes things a step further. It’s more like an AI-native IDE where you can chat with your codebase. It understands context better than Copilot and allows more interactive development, especially for debugging and refactoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kiro&lt;/strong&gt; on the other hand, feels different. It is not just trying to help you write code faster, it is trying to enforce a development structure through spec-driven development.&lt;/p&gt;

&lt;p&gt;That distinction is where everything starts to change.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3i1zo04hfsavep8jz2y.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3i1zo04hfsavep8jz2y.PNG" alt=" " width="800" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workflow Comparison (The Real Difference)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I built a project in Node.js using Kiro, the workflow started with a spec. That single change affects everything downstream.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;Kiro&lt;/strong&gt;, I first defined behavior, system design, and features before writing any code. The AI then generated implementation based on that structure.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Cursor and Copilot&lt;/strong&gt;, the workflow is more direct. You start coding or prompting immediately, and structure evolves naturally through iteration.&lt;/p&gt;

&lt;p&gt;This difference might seem small, but it completely changes how your project grows over time.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Kiro forces intent-first development.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Cursor and Copilot encourage code-first development.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Structure and Architecture Handling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where the gap becomes very visible. With &lt;strong&gt;GitHub Copilot&lt;/strong&gt;, code structure depends entirely on the developer. It is excellent at completing functions and reducing repetitive work, but it does not guide architecture decisions. &lt;strong&gt;Cursor&lt;/strong&gt; improves this by understanding more of the project context. It can refactor files, explain logic, and assist in debugging across multiple files.&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;Kiro&lt;/strong&gt; goes one level higher, it tries to shape the architecture before the code even exists. Because everything starts from a spec, the structure is more intentional from the beginning. In my Node.js project, this was very noticeable. Kiro naturally separated game logic into clear modules instead of dumping everything into one file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8yrj02iiyokbqnyhq4x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8yrj02iiyokbqnyhq4x.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Interaction Style&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The interaction style of each tool is also very different.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copilot&lt;/strong&gt; feels passive. It waits for you to write code and then predicts what comes next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; feels conversational. You actively discuss your codebase with the AI and iterate through changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kiro&lt;/strong&gt; feels directive in a different way. You are not just chatting or coding, you are defining system behavior through structured specifications, and the AI executes based on that. This makes Kiro feel less like an assistant and more like a system builder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging and Iteration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Debugging is where &lt;strong&gt;Cursor&lt;/strong&gt; really shines. When something breaks, Cursor can analyze your project, suggest fixes, and even refactor multiple files at once. It feels very practical for real-world development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copilot&lt;/strong&gt; is weaker here because it does not fully understand project-wide context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kiro&lt;/strong&gt; approaches debugging differently. Instead of directly patching code, you often go back and refine the spec. The system then regenerates or adjusts implementation based on updated requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speed vs Structure vs Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each tool optimizes for something different.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copilot&lt;/strong&gt; optimizes for speed of writing code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt; optimizes for interactive development and debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kiro&lt;/strong&gt; optimizes for structured system design through specs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When we used them in real projects, this difference became very clear.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you want quick code snippets, &lt;strong&gt;Copilot&lt;/strong&gt; is enough.&lt;/li&gt;
&lt;li&gt;If you want full project-level AI assistance, &lt;strong&gt;Cursor&lt;/strong&gt; is very strong.&lt;/li&gt;
&lt;li&gt;If you want structured AI-native development, &lt;strong&gt;Kiro&lt;/strong&gt; feels more forward-thinking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Final Outcome&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After using all three tools in real development scenarios, we realized they are not direct replacements for each other. They represent different stages in the evolution of AI-assisted development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copilot&lt;/strong&gt; represents the first phase: autocomplete intelligence.&lt;br&gt;
&lt;strong&gt;Cursor&lt;/strong&gt; represents the second phase: conversational coding.&lt;br&gt;
&lt;strong&gt;Kiro&lt;/strong&gt; represents a third phase: structured AI-native development.&lt;/p&gt;

&lt;p&gt;And that third phase is what makes Kiro interesting.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It is not trying to replace developers.It is trying to change how developers think before they even write code.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>kiro</category>
    </item>
  </channel>
</rss>
