<?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: Hemanshu Upadhyay</title>
    <description>The latest articles on DEV Community by Hemanshu Upadhyay (@upadhyayhari_).</description>
    <link>https://dev.to/upadhyayhari_</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%2F841654%2Fc40a8fba-dc4f-4a03-b8fb-f721eac061e3.jpg</url>
      <title>DEV Community: Hemanshu Upadhyay</title>
      <link>https://dev.to/upadhyayhari_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/upadhyayhari_"/>
    <language>en</language>
    <item>
      <title>Making a phone agent in Gujarati feel less slow</title>
      <dc:creator>Hemanshu Upadhyay</dc:creator>
      <pubDate>Tue, 29 Sep 2026 06:20:20 +0000</pubDate>
      <link>https://dev.to/upadhyayhari_/making-a-phone-agent-in-gujarati-feel-less-slow-1a11</link>
      <guid>https://dev.to/upadhyayhari_/making-a-phone-agent-in-gujarati-feel-less-slow-1a11</guid>
      <description>&lt;p&gt;On Sunday I built Vaani, a phone receptionist demo for a dental clinic in Surat that doesn't exist. It has a keypad menu for Gujarati, Hindi or English, tools to book, move and cancel appointments in a diary, and a route to the clinic's own front-desk number when a person should take over. The diary lives in memory and resets on restart, and there's no live number yet. So everything below is how it's built and what the tests check, not what callers did.&lt;/p&gt;

&lt;p&gt;A lot of the design is about what happens while the model is still working. A turn can include tool calls (look up Tuesday, check which dentist is free, book the slot), and a phone line has no typing indicator to cover the wait.&lt;/p&gt;

&lt;h2&gt;
  
  
  A turn that outlives the webhook
&lt;/h2&gt;

&lt;p&gt;With Twilio's &lt;code&gt;&amp;lt;Gather&amp;gt;&lt;/code&gt; speech input, a call is a series of HTTP requests. Twilio posts what the caller said, you answer with TwiML (say this, listen again), and Twilio allows a request up to 15 seconds.&lt;/p&gt;

&lt;p&gt;The simple version holds that request open until the model has finished its whole reply. In Vaani a turn isn't tied to one request. It's an object that lives in memory across several:&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="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;PendingTurn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TurnResult&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;startedAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="cm"&gt;/** Webhooks answered so far for this turn. */&lt;/span&gt;
  &lt;span class="nl"&gt;waits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="cm"&gt;/** Every sentence the agent has produced this turn, in order. */&lt;/span&gt;
  &lt;span class="nl"&gt;sentences&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="cm"&gt;/** Server-side cursor into `sentences`. */&lt;/span&gt;
  &lt;span class="nl"&gt;spoken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// (plus a wake-up callback, trimmed here)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the transcription comes in, the turn starts and the first request gives the model up to 900 ms. If the turn is done by then, its reply goes back. If not, the response carries the complete sentences the agent has written so far, or a short holding line if there aren't any, and ends with a redirect to the server. The next request picks up the same turn and waits again, up to 5 seconds this time, returning sooner if the turn finishes or a new sentence turns up. Round it goes. That &lt;code&gt;spoken&lt;/code&gt; counter is bookkeeping on the server, not proof of what a caller heard.&lt;/p&gt;

&lt;p&gt;Those are server-side waits, not the moment a caller hears something. Preparing audio can add up to another 1.5 seconds (more on that below), and Twilio still has to fetch and play the response. Measuring what a caller actually hears is the next job.&lt;/p&gt;

&lt;p&gt;The first holding line changes from turn to turn ("One moment.", "Let me check.", "Okay, checking."). If a turn needs a second wait with nothing new to say, it's "Still on it, thanks for waiting."&lt;/p&gt;

&lt;p&gt;There's a ceiling. The turn has a 20 second budget, checked each time a request picks it up. Run past it, or throw an error, and the call goes to the handoff path, which dials the clinic's number. If there's no number configured or nobody picks up, it notes a callback instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sentences out of a token stream
&lt;/h2&gt;

&lt;p&gt;The best thing to say during the first wait is the agent's own first sentence, if it has written one. A reply that starts "Let me check Tuesday for you" is a perfectly good thing to hear while the tool runs. That means cutting the token stream into sentences as it arrives, in three scripts.&lt;/p&gt;

