<?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: Panic Engineer</title>
    <description>The latest articles on DEV Community by Panic Engineer (@panicengineer).</description>
    <link>https://dev.to/panicengineer</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3694249%2Fb19dfb68-f6d7-4a91-9307-2aebb59f3b16.png</url>
      <title>DEV Community: Panic Engineer</title>
      <link>https://dev.to/panicengineer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/panicengineer"/>
    <language>en</language>
    <item>
      <title>What Building and Deploying a Real Production App Taught Me Beyond Tutorials</title>
      <dc:creator>Panic Engineer</dc:creator>
      <pubDate>Mon, 18 May 2026 09:39:53 +0000</pubDate>
      <link>https://dev.to/panicengineer/what-building-and-deploying-a-real-production-app-taught-me-beyond-tutorials-57bk</link>
      <guid>https://dev.to/panicengineer/what-building-and-deploying-a-real-production-app-taught-me-beyond-tutorials-57bk</guid>
      <description>&lt;p&gt;Recently I finished building and deploying a production real-estate platform for a non-technical client using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Cloudinary&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project itself wasn’t “massive” from an enterprise perspective, but it taught me something important:&lt;/p&gt;

&lt;p&gt;real-world software engineering starts where tutorials usually stop.&lt;/p&gt;

&lt;p&gt;A lot of my learning during this project had very little to do with writing React components or building CRUD APIs.&lt;/p&gt;

&lt;p&gt;Instead, most of the valuable lessons came from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debugging production issues&lt;/li&gt;
&lt;li&gt;handling infrastructure constraints&lt;/li&gt;
&lt;li&gt;deployment behavior&lt;/li&gt;
&lt;li&gt;SEO/discoverability&lt;/li&gt;
&lt;li&gt;UX/business tradeoffs&lt;/li&gt;
&lt;li&gt;understanding how technical decisions affect real users&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Difference Between “Building Features” and “Shipping Products”
&lt;/h2&gt;

&lt;p&gt;Before this project, most of my learning came from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tutorials&lt;/li&gt;
&lt;li&gt;isolated side projects&lt;/li&gt;
&lt;li&gt;local development environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In those environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs usually work&lt;/li&gt;
&lt;li&gt;deployment is ignored&lt;/li&gt;
&lt;li&gt;infra is abstracted away&lt;/li&gt;
&lt;li&gt;assets are small&lt;/li&gt;
&lt;li&gt;performance doesn’t matter much&lt;/li&gt;
&lt;li&gt;search engines don’t exist&lt;/li&gt;
&lt;li&gt;users don’t exist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Production projects behave very differently.&lt;/p&gt;

&lt;p&gt;Once real users, real hosting platforms and real business requirements enter the picture, software engineering becomes much more holistic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vercel Payload Limits and Large Image Uploads
&lt;/h2&gt;

&lt;p&gt;One of the first interesting issues I encountered happened during property creation.&lt;/p&gt;

&lt;p&gt;The admin could upload multiple high-quality property images. Initially everything worked fine with smaller images, but once I started testing realistic production scenarios with larger files, uploads suddenly started failing.&lt;/p&gt;

&lt;p&gt;At first I suspected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloudinary upload issues&lt;/li&gt;
&lt;li&gt;MongoDB problems&lt;/li&gt;
&lt;li&gt;request handling bugs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those were actually the problem.&lt;/p&gt;

&lt;p&gt;The real issue was that the total request payload exceeded Vercel’s limits before the upload logic even completed.&lt;/p&gt;

&lt;p&gt;This was one of those moments where I realized:&lt;br&gt;
production platforms have infrastructure constraints you rarely encounter in tutorials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of blindly increasing limits or changing infrastructure immediately, I implemented client-side image optimization/compression before submission.&lt;/p&gt;

&lt;p&gt;The result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drastically reduced payload size&lt;/li&gt;
&lt;li&gt;significantly improved reliability&lt;/li&gt;
&lt;li&gt;better upload performance&lt;/li&gt;
&lt;li&gt;reduced bandwidth usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was also a reminder that optimization is often about understanding constraints rather than prematurely overengineering systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloudinary PDF Preview Behavior
&lt;/h2&gt;

