<?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: Aayushman Singh</title>
    <description>The latest articles on DEV Community by Aayushman Singh (@aayushmansingh).</description>
    <link>https://dev.to/aayushmansingh</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%2F1620063%2Fd8a01289-37e7-4365-b5f5-ce7a8c715aab.jpeg</url>
      <title>DEV Community: Aayushman Singh</title>
      <link>https://dev.to/aayushmansingh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aayushmansingh"/>
    <language>en</language>
    <item>
      <title>Three-tier escalating self-healing in Jarvis</title>
      <dc:creator>Aayushman Singh</dc:creator>
      <pubDate>Wed, 05 Aug 2026 10:53:10 +0000</pubDate>
      <link>https://dev.to/aayushmansingh/three-tier-escalating-self-healing-in-jarvis-32jb</link>
      <guid>https://dev.to/aayushmansingh/three-tier-escalating-self-healing-in-jarvis-32jb</guid>
      <description>&lt;p&gt;Last week I watched a production service get restarted 847 times in four hours because a downstream dependency was having a 200ms tantrum. Not down. Not broken. Just slow enough to trip a health check. Every single time, Kubernetes went “oops, dead” and yeeted the pod into the sun. By morning the logs looked like glitch art and the actual bug, if there even was one, was buried under a mountain of identical stack traces.&lt;/p&gt;

&lt;p&gt;That’s when it hit me: we treat “failed” like it’s one word. It isn’t. Some failures just need a breath. Some need a doctor. Some need surgery. And if your only move is “restart and hope,” you’re either burning money on blips or ignoring bugs that restarts will never touch.&lt;/p&gt;

&lt;p&gt;I ended up sketching a three-tier recovery system that prices the fix to match the failure. Think of it like triage in an ER, except the nurses are circuit breakers and the surgeons are LLMs with strict instructions not to touch anything outside the operating field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 1: reflexes&lt;/strong&gt;&lt;br&gt;
Tier 1 is pure autonomic reflex. Component supervisor, exponential backoff, per-component circuit breaker, maybe a category-specific override if you’re fancy. Sub-second latency, zero LLM calls, zero round-trips to some API that bills you per token. This is the stuff that should handle 95% of your incidents: a GC pause, a slow disk write, a brief upstream blip, some noisy neighbor hogging CPU on the same node.&lt;/p&gt;

&lt;p&gt;I used to think “self-healing” meant something with transformers in it. Turns out most healing is just “wait 400ms and try again, bro.”&lt;/p&gt;

&lt;p&gt;The circuit breaker is the real hero. After N failures in a window, it stops the bleeding. Component goes degraded. Supervisor stops hammering restarts. And only then—only when the cheap reflexes have failed—do we escalate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 2: the immune system&lt;/strong&gt;&lt;br&gt;
That’s Tier 2. A watcher collects an evidence bundle: recent logs, the last traceback, on-disk state files, environment context. It hands that bundle to a small triage LLM and asks one question: which bucket?&lt;/p&gt;

&lt;p&gt;Not “what should we do?” Not “write me a fix.” Just pick from eight options:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;class FailureCategory(Enum):&lt;br&gt;
CORRUPT_STATE = "corrupt_state"&lt;br&gt;
STALE_LOCK = "stale_lock"&lt;br&gt;
RESOURCE_EXHAUSTION = "resource_exhaustion"&lt;br&gt;
UPSTREAM_DOWN = "upstream_down"&lt;br&gt;
CONFIG_ERROR = "config_error"&lt;br&gt;
CODE_BUG = "code_bug"&lt;br&gt;
DEPENDENCY_NOT_READY = "dependency_not_ready"&lt;br&gt;
TRANSIENT_UPSTREAM = "transient_upstream"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's it. Eight values. The LLM cannot invent category nine. It cannot suggest a shell script. It classifies, then regular code looks up the action:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;REPAIR_ACTIONS = {&lt;br&gt;
FailureCategory.CORRUPT_STATE: reset_state_file,&lt;br&gt;
FailureCategory.STALE_LOCK: remove_stale_lock,&lt;br&gt;
FailureCategory.RESOURCE_EXHAUSTION: prune_resources,&lt;br&gt;
FailureCategory.UPSTREAM_DOWN: wait_and_escalate,&lt;br&gt;
FailureCategory.CODE_BUG: escalate_to_tier_3,&lt;br&gt;
}&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the part that clicked for me. LLMs are great at pattern matching over messy context, but they’re a bad idea for safely executing arbitrary commands. So don’t let them. Constrain the output space to an enum and suddenly the decision is auditable. You can log “classifier said stale_lock” and anyone can verify whether that made sense. Compare that to a free-form prompt where the model returns “I think you should delete /var/lib/data and also maybe restart postgres.” Hard pass.&lt;/p&gt;