&lt;p&gt;A full stop is the awkward one. It turns up in "499.00", in "Dr. Shah", and at the end of a half-streamed "4." that's about to become "4.30". So a full stop only counts once whitespace has arrived after it, which handles the numbers. Titles need their own check, because "Dr." already has a space after it, so there's an abbreviation list with the English, Gujarati and Hindi ones ("Dr.", "ડૉ.", "डॉ." and friends).&lt;/p&gt;

&lt;p&gt;Hindi also ends sentences with the danda, "।", and it can arrive with no space after it. So the whitespace rule is for the full stop only. A danda doesn't need a space after it, though it still waits for a little more input (so trailing punctuation or a closing quote gets absorbed) and for the length check below to pass:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TERMINATORS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.&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;!&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;?&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;।&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;…&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;isAbbreviation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&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="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;MIN_SENTENCE_CHARS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two limits sit around that, both counted in JavaScript string length rather than visible letters. A boundary less than 12 units in is skipped, so tiny fragments don't go out on their own. If the buffer passes 240 with no ending in sight, it's cut at the last space at or before 240, or hard at 240 if there's no usable space, so audio keeps moving. When the model finishes, whatever's left is flushed, short or not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The voice was the slow part in Gujarati
&lt;/h2&gt;

&lt;p&gt;Voices are picked by language. With an ElevenLabs key set, English and Hindi use their Flash v2.5 model, which my build notes put at about 0.6 to 0.8 seconds a line. For Gujarati I tried eleven_v3, and in that one session it took about 8 seconds a sentence. That's far too slow for a call, so Gujarati goes through Twilio's own Google Chirp 3 HD voice instead, which Twilio synthesises itself.&lt;/p&gt;

&lt;p&gt;For English and Hindi, each sentence is queued for synthesis as soon as it's written (two requests to the provider at a time, so one can wait its turn). Before a response goes back, the router waits up to 1.5 seconds for that audio. If a clip is ready it's played. If not, the line is spoken with Twilio's Chirp voice. The fixed prompts (the menu, consent, the holding lines) are queued for synthesis at startup and cached, with the same fallback if a clip isn't ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's tested and what isn't
&lt;/h2&gt;

&lt;p&gt;There are 45 tests, covering things like sentence boundaries, the diary and cancellation rules, and which fields are allowed into diagnostics. A separate eval script has 11 scripted conversations across the three languages, checking which tools the agent called and what state the diary ended up in. They're text conversations, not recorded phone calls.&lt;/p&gt;

&lt;p&gt;It's still turn based. Replies from a finished turn go inside the speech gather in the TwiML, which is what lets a caller talk over them. The lines sent during an unfinished turn sit outside it, before the redirect. The tests check the TwiML that's generated; how interruptions behave on a real call is still to be tried. Full duplex audio would mean Twilio Media Streams and a streaming speech stack, and the agent sits behind an interface so that can be swapped in later.&lt;/p&gt;

&lt;p&gt;Next is a real number, and timing what a caller actually hears on an Indian mobile network.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I made Claude Code and Codex race on my repo. The rule went against the agent that did more.</title>
      <dc:creator>Hemanshu Upadhyay</dc:creator>
      <pubDate>Wed, 02 Sep 2026 08:57:20 +0000</pubDate>
      <link>https://dev.to/upadhyayhari_/i-made-claude-code-and-codex-race-on-my-repo-the-rule-went-against-the-agent-that-did-more-2b8j</link>
      <guid>https://dev.to/upadhyayhari_/i-made-claude-code-and-codex-race-on-my-repo-the-rule-went-against-the-agent-that-did-more-2b8j</guid>
      <description>&lt;p&gt;Every week someone asks which coding agent is better, and every answer is a vibe. I wanted a diff.&lt;/p&gt;