&lt;p&gt;Another interesting issue involved property PDFs.&lt;/p&gt;

&lt;p&gt;The client wanted uploaded PDFs to preview directly in browser rather than forcing users/admins to download them.&lt;/p&gt;

&lt;p&gt;Initially, Cloudinary-hosted PDFs were downloading instead of previewing.&lt;/p&gt;

&lt;p&gt;I tried:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL manipulation approaches&lt;/li&gt;
&lt;li&gt;response behavior tweaks&lt;/li&gt;
&lt;li&gt;different delivery methods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually I discovered that using Google Docs Viewer as a lightweight preview layer solved the issue cleanly.&lt;/p&gt;

&lt;p&gt;The implementation itself wasn’t complicated, but the interesting part was the debugging process:&lt;br&gt;
understanding browser behavior, file delivery behavior and how external services interact together.&lt;/p&gt;

&lt;p&gt;Deployment Is a Different Skillset Entirely&lt;/p&gt;

&lt;p&gt;Before this project I underestimated how much engineering exists beyond writing application code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment introduced an entirely different category of problems:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;DNS propagation&lt;/li&gt;
&lt;li&gt;custom domain setup&lt;/li&gt;
&lt;li&gt;SSL behavior&lt;/li&gt;
&lt;li&gt;Vercel deployment restrictions&lt;/li&gt;
&lt;li&gt;GitHub contributor behavior&lt;/li&gt;
&lt;li&gt;infrastructure caching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One interesting moment happened during custom domain setup.&lt;/p&gt;

&lt;p&gt;Some devices/networks showed the updated Vercel deployment immediately, while others still displayed the default GoDaddy placeholder page.&lt;/p&gt;

&lt;p&gt;Initially it looked like a broken deployment.&lt;/p&gt;

&lt;p&gt;The actual issue:&lt;br&gt;
DNS propagation and ISP-level caching differences.&lt;/p&gt;

&lt;p&gt;This taught me that deployment debugging often involves understanding distributed systems behavior more than application logic itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  SEO Is More Technical Than I Expected
&lt;/h2&gt;

&lt;p&gt;This was also the first time I handled SEO/discoverability setup seriously for a production project.&lt;/p&gt;

&lt;p&gt;That included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sitemap.xml&lt;/li&gt;
&lt;li&gt;robots.txt&lt;/li&gt;
&lt;li&gt;OpenGraph metadata&lt;/li&gt;
&lt;li&gt;canonical URLs&lt;/li&gt;
&lt;li&gt;Google Search Console&lt;/li&gt;
&lt;li&gt;indexing requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I realized quickly:&lt;br&gt;
deploying a website does not mean search engines automatically understand or discover it properly.&lt;/p&gt;

&lt;p&gt;There’s an entire layer of infrastructure and communication happening between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your application&lt;/li&gt;
&lt;li&gt;crawlers&lt;/li&gt;
&lt;li&gt;social platforms&lt;/li&gt;
&lt;li&gt;indexing systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even after submitting the sitemap and requesting indexing, Google still needed time to crawl and process the website.&lt;/p&gt;

&lt;p&gt;At first many pages simply showed:&lt;br&gt;
“URL is unknown to Google.”&lt;/p&gt;

&lt;p&gt;That experience helped me understand that SEO is less about “gaming rankings” and more about:&lt;br&gt;
clarity, discoverability and technical communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lighthouse Scores vs Real UX
&lt;/h2&gt;

&lt;p&gt;Another useful lesson came from performance optimization.&lt;/p&gt;

&lt;p&gt;I tested the project using Lighthouse/PageSpeed and the scores were actually quite good overall.&lt;/p&gt;

&lt;p&gt;But I also realized something important:&lt;br&gt;
blindly chasing perfect benchmark scores can become counterproductive.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
real-estate platforms naturally depend heavily on high-quality imagery because trust and presentation matter.&lt;/p&gt;

&lt;p&gt;Aggressively compressing everything or removing visual quality purely to maximize Lighthouse scores can negatively affect actual user perception.&lt;/p&gt;

&lt;p&gt;That changed how I think about optimization.&lt;/p&gt;