&lt;p&gt;Tier 2 costs one cheap LLM call per real failure. Not per blip. Blips die in Tier 1. So you’re paying maybe a few cents for incidents that actually need a brain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 3: surgery&lt;/strong&gt;&lt;br&gt;
Then there’s Tier 3. If the classifier returns code_bug, you bring out the bigger model. It reads the failing component’s source code, generates a patch, runs the existing test suite, and—here’s the kicker—only auto-deploys if every changed file lives inside that component’s module subtree.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;def patch_is_in_scope(patch: Patch, component_module: Path) -&amp;gt; bool:&lt;br&gt;
return all(&lt;br&gt;
changed_file.resolve().is_relative_to(component_module.resolve())&lt;br&gt;
for changed_file in patch.changed_files()&lt;br&gt;
)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That scope guard is everything. LLM patch agents hallucinate. They get over-eager. I've seen a "fix" try to refactor three unrelated modules because the model decided everything was connected. The scope guard says: no. You fix this component. If the real fix needs to touch both config and consumer together, the patch gets rejected and a human takes over. Slower? Sure. But one bad auto-deploy can tank the whole system, so I'll take the slower path.&lt;/p&gt;

&lt;p&gt;The test suite check is obvious but worth stating: if the patch breaks existing tests, it doesn't ship. The model writes code, but deterministic gates decide whether it runs.&lt;/p&gt;

&lt;p&gt;Don’t let the tiers leak&lt;/p&gt;

&lt;p&gt;Now here’s where it gets tricky. The boundaries matter more than the tiers.&lt;/p&gt;

&lt;p&gt;If your circuit breaker resets too aggressively, Tier 2 never fires and you silently absorb a thousand restarts a day. The underlying bug becomes invisible noise. I made this mistake early—set the breaker timeout to 5 seconds because I was impatient. Ended up masking a real state corruption issue for two weeks. Not my finest moment lmao.&lt;/p&gt;

&lt;p&gt;If you let the Tier 2 classifier invent repair actions, you’ve basically rebuilt Tier 3 with worse safety. The whole point of the enum is that the LLM doesn’t get a steering wheel.&lt;/p&gt;

&lt;p&gt;And if your Tier 3 scope guard is loose, congratulations, you’ve given an LLM write access to your entire codebase. I’ve seen enough agent demos go sideways to know that’s not a bet I want to take in production.&lt;/p&gt;

&lt;p&gt;The real insight isn’t that any of these tiers are new. Circuit breakers are ancient. Diagnostic LLMs exist. Code-writing agents exist. What’s new is composing them with strict escalation gates so each tier only handles the failures it’s priced for. Cheap stuff stays cheap. Rare, hard stuff gets expensive attention. No tier leaks into the next.&lt;/p&gt;

&lt;p&gt;And this pattern pops up everywhere once you start looking. Spam filters do it: regex first, small classifier second, human review third. Compilers do it: parse error, suggested fix, ask the user. Anywhere the right action costs wildly different amounts across cases, tiered escalation pays for itself.&lt;/p&gt;

&lt;p&gt;So if you’re building long-running services, stop defaulting to “restart and hope.” Build recovery like you actually understand that failures come in flavors. Let Tier 1 eat the transient noise. Let Tier 2 classify the real incidents into a tiny, maintainable enum. Let Tier 3 patch, but only inside a cage with thick bars and a good test suite.&lt;/p&gt;

