<?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: Mohit</title>
    <description>The latest articles on DEV Community by Mohit (@mohitsaini2829).</description>
    <link>https://dev.to/mohitsaini2829</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%2F4079345%2F7399f18d-0ee7-42c2-a164-5670a17f95d1.png</url>
      <title>DEV Community: Mohit</title>
      <link>https://dev.to/mohitsaini2829</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohitsaini2829"/>
    <language>en</language>
    <item>
      <title>I Ran the Same Photo Through 3 AI Models. They All Disagreed. Here's the Bug.</title>
      <dc:creator>Mohit</dc:creator>
      <pubDate>Sun, 23 Aug 2026 18:01:56 +0000</pubDate>
      <link>https://dev.to/mohitsaini2829/i-ran-the-same-photo-through-3-ai-models-they-all-disagreed-heres-the-bug-2ca7</link>
      <guid>https://dev.to/mohitsaini2829/i-ran-the-same-photo-through-3-ai-models-they-all-disagreed-heres-the-bug-2ca7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Smash Stories&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;h1&gt;
  
  
  The Bug That Taught My AI to Say "I'm Not Sure"
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Project
&lt;/h2&gt;

&lt;p&gt;I'm building &lt;strong&gt;AURA AI&lt;/strong&gt; — a personal presentation, grooming, fitness, and lifestyle coaching app that analyzes a user's photos and lifestyle info to generate a personalized improvement plan. Before writing a single line of production code, I was stress-testing the "brain" of the app: the prompt that turns a few selfies into a structured, safe, evidence-based report.&lt;/p&gt;

&lt;p&gt;To do that, I ran the &lt;em&gt;exact same&lt;/em&gt; test — same photos, same lifestyle data, same instructions — through three different AI models: Claude, Gemini, and DeepSeek.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bug
&lt;/h2&gt;

&lt;p&gt;The first few runs looked great individually. Each model produced a clean, confident report: skin texture notes, hair analysis, posture observations, a prioritized "what to improve" list.&lt;/p&gt;

&lt;p&gt;But when I lined the three reports up side by side, something was off. The &lt;strong&gt;same input photos&lt;/strong&gt; were producing &lt;strong&gt;different conclusions&lt;/strong&gt; depending on which model I asked — and sometimes even between two runs on the same model. One report would call a shadow under someone's eyes "visible fatigue lines." Another, using a photo taken in different lighting, wouldn't mention it at all.&lt;/p&gt;

&lt;p&gt;The models weren't malfunctioning. They were doing exactly what I told them: describe what's visible in the photo. The actual bug was upstream — in my &lt;em&gt;inputs&lt;/em&gt;. My test photos varied wildly in lighting, angle, and distance, and the AI had no way to tell the difference between "this is a real feature of the person" and "this is a shadow because the bedroom light was warm-toned." It was confidently reporting photographic noise as fact.&lt;/p&gt;

&lt;p&gt;That's a genuinely dangerous bug for an app that's supposed to give people advice about their own face and body — confidently-wrong output is worse than no output.&lt;/p&gt;

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

&lt;p&gt;I built what I ended up calling a &lt;strong&gt;Problem Detection Engine&lt;/strong&gt;: instead of trusting the AI's first answer, I made it run a self-audit checklist after every report, forcing it to answer PASS/FAIL on questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did I treat an inference as an observation?&lt;/li&gt;
&lt;li&gt;Did I confuse a lighting artifact with a genuine feature?&lt;/li&gt;
&lt;li&gt;Did I compare this photo to another under inconsistent conditions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Running this audit across all three models is what surfaced the pattern. It wasn't one bad output — it was a systemic gap in how &lt;em&gt;any&lt;/em&gt; model handles uncontrolled input photos.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;I fixed it in two layers, because patching the prompt alone wasn't enough:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Constrain the input, not just the output.&lt;/strong&gt;&lt;br&gt;
I wrote an explicit photo capture protocol into the pipeline — fixed camera distance (1.2–1.5m), eye-level angle, tripod-stabilized, consistent lighting — and replaced my inconsistent test set with a controlled one. Garbage in, garbage out applies just as much to vision prompts as it does to databases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Make uncertainty a first-class output.&lt;/strong&gt;&lt;br&gt;
Instead of a binary "this is a feature," I added a confidence system: every observation now gets tagged LOW / MEDIUM / HIGH confidence, and anything with unreliable lighting or angle gets explicitly flagged as "not determinable" rather than guessed at. If the evidence is bad, the AI now says so instead of filling the gap with a confident-sounding guess.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;Here's a simplified version of the confidence-tagging rule I added to the prompt, so the model flags uncertain observations instead of guessing:&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="err"&gt;For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;every&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;visual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;observation,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;output:&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;"observation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;what you see&amp;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;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LOW"&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="s2"&gt;"MEDIUM"&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="s2"&gt;"HIGH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;why this confidence level&amp;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;Rules:&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;HIGH:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;clearly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;consistent,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;even&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;lighting&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;MEDIUM:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;but&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;lighting/angle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;introduces&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;some&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ambiguity&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;LOW:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;could&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;plausibly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;lighting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;artifact,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;shadow,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;angle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;distortion&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;confidence&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;LOW,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;observation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;fact.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Instead&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;output:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Not determinable from this image — retake under
even, front-facing light."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;This one rule is what turned "confidently wrong" into "honestly uncertain" — the exact fix the self-audit below confirms.&lt;/p&gt;

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