&lt;p&gt;Good engineering is often about balancing tradeoffs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;aesthetics&lt;/li&gt;
&lt;li&gt;usability&lt;/li&gt;
&lt;li&gt;responsiveness&lt;/li&gt;
&lt;li&gt;business requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;rather than maximizing a single metric at all costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mobile-First Thinking Changed A Lot
&lt;/h2&gt;

&lt;p&gt;This project also changed how I think about mobile UX.&lt;/p&gt;

&lt;p&gt;Real-estate traffic is heavily mobile-first.&lt;/p&gt;

&lt;p&gt;While testing the production deployment on actual devices, I realized that many interfaces that felt “clean” on desktop became frustrating on smaller screens.&lt;/p&gt;

&lt;p&gt;That affected decisions around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;spacing&lt;/li&gt;
&lt;li&gt;modal behavior&lt;/li&gt;
&lt;li&gt;tap targets&lt;/li&gt;
&lt;li&gt;navigation&lt;/li&gt;
&lt;li&gt;lead capture flow&lt;/li&gt;
&lt;li&gt;scrolling experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Responsive design is not only about making layouts fit smaller screens.&lt;br&gt;
It’s about reducing friction during real interactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Tools Accelerated Development, But Didn’t Replace Engineering
&lt;/h2&gt;

&lt;p&gt;AI tools definitely accelerated parts of development during this project.&lt;/p&gt;

&lt;p&gt;They were extremely useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;speeding up implementation&lt;/li&gt;
&lt;li&gt;generating boilerplate&lt;/li&gt;
&lt;li&gt;exploring approaches&lt;/li&gt;
&lt;li&gt;debugging directionally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the hardest parts still required engineering judgment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;identifying root causes&lt;/li&gt;
&lt;li&gt;understanding constraints&lt;/li&gt;
&lt;li&gt;evaluating tradeoffs&lt;/li&gt;
&lt;li&gt;adapting architecture&lt;/li&gt;
&lt;li&gt;debugging infrastructure issues&lt;/li&gt;
&lt;li&gt;balancing UX and business goals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The “generate code” layer was only one part of shipping the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Decisions Directly Affect Business Outcomes
&lt;/h2&gt;

&lt;p&gt;One of the biggest mindset shifts during this project was realizing how directly technical decisions influence business outcomes.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improving upload reliability improved admin experience&lt;/li&gt;
&lt;li&gt;better metadata improved social previews&lt;/li&gt;
&lt;li&gt;SEO setup improved discoverability&lt;/li&gt;
&lt;li&gt;mobile UX decisions reduced friction&lt;/li&gt;
&lt;li&gt;lead capture flow decisions affected conversions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project gradually stopped feeling like:&lt;br&gt;
“building features”&lt;/p&gt;

&lt;p&gt;and started feeling more like:&lt;br&gt;
“designing systems that solve business problems reliably.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Project Was Valuable
&lt;/h2&gt;

&lt;p&gt;The most valuable part of this project wasn’t the final deployment itself.&lt;/p&gt;

&lt;p&gt;It was learning that real-world engineering involves much more than writing code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debugging unfamiliar problems&lt;/li&gt;
&lt;li&gt;understanding infrastructure behavior&lt;/li&gt;
&lt;li&gt;communicating with non-technical stakeholders&lt;/li&gt;
&lt;li&gt;balancing tradeoffs&lt;/li&gt;
&lt;li&gt;improving reliability&lt;/li&gt;
&lt;li&gt;thinking about users/business impact&lt;/li&gt;
&lt;li&gt;shipping systems end-to-end&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think that’s why production projects teach differently from tutorials.&lt;/p&gt;

&lt;p&gt;They force you to move beyond:&lt;br&gt;
“Does this work locally?”&lt;/p&gt;