&lt;p&gt;The future isn’t an LLM that runs your ops team. It’s an LLM that knows exactly when it’s allowed to speak, what it’s allowed to say, and where it’s allowed to touch. If you can’t tell I’m big on AI knowing its place.&lt;/p&gt;

&lt;p&gt;For those following along my twitter for a while, this is exactly what I’ve put into &lt;a href="https://jarvis.aayushman.dev" rel="noopener noreferrer"&gt;Jarvis&lt;/a&gt; (to be renamed) , my personal assistant thats heavily inspirted by MCU Jarvis from the movies. Work in progress still but its at a decent point now. Look forward to more blogs on Jarvis’ internals coming up soon.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>HackHound: Building a Modern Web Security Testing Tool with React and Python</title>
      <dc:creator>Aayushman Singh</dc:creator>
      <pubDate>Sat, 28 Dec 2024 11:04:14 +0000</pubDate>
      <link>https://dev.to/aayushmansingh/hackhound-building-a-modern-web-security-testing-tool-with-react-and-python-4jb3</link>
      <guid>https://dev.to/aayushmansingh/hackhound-building-a-modern-web-security-testing-tool-with-react-and-python-4jb3</guid>
      <description>&lt;h1&gt;
  
  
  Building HackHound: A Modern Web Security Testing Tool 🔒
&lt;/h1&gt;

&lt;p&gt;Hey DEV community! 👋 I'm excited to share my latest project - HackHound, an open-source web security testing tool that combines the power of Python with a modern React frontend. In this post, I'll walk you through the architecture, key features, and some interesting challenges I encountered during development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Another Security Tool? 🤔
&lt;/h2&gt;

&lt;p&gt;While there are many security testing tools available, I found that most either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lack a modern, user-friendly interface&lt;/li&gt;
&lt;li&gt;Don't provide real-time feedback&lt;/li&gt;
&lt;li&gt;Require complex setup and configuration&lt;/li&gt;
&lt;li&gt;Don't support concurrent testing methods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HackHound aims to solve these problems by providing a streamlined, visual approach to web security testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack Overview 🛠️
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;React 18 with Vite for blazing-fast development&lt;/li&gt;
&lt;li&gt;Real-time updates using WebSocket connections&lt;/li&gt;
&lt;li&gt;Clean, responsive UI for better visualization&lt;/li&gt;
&lt;li&gt;Firebase for authentication&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;FastAPI for high-performance async operations&lt;/li&gt;
&lt;li&gt;Python 3.10 for robust security testing capabilities&lt;/li&gt;
&lt;li&gt;Comprehensive logging and error handling&lt;/li&gt;
&lt;li&gt;Modular architecture for easy extensions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Features 🌟
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Mode Fuzzing&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/fuzz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FuzzRequest&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
       &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
       &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fuzz_directory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
           &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;directories&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_directory_fuzzing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fuzz_subdomain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
           &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subdomains&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_subdomain_fuzzing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="c1"&gt;# More fuzzing modes...