&lt;p&gt;So I built pairmark. One command in a JavaScript or TypeScript repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx pairmark &lt;span class="s2"&gt;"add rate limiting to POST /api/login"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It creates two git worktrees at the same commit, gives Claude Code and Codex the identical brief, and streams both live in a split screen. When they finish, your own checks run in each worktree: tests, typecheck, lint, whatever &lt;code&gt;package.json&lt;/code&gt; has. Then each agent reviews both patches blind, labelled A and B in random order, and scores correctness, completeness, quality and safety with citations. You get one HTML file with the verdict, the rule that decided it, both diffs, and a receipt image sized for posting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rules fit in five lines
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;If only one agent changed any file, it wins by default and the report says so.&lt;/li&gt;
&lt;li&gt;If exactly one patch passes every check without touching the check configuration, it wins.&lt;/li&gt;
&lt;li&gt;Otherwise, if both judges pick the same patch, it wins.&lt;/li&gt;
&lt;li&gt;If the judges split, or both call it a tie, it is a tie, and the dissent is printed.&lt;/li&gt;
&lt;li&gt;If neither judge returns a decision, the report shows the evidence only.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two of those lines came out of an argument. I asked Codex to attack the first design before writing any code. Its second-round critique said a patch could win the checks by weakening them, and that blind judging by the same two models is only partly blind, since a model can recognise its own style. Both points are in the rules: a patch that edits &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;tsconfig&lt;/code&gt;, or any test or lint configuration is flagged and cannot win on the checks alone, and judges only decide when they agree. A split is never averaged into a winner, because a 0.3 gap between two models grading their own work blind is noise, and calling noise a winner is the fastest way to make a tool untrustworthy. The whole discussion ships in the repo, verbatim.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first race on its own repository
&lt;/h2&gt;

&lt;p&gt;I asked both agents to add a &lt;code&gt;runs&lt;/code&gt; subcommand to pairmark itself: list past runs as a table, newest first, with a unit test.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Codex&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time&lt;/td&gt;
&lt;td&gt;3m 28s&lt;/td&gt;
&lt;td&gt;5m 15s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Files changed&lt;/td&gt;
&lt;td&gt;4 (+122, -3)&lt;/td&gt;
&lt;td&gt;5 (+105, -3)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell commands&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context read&lt;/td&gt;
&lt;td&gt;548K tokens&lt;/td&gt;
&lt;td&gt;1.23M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;typecheck, test, build&lt;/td&gt;
&lt;td&gt;pass, pass, pass&lt;/td&gt;
&lt;td&gt;pass, pass, pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Judge score, avg of two blind judges&lt;/td&gt;
&lt;td&gt;8.6 / 10&lt;/td&gt;
&lt;td&gt;8.0 / 10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both green. Then the twist. Codex also noticed that my build script would fail on a fresh checkout, because it copied a file into a directory that did not exist yet, and it fixed that. The fix lives in &lt;code&gt;package.json&lt;/code&gt;. Rule 2 says a patch that touches the check configuration cannot win on the checks alone, so the win went to Claude Code, and Codex's dissent was recorded on the report: as a judge, Codex would have picked its own patch for matching the requested columns exactly.&lt;/p&gt;

&lt;p&gt;That is the tool working as designed, against the agent that arguably did more. I took Codex's fix by hand and shipped Claude Code's patch as the real &lt;code&gt;runs&lt;/code&gt; command. You can run it today.&lt;/p&gt;

&lt;h2&gt;
  
  
  The race before that was a tie
&lt;/h2&gt;

&lt;p&gt;On a demo repo, the task was input validation with a typed error and tests. Both passed. Both judges, reviewing blind, picked their own patch. The rule says that is a tie, and the report says why each judge leaned the way it did: Claude Code's judge valued the broader tests, Codex's judge valued the smaller diff.&lt;/p&gt;

&lt;p&gt;I find that more useful than a number. The same task produced two defensible answers, and the report tells you which values produced which answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is not
&lt;/h2&gt;

&lt;p&gt;It is not a benchmark. It says "on this task, in this repo, today", and it says the rule that decided it. Run it ten times on ten real tasks and you have a basis for a decision about your own codebase. Run it once and you have a receipt.&lt;/p&gt;