&lt;p&gt;and start thinking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens in production?&lt;/li&gt;
&lt;li&gt;What happens under constraints?&lt;/li&gt;
&lt;li&gt;What happens for real users?&lt;/li&gt;
&lt;li&gt;What happens after deployment?&lt;/li&gt;
&lt;li&gt;What breaks unexpectedly?&lt;/li&gt;
&lt;li&gt;How do we recover/debug systematically?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still learning, but this project definitely changed how I think about software engineering.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>nextjs</category>
      <category>softwareengineering</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building SOC-AI: Sub-Second Security Triage with Groq &amp; Kestra</title>
      <dc:creator>Panic Engineer</dc:creator>
      <pubDate>Tue, 06 Jan 2026 12:38:00 +0000</pubDate>
      <link>https://dev.to/panicengineer/building-soc-ai-sub-second-security-triage-with-groq-kestra-51</link>
      <guid>https://dev.to/panicengineer/building-soc-ai-sub-second-security-triage-with-groq-kestra-51</guid>
      <description>&lt;h2&gt;
  
  
  The Motivation: Solving Alert Fatigue 🛡️
&lt;/h2&gt;

&lt;p&gt;Security teams are drowning in logs. I built &lt;strong&gt;SOC-AI&lt;/strong&gt; solo during the &lt;strong&gt;AI Agents Assemble Hackathon&lt;/strong&gt; (hosted on @wemakedevs) to prove that AI can handle the "boring" triage while humans keep control.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Triage:&lt;/strong&gt; Groq (Llama-3.3) for 500ms log analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orchestration:&lt;/strong&gt; Kestra for semi-autonomous remediation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js 15 (Live on Vercel!).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Deep Dive – Reliable AI &amp;amp; Orchestration
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges in AI agents is &lt;strong&gt;hallucination&lt;/strong&gt;. In a security context, a "hallucinated" IP address or action could be a disaster. I solved this using two core patterns:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Forcing Structured Output with Zod &amp;amp; Groq
&lt;/h3&gt;

&lt;p&gt;I didn't just ask the AI to "analyze the log." I defined a strict contract using Zod. This ensures that the high-speed Llama-3.3 model on Groq returns a precise JSON object that my backend can trust.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the Triage Schema&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SecurityTriageSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;low&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;medium&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;high&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;critical&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
  &lt;span class="na"&gt;threat_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Categorization like Brute Force, SQLi, etc.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;action_suggested&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;block_ip&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;disable_user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;monitor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
  &lt;span class="na"&gt;reasoning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Forcing Groq to adhere to the schema&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chatCompletion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;groq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;llama-3.3-70b-versatile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;response_format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;json_object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// Crucial for reliable JSON&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a SOC Triage Agent. Output ONLY JSON.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Analyze this log: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;rawLogData&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Semi-Autonomous Remediation via Kestra
&lt;/h3&gt;

&lt;p&gt;Trust is everything in security. Instead of letting the AI run wild, I built a &lt;strong&gt;Human-in-the-Loop&lt;/strong&gt; system.&lt;/p&gt;

&lt;p&gt;When the AI suggests an action (like &lt;code&gt;block_ip&lt;/code&gt;), it appears on my &lt;strong&gt;Next.js Dashboard&lt;/strong&gt;. Only after I click &lt;strong&gt;"Approve"&lt;/strong&gt; does the backend trigger a &lt;strong&gt;Kestra Workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Kestra?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Retries:&lt;/strong&gt; If the Firewall API is down, Kestra handles the retry logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit Trail:&lt;/strong&gt; Every action taken is logged visually in the Kestra UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separation of Concerns:&lt;/strong&gt; My Next.js app handles the UI, while Kestra handles the heavy infrastructure automation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;By combining &lt;strong&gt;Groq's speed&lt;/strong&gt; with &lt;strong&gt;Kestra's reliability&lt;/strong&gt;, SOC-AI can triage a log and present a remediation plan to an analyst in less than a second.&lt;/p&gt;

&lt;p&gt;This project was a solo build, and it taught me that the future of AI isn't just about the "chat" - it's about &lt;strong&gt;orchestration&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links &amp;amp; Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/kaushik0010/soc-ai" rel="noopener noreferrer"&gt;https://github.com/kaushik0010/soc-ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video Walkthrough:&lt;/strong&gt; &lt;a href="https://youtu.be/LbuHXiPznJE" rel="noopener noreferrer"&gt;https://youtu.be/LbuHXiPznJE&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What are your thoughts on semi-autonomous security? Would you trust an AI to suggest your firewall rules? Let's talk in the comments!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>javascript</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