&lt;/span&gt;       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Progress Updates&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FuzzingProgress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setProgress&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fuzz_progress&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="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="nf"&gt;setProgress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;progress&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="p"&gt;[]);&lt;/span&gt;
     &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ProgressBar&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;   &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Adding Daytona to an Existing Project
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Git repository for your existing project&lt;/li&gt;
&lt;li&gt;Daytona CLI installed on your system&lt;/li&gt;
&lt;li&gt;A Daytona-compatible IDE (VS Code recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Initialize Daytona Configuration
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to your project's root directory:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/your/project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create the Daytona configuration directory:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; .daytona
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a &lt;code&gt;.daytona&lt;/code&gt; directory for the basic configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Configure Your Development Environment
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;code&gt;.daytona/devcontainer.json&lt;/code&gt; file and customize your development environment:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Project Name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcr.microsoft.com/devcontainers/base:ubuntu"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;appropriate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;image&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"features"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"ghcr.io/devcontainers/features/node:1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;required&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;features&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"ghcr.io/devcontainers/features/python:1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"customizations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"vscode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"extensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"dbaeumer.vscode-eslint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;desired&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;extensions&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"ms-python.python"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Configure project-specific settings in &lt;code&gt;.daytona/workspace.yaml&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;your-project-name&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;project&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;description"&lt;/span&gt;
&lt;span class="na"&gt;defaultWorkspace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;git&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;repositories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/your-username/your-repo.git&lt;/span&gt;
        &lt;span class="na"&gt;checkout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Add Project Dependencies
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create a &lt;code&gt;.daytona/setup.sh&lt;/code&gt; script to handle project initialization:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# Install project dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;           &lt;span class="c"&gt;# For Node.js projects&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt  &lt;span class="c"&gt;# For Python projects&lt;/span&gt;

&lt;span class="c"&gt;# Add any other setup commands&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Make the setup script executable:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x .daytona/setup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Version Control Integration
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Add Daytona configuration files to version control:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add .daytona/
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add Daytona configuration"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Update &lt;code&gt;.gitignore&lt;/code&gt; to exclude Daytona-specific files:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.daytona/.tmp/
.daytona/logs/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Team Usage
&lt;/h2&gt;

&lt;p&gt;Share these instructions with your team:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Daytona CLI&lt;/li&gt;
&lt;li&gt;Clone the repository&lt;/li&gt;
&lt;li&gt;Start the development environment:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;daytona start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;Common issues and solutions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Container fails to build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check base image compatibility&lt;/li&gt;
&lt;li&gt;Verify feature dependencies&lt;/li&gt;
&lt;li&gt;Review setup script permissions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IDE integration issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure VS Code Remote Development extension is installed&lt;/li&gt;
&lt;li&gt;Check IDE configuration in devcontainer.json&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Keep the base image minimal and specific to your needs&lt;/li&gt;
&lt;li&gt;Document any custom configuration in README.md&lt;/li&gt;
&lt;li&gt;Regularly update Daytona configuration as project requirements change&lt;/li&gt;
&lt;li&gt;Test the development environment with different team members before deployment&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://daytona.io/docs" rel="noopener noreferrer"&gt;Daytona Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://containers.dev/implementors/json_reference/" rel="noopener noreferrer"&gt;DevContainer Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/remote/remote-overview" rel="noopener noreferrer"&gt;VS Code Remote Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Development Environment 🚀
&lt;/h2&gt;

&lt;p&gt;I used Daytona for standardizing the development environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HackHound Dev Environment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dockerFile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dockerfile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"forwardPorts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5173&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"postCreateCommand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm install &amp;amp;&amp;amp; pip install -r requirements.txt"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's Next? 🎯
&lt;/h2&gt;

&lt;p&gt;I'm planning several exciting features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Integration with other security tools&lt;/li&gt;
&lt;li&gt;Custom payload generators&lt;/li&gt;
&lt;li&gt;Advanced reporting capabilities&lt;/li&gt;
&lt;li&gt;CI/CD pipeline integration&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It Out! 🔥
&lt;/h2&gt;

&lt;p&gt;The project is open source and available on GitHub: &lt;a href="https://github.com/aayushman-singh/HackHound" rel="noopener noreferrer"&gt;HackHound Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get started:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repository&lt;/span&gt;
git clone https://github.com/aayushman-singh/hackhound.git

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install
cd &lt;/span&gt;frontend &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install
cd&lt;/span&gt; ../app &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="c"&gt;# Start the application&lt;/span&gt;
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Contributing 🤝
&lt;/h2&gt;

&lt;p&gt;Contributions are welcome! Whether it's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding new fuzzing techniques&lt;/li&gt;
&lt;li&gt;Improving the UI/UX&lt;/li&gt;
&lt;li&gt;Enhancing documentation&lt;/li&gt;
&lt;li&gt;Reporting bugs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to open issues and submit PRs!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 🌈
&lt;/h2&gt;

&lt;p&gt;Building HackHound has been an exciting journey in combining modern web development with security testing. I'd love to hear your thoughts and suggestions!&lt;/p&gt;

&lt;p&gt;Have you built similar tools? What challenges did you face? Let's discuss in the comments below! 👇&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Follow me for more security and web development content!&lt;/em&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://github.com/aayushman-singh" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://x.com/aayushman2703" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/aayushman-singh-zz/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>python</category>
      <category>security</category>
    </item>
  </channel>
</rss>