&lt;p&gt;It also cannot remove model preference from judging. That is why checks outrank judges, why judging is cross-checked, and why the report shows each judge's pick and reason instead of a single score.&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No API keys, no accounts. It runs on the Claude Code and Codex subscriptions you already have, through their CLIs.&lt;/li&gt;
&lt;li&gt;TypeScript, Node 20, zero runtime dependencies. MIT.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;node_modules&lt;/code&gt; is cloned into each worktree with copy-on-write where the filesystem allows, so both agents get their own tree in milliseconds.&lt;/li&gt;
&lt;li&gt;Dirty working trees are snapshotted into both worktrees as the baseline, so the agents start from what you actually see.&lt;/li&gt;
&lt;li&gt;Everything from a run stays on disk: raw event streams from both CLIs, both patches, the judge prompts, the worktrees.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/Hemanshu-Upadhyay/pairmark" rel="noopener noreferrer"&gt;https://github.com/Hemanshu-Upadhyay/pairmark&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you run it on your repo, I would like to see the receipt. And if there is a repo you cannot share, send me the task and I will run it and send you the report.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>javascript</category>
      <category>testing</category>
    </item>
    <item>
      <title>I have built the same pipeline five times. The fifth took 68 minutes.</title>
      <dc:creator>Hemanshu Upadhyay</dc:creator>
      <pubDate>Sun, 16 Aug 2026 11:22:13 +0000</pubDate>
      <link>https://dev.to/upadhyayhari_/i-have-built-the-same-pipeline-five-times-the-fifth-took-68-minutes-eem</link>
      <guid>https://dev.to/upadhyayhari_/i-have-built-the-same-pipeline-five-times-the-fifth-took-68-minutes-eem</guid>
      <description>&lt;p&gt;On 11 June I wrote a program to find contract manufacturers for a supplements brand launching in India. The folder was created at 11:35 in the morning. There was a finished, scored report sitting in it at 13:55. Two hours and twenty minutes, most of which was me arguing with the scoring weights.&lt;/p&gt;

&lt;p&gt;Three days later I wanted marketing agencies instead of factories, so I copied the shape and repointed it. 13:47 to 15:56.&lt;/p&gt;

&lt;p&gt;On 23 June I wanted packaging and branding studios. That folder did not exist at 10:48 and there was a scored report in it at 11:56. Sixty-eight minutes.&lt;/p&gt;

&lt;p&gt;Then one for remote jobs priced in dollars, nineteen commits between 14:19 and 15:15 on a Sunday. Then, on 14 August, one that finds companies who might buy from my own studio.&lt;/p&gt;

&lt;p&gt;Underneath, they are the same program. Read a brief. Search. Open the actual pages rather than trusting the search snippet. Score each candidate against the brief. Write out the reasoning for every score. Flag the rows that look thin.&lt;/p&gt;

&lt;p&gt;I get asked, in a slightly suspicious tone, why I automate so much of my own work. The assumption inside the question is that this is about speed, and that speed is a shallow thing to want.&lt;/p&gt;

&lt;p&gt;Speed is real, and it is the least interesting part.&lt;/p&gt;

&lt;h2&gt;
  
  
  The machine keeps a file. I don't.
&lt;/h2&gt;

&lt;p&gt;Last week I ran a verification pass over the fifth pipeline, the one that finds my own prospects. It went back through what it had already qualified and opened each company properly.&lt;/p&gt;

&lt;p&gt;It disagreed with itself. Of the 58 companies it got through, it disqualified 21. Thirty-six percent.&lt;/p&gt;

&lt;p&gt;I published that number, and a few people read it as an argument against building the thing in the first place.&lt;/p&gt;

&lt;p&gt;Compare it to the handmade version. Earlier in August I wrote six outreach messages by hand. One company at a time, real research, a specific observation about each business, hours of work across a week. Every one of the six was delivered and read. Zero replied.&lt;/p&gt;

&lt;p&gt;Now tell me my error rate on those six.&lt;/p&gt;

&lt;p&gt;There isn't one. There is no file. There is no column where a past version of me wrote down what he believed about each company and why, so there is nothing to check the outcome against. All I have is a memory of feeling careful, and feeling careful is not evidence of anything.&lt;/p&gt;

&lt;p&gt;That is the whole bias in one line. I would rather run a process that is measurably wrong 36% of the time than one that is unmeasurably wrong by an amount nobody will ever know.&lt;/p&gt;

&lt;p&gt;A measured error is a Tuesday afternoon of work. The scoring model was reading "no marketing person listed on the team page" as "no marketing person exists," which is a different claim, and once it is written in a file you can see it and fix it. An unmeasured error is not a bug. It becomes a personality. It sits there for years being called judgement.&lt;/p&gt;

&lt;p&gt;Human work does not produce receipts unless you force it to, and almost nobody forces it to. Automating a task is the cheapest way I have found to make my own reasoning legible enough to be proven wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  What 68 minutes does to which ideas you try
&lt;/h2&gt;

&lt;p&gt;The second half of the bias is more boring and probably matters more.&lt;/p&gt;

&lt;p&gt;The first pipeline cost two hours and twenty minutes. The third cost 68. That collapse changes which ideas are allowed to exist.&lt;/p&gt;