&lt;p&gt;Re-running the same three models on the corrected photo set collapsed the inconsistency almost entirely — the reports agreed on what was actually observable, and openly disagreed (flagged as uncertain) on the handful of things that genuinely were ambiguous, instead of silently picking different answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Took Away From This
&lt;/h2&gt;

&lt;p&gt;The most dangerous bugs in an AI product aren't the ones that crash — they're the ones that answer &lt;em&gt;confidently and wrong&lt;/em&gt;. Cross-testing the same prompt across multiple models turned out to be a great debugging technique on its own: if three independent systems disagree on the same input, the bug usually isn't in any one of them — it's in what you're feeding them.&lt;/p&gt;

&lt;p&gt;I'm still pre-code on the full AURA AI build, but this round of prompt-level bug hunting is exactly what's shaping how I design the real pipeline: validate the input before you ever trust the output.     &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
    </item>
    <item>
      <title>Warm Hearth — A Landing Page Built Around One Fire</title>
      <dc:creator>Mohit</dc:creator>
      <pubDate>Mon, 17 Aug 2026 06:16:34 +0000</pubDate>
      <link>https://dev.to/mohitsaini2829/warm-hearth-a-landing-page-built-around-one-fire-3ic4</link>
      <guid>https://dev.to/mohitsaini2829/warm-hearth-a-landing-page-built-around-one-fire-3ic4</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/editor/mohitsaini2829/embed/01a00e3b-0e3f-777b-bf6f-6b1dd5b3dc9d?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Warm Hearth — a landing page for a comfort food restaurant built around one idea: everything on the menu comes from the same wood-fired hearth in the back.&lt;/p&gt;

&lt;p&gt;Instead of treating "comfort food restaurant" as a generic brief, I anchored the whole page to that single hearth:&lt;/p&gt;

&lt;p&gt;An interactive hearth centerpiece. Right after the hero, there's a hand-drawn CSS/SVG fire pit you can click to "stoke." The flame flares, embers burst upward, and a small honest counter tracks how many times you've stoked it this visit — no fake global numbers, just a real, session-based response to your click.&lt;br&gt;
Four dishes, each with real cultural identity. Ramen, warm pies, a cheesy pasta bake, and gulab jamun — each with its own hand-drawn SVG illustration and a border motif pulled from its own cuisine (a jade-and-gold double line for the ramen, a scalloped pastry edge for the pies, an Italian tricolor accent for the pasta, gold paisley tones for the gulab jamun) rather than one generic card style stretched across all four.&lt;br&gt;
Living detail, not static photos. Steam rises off the ramen, pies, and pasta bake using the same wisp animation as the hero's hearth, so the whole page reads as one consistent "warmth" language. The gulab jamun gets a syrup shimmer and drip instead, since steam isn't the right detail for a syrup-soaked sweet.&lt;br&gt;
Price tags that hang like real kitchen tickets — pinned by a string, swaying gently, and giving a small "flicked" swing on hover instead of sitting flat on the card.&lt;br&gt;
Mira, an illustrated host in the corner who offers a rotating table tip when you click her — a small personal touch instead of a static "contact us" widget.&lt;br&gt;
Built for actual use, not just to look good in a screenshot: keyboard-focusable tab filters, a skip-to-content link, aria-live regions on the interactive parts, and full prefers-reduced-motion support that disables every animation without breaking the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;Since I opened the hearth question yesterday, I stopped treating this as "a comfort food restaurant" and started treating it as "a restaurant that runs on one hearth" — that reframe is what changed everything. The dish illustrations, the steam animation, the stoke-the-fire interaction, even Mira the host all trace back to that one fire instead of being separate decorations bolted onto a generic template.&lt;/p&gt;

&lt;p&gt;The part I'm proudest of is probably the smallest one — the price tags. Real kitchen tickets hang from a pin and string and sway slightly; giving them that same physics (idle sway, plus a decaying "flick" on hover) took more tuning than I expected, but it's the kind of detail that makes the page feel handmade instead of templated.&lt;/p&gt;

&lt;p&gt;What I'd do next with more time: add a couple more dishes so the category tabs have more to filter, and build out a proper "our hearth" story section with the history behind it.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