&lt;p&gt;When a small system costs a week of evenings, you only build the ones you are already confident about, which means you only ever build things you already believed. When it costs an hour, you build the stupid one. In June I built a thing at one in the morning that takes a photo of a dress and finds similar ones across Indian stores, because my girlfriend asked and it was thirty-four minutes of work. It is running. It is genuinely useful. It would never have survived a business case.&lt;/p&gt;

&lt;p&gt;Roughly a third of the ones I built on a whim turned out better than the ones I picked carefully, and I do not think that is luck. Careful selection filters for ideas that are easy to justify in advance, and the value in this stuff is rarely where the justification is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the bias is wrong
&lt;/h2&gt;

&lt;p&gt;I want to be honest about the failure, because the version of this argument without it is marketing.&lt;/p&gt;

&lt;p&gt;I sent from the wrong stage. I looked at discovery output that had not been enriched or verified, decided the rows looked right, and sent ten emails. Two hard bounced on a sending domain that was nine days old. You do not get to undo that. The system was not wrong there. I was impatient with a system that was still working, which is a specific failure mode automation creates rather than solves.&lt;/p&gt;

&lt;p&gt;And a second thing, which is the real boundary. Two of fourteen prospects died at a layer no pipeline can see: one founder wearing an OpenToWork banner, one correct decision maker with five connections and no posts, ever. Neither is discoverable from company data. No amount of pipeline reaches it.&lt;/p&gt;

&lt;p&gt;So the rule I hold now: &lt;strong&gt;automate the collection, never the conclusion.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every one of these five stops before the send. The step that has caught more real problems per minute than anything upstream is me opening one human being's profile and reading it for thirty seconds. That step gets more expensive as everything around it gets cheaper, and it should, because it was always the actual job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unglamorous version
&lt;/h2&gt;

&lt;p&gt;I am not biased toward automation because it is impressive. Most of what I have built is a few hundred lines that reads pages and writes a CSV with a reasons column.&lt;/p&gt;

&lt;p&gt;I am biased because it turns my opinions into artifacts. An opinion in your head cannot be audited, cannot be handed to someone else, and cannot be wrong out loud. The same opinion written as a scoring function can be all three by lunchtime.&lt;/p&gt;

&lt;p&gt;Thirty-six percent wrong and improving beats an unknown number and a good feeling. That is it. That is the whole argument.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>startup</category>
    </item>
    <item>
      <title>An AI Agent Found a Bug Nobody Wrote a Test For</title>
      <dc:creator>Hemanshu Upadhyay</dc:creator>
      <pubDate>Mon, 03 Aug 2026 19:48:23 +0000</pubDate>
      <link>https://dev.to/upadhyayhari_/an-ai-agent-found-a-bug-nobody-wrote-a-test-for-2ab2</link>
      <guid>https://dev.to/upadhyayhari_/an-ai-agent-found-a-bug-nobody-wrote-a-test-for-2ab2</guid>
      <description>&lt;p&gt;An AI agent found a bug that let a hotel check a guest into a room &lt;strong&gt;someone was already sleeping in.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nobody wrote that test.&lt;/p&gt;

&lt;p&gt;Nobody told it where to look.&lt;/p&gt;

&lt;p&gt;We pointed it at the repository and gave it no test plan, no selectors, no "click here, assert that."&lt;/p&gt;

&lt;p&gt;It figured the product out on its own.&lt;/p&gt;

&lt;p&gt;It read the routes, API modules, services, and database schema, then reconstructed the business workflow:&lt;/p&gt;

&lt;p&gt;• Book → Check-in → Night Audit → Checkout&lt;br&gt;
• Group Reservations&lt;br&gt;
• Cancellation → Availability Release&lt;/p&gt;

&lt;p&gt;Then it executed those workflows end-to-end.&lt;/p&gt;

&lt;p&gt;Not fake data.&lt;/p&gt;

&lt;p&gt;Not mocked APIs.&lt;/p&gt;

&lt;p&gt;Real reservations.&lt;/p&gt;

&lt;p&gt;It verified data on the backend—not just whether the UI looked correct.&lt;/p&gt;

&lt;p&gt;It completed &lt;strong&gt;364 steps&lt;/strong&gt; for &lt;strong&gt;$1.79&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And it found a critical production bug:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The check-in endpoint never validated room occupancy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That isn't a broken button.&lt;/p&gt;

&lt;p&gt;That's a guest arriving at 11 PM, walking into an occupied room, and your hotel paying for refunds the next morning.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why this isn't another "AI testing your app" demo
&lt;/h3&gt;

&lt;p&gt;Most browser agents only know how to click buttons and compare screenshots.&lt;/p&gt;

&lt;p&gt;If the UI looks fine, they assume everything is fine.&lt;/p&gt;

&lt;p&gt;Real products don't fail that way.&lt;/p&gt;

&lt;p&gt;They fail in the gap between what the UI claims happened and what the backend actually persisted.&lt;/p&gt;

&lt;p&gt;Our approach changes two things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It reads the code before touching the UI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of following a human-written script, it derives its own test plan from your routes, services, and schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. It verifies the backend, not just the browser.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It drives the UI with Playwright while validating state through authenticated API calls.&lt;/p&gt;

&lt;p&gt;A green toast message isn't enough.&lt;/p&gt;

&lt;p&gt;If the reservation wasn't actually saved, the test fails.&lt;/p&gt;




&lt;h3&gt;
  
  
  Three mistakes we made building it
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Agents aren't deterministic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One run found zero bugs.&lt;/p&gt;

&lt;p&gt;The next found five.&lt;/p&gt;

&lt;p&gt;Same repository.&lt;/p&gt;

&lt;p&gt;Same commit.&lt;/p&gt;

&lt;p&gt;The solution was to execute flows multiple times and merge the findings.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2. Agents hallucinate.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One run invented an API endpoint, received a 404, and confidently concluded the feature didn't exist.&lt;/p&gt;

&lt;p&gt;We fixed that by giving it the application's real endpoint map instead of letting it guess.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3. Agents never know when to stop.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Please wrap up when you're done."&lt;/p&gt;

&lt;p&gt;It ignored us.&lt;/p&gt;

&lt;p&gt;103 tool calls later, it was still exploring.&lt;/p&gt;

&lt;p&gt;The fix wasn't a better prompt.&lt;/p&gt;

&lt;p&gt;It was enforcing hard execution limits inside the tooling itself.&lt;/p&gt;




&lt;p&gt;That's the real engineering challenge.&lt;/p&gt;

&lt;p&gt;Getting an AI agent to click through a website is a weekend project.&lt;/p&gt;

&lt;p&gt;Building one you'd trust to file production bug reports takes months of engineering guardrails.&lt;/p&gt;

&lt;p&gt;This doesn't replace your existing test suite.&lt;/p&gt;

&lt;p&gt;It finds the failures your test suite was never written to look for.&lt;/p&gt;

&lt;p&gt;It's open source under the MIT license.&lt;/p&gt;

&lt;p&gt;If you have a product with a real backend and want us to run it against your application, comment &lt;strong&gt;"run it"&lt;/strong&gt; and we'll set one up.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>software</category>
      <category>testing</category>
    </item>
    <item>
      <title>Codedamn is changing the way of Learning how to Code</title>
      <dc:creator>Hemanshu Upadhyay</dc:creator>
      <pubDate>Sun, 10 Apr 2022 12:00:39 +0000</pubDate>
      <link>https://dev.to/upadhyayhari_/codedamn-is-changing-the-way-of-learning-how-to-code-20oj</link>
      <guid>https://dev.to/upadhyayhari_/codedamn-is-changing-the-way-of-learning-how-to-code-20oj</guid>
      <description>&lt;p&gt;&lt;em&gt;Web development&lt;/em&gt; is one of the highest paying tech domain in 2022.&lt;br&gt;
And there are many Free and Paid Resources are available around the Internet yet so many Developers/students face issues while learning it, because they realize the coursework for the most of programming Resource/Program is too intense/Unstructured, or they don't get satisfactory outcomes from their learning. but there's Perfect Blend of learning Web development and Getting the results of your learning and that is called Codedamn.&lt;/p&gt;

&lt;p&gt;Let’s explore how Codedamn can help you to improve your Learning experience and can make you a better developer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fulpa9je8aun1mafu6drq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fulpa9je8aun1mafu6drq.png" alt="Codedamn Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is Codedamn?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://codedamn.com/" rel="noopener noreferrer"&gt;Codedamn&lt;/a&gt;&lt;/em&gt; is&amp;nbsp;an interactive learn-to-code platform where you can learn different Technologies and languages with structured Learning path. Codedamn is building the largest interactive coding platform. Learn to code, build projects and deploy apps right from your browser. with Codedamn learn different concepts and test what you learn by practicing it on your browser itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Advantages of using Codedamn&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are many Advantages that Codedamn provides you over any other learning platform and here are some Key advantages &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Detailed Learning Paths
&lt;/li&gt;
&lt;li&gt;       Codedamn's Playgrounds
&lt;/li&gt;
&lt;li&gt; Track Your Learning Progress
&lt;/li&gt;
&lt;li&gt;          Learn by building Projects
&lt;/li&gt;
&lt;li&gt;        Community Support
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s explore the advantages that Codedamn provides and learn how it makes your learning experience Superior.&lt;/p&gt;

&lt;h4&gt;
  
  
  1.Detailed Learning Paths &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;As Previously mentioned there are many Resources for Learning Web development but they are not Well structured. Therefore Codedamn provides you very structured &lt;em&gt;&lt;a href="https://codedamn.com/learning-paths" rel="noopener noreferrer"&gt;Learning path/Curriculum &lt;/a&gt;&lt;/em&gt; curated by Experienced developers according to the market demand. Now learn Frontend, Backend or FullStack Development in a structured way and the way it matters most. &lt;br&gt;
&lt;a href="https://media.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%2F24wz0j4zfy1etsw2c5be.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F24wz0j4zfy1etsw2c5be.png" alt="Codedamn "&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  2.Codedamn's Playgrounds &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://codedamn.com/playgrounds" rel="noopener noreferrer"&gt;Codedamn's Playgrounds&lt;/a&gt;&lt;/em&gt; enables you to have a real development experience minus the development setup. Playgrounds Is a platform which runs in your browser connected to computers in the cloud.&lt;br&gt;
Codedamn playgrounds helps you to get out of Tutorial hell.&lt;br&gt;
Main objective of Playgrounds is to Code and run your own experiments, try things around and build something new from what you have learnt without ever leaving the Browser.&lt;/p&gt;

&lt;p&gt;Playgrounds currently supports these Coding languages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Html/Css&lt;/li&gt;
&lt;li&gt;ReactJs&lt;/li&gt;
&lt;li&gt;VueJs&lt;/li&gt;
&lt;li&gt;NextJs&lt;/li&gt;
&lt;li&gt;Nodejs&lt;/li&gt;
&lt;li&gt;Solidity&lt;/li&gt;
&lt;li&gt;Python and&lt;/li&gt;
&lt;li&gt;Swift&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fv00sd8svysp4tjr4dpd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fv00sd8svysp4tjr4dpd3.png" alt="Playgrounds image"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  3.Track Your Learning Progress  &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Web development is very broad and complex topic, for that reason keeping the track of what you have learned is very essential. &lt;br&gt;
Codedamn provides you the &lt;em&gt;&lt;a href="https://codedamn.com/dashboard" rel="noopener noreferrer"&gt;Dashboard functionality&lt;/a&gt;&lt;/em&gt; which assists you to keep track the track of what you have learned till now. &lt;br&gt;
Dashboard helps you to track your learning, Track your Learning activity and set learning target for yourself. so you can achieve your goals more quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media.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%2Fprate79phkjg7g1pwkoo.png" alt="dashboard image"&gt;
&lt;/h2&gt;

&lt;h4&gt;
  
  
  4.Learn by building Projects &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Building Projects is a practical and hands-on way to reinforce your learnings from learning paths. building the Projects to Enhance your skills to is the best practice you can do. On Codedamn Learn the skills by Building Industry standard projects available in your dashboard with detailed guide to how to get started with your preferred Project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fc7shlr8gr54kn19i8shj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fc7shlr8gr54kn19i8shj.png" alt="Projects page"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  5.Community Support &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Learning Web-development alone is difficult. You might run into some error or might not understand the specific topic, Therefore Codedamn has tightly integrated the learning platform with Codedamn's Discord community of learners and teachers. &lt;em&gt;&lt;a href="https://discord.com/invite/brtAY92J2r" rel="noopener noreferrer"&gt;Codedamn's Discord Community&lt;/a&gt;&lt;/em&gt; will always be with you in your learning journey.&lt;br&gt;
&lt;a href="https://media.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%2F6viap5ybobqy6o6moagc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F6viap5ybobqy6o6moagc.png" alt="learn image"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  What The Users Think About the Codedamn
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fyf3a1y0tka0ge0pr2m1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fyf3a1y0tka0ge0pr2m1l.png" alt="Tweet Image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.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%2Fzanir9pqo2myfuxnna50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fzanir9pqo2myfuxnna50.png" alt="Tweet Image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.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%2F4l6oabdezj669ofzlq2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F4l6oabdezj669ofzlq2w.png" alt="Tweet Image"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started with Codedamn!
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://codedamn.com/" rel="noopener noreferrer"&gt;Try out Codedamn&lt;/a&gt;&lt;/em&gt; today, and enjoy the Learning experience like never before.&lt;/p&gt;




</description>
      <category>javascript</category>
      <category>codedamn</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Getting Started With Codedamn's Playgrounds</title>
      <dc:creator>Hemanshu Upadhyay</dc:creator>
      <pubDate>Tue, 05 Apr 2022 08:17:47 +0000</pubDate>
      <link>https://dev.to/upadhyayhari_/getting-started-with-codedamns-playgrounds-36ki</link>
      <guid>https://dev.to/upadhyayhari_/getting-started-with-codedamns-playgrounds-36ki</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;About Codedamn🚀 : Codedamn is&amp;nbsp;an interactive learn-to-code platform where you learn by practicing concepts in-browser on real-world dev environments🧑‍💻.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br&gt;
Ever got stuck in &lt;em&gt;Tutorial Hell&lt;/em&gt;??, Most of developers goes through this phase while Initially learning to code. to Get rid of the Tutorial Hell you can use &lt;strong&gt;&lt;a href="https://codedamn.com/playgrounds"&gt;Codedamn's Playgrounds&lt;/a&gt;.&lt;/strong&gt; With the Playgrounds Build Awesome Stuff while Learning how to code without ever leaving your browser.&lt;br&gt;
Playground Is a Platform which runs in your browser connected to computers in the cloud🌩. With the Playgrounds code in React, NodeJs or any popular language while learning with the codedamn's different [learning paths]🤓(&lt;a href="https://codedamn.com/learning-paths"&gt;https://codedamn.com/learning-paths&lt;/a&gt;).&lt;/p&gt;

&lt;h4&gt;
  
  
  Getting Started With Playgrounds.
&lt;/h4&gt;

&lt;p&gt;Follow these Simple Steps To get started with Playgrounds&lt;/p&gt;

&lt;h5&gt;
  
  
  1. First Visit the Playgrounds Page by Clicking &lt;a href="https://codedamn.com/playgrounds"&gt;This link&lt;/a&gt;
&lt;/h5&gt;




&lt;h5&gt;
  
  
  2. After Clicking the Link Above You will be Redirected to the Playgrounds Home page which Looks like This image💻.
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--79MtxiVK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8jahyq6icvnrav3dk4qa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--79MtxiVK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8jahyq6icvnrav3dk4qa.png" alt="Playground's Home page Image" width="880" height="442"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h5&gt;
  
  
  3.Now You can Select any language in which You want to start coding.👀
&lt;/h5&gt;




&lt;h5&gt;
  
  
  4.After Selecting your Preferred you will Be Redirected to the IDE in your browser With The All the Dependencies pre-installed for your Selected language.🚀⚛️
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NdDAquYE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1bs82214pczcnmk2dxnx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NdDAquYE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1bs82214pczcnmk2dxnx.png" alt="Playground Img" width="880" height="446"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h5&gt;
  
  
  5. After Getting into the IDE You can start the coding And changes will be Reflected live into the secondary(browser Screen) Just like your In-Pc ide.🧑‍💻
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2BC5lsJD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tdpkj2vm3x70rz6qr6h2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2BC5lsJD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tdpkj2vm3x70rz6qr6h2.png" alt="Playground img" width="880" height="446"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;code&gt;Note💡&lt;/code&gt; You can also use all the terminal commands in Playgrounds integrated terminal for example npm/yarn commands for installing any third party packages🤩.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xcdUqIEX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r035l6syecsf3tznrygs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xcdUqIEX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r035l6syecsf3tznrygs.png" alt="Playground img" width="880" height="907"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;That's all you basically Need to Know about Getting started with the Playgrounds, It's as simple as that🙌.&lt;br&gt;
&lt;a href="https://codedamn.com/playgrounds"&gt;Try it Now &lt;br&gt;
&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Thanks for Reading this Article..😊&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
