<?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: Raheel Nazir</title>
    <description>The latest articles on DEV Community by Raheel Nazir (@raheelnaziir).</description>
    <link>https://dev.to/raheelnaziir</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%2F4079876%2F56084061-107e-4334-a80e-b2c754a2f7d9.png</url>
      <title>DEV Community: Raheel Nazir</title>
      <link>https://dev.to/raheelnaziir</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raheelnaziir"/>
    <language>en</language>
    <item>
      <title>Good Boy Dossier: I Made Gemini Write Detective Case Files for Dogs</title>
      <dc:creator>Raheel Nazir</dc:creator>
      <pubDate>Sun, 16 Aug 2026 09:08:55 +0000</pubDate>
      <link>https://dev.to/raheelnaziir/good-boy-dossier-i-made-gemini-write-detective-case-files-for-dogs-3p6g</link>
      <guid>https://dev.to/raheelnaziir/good-boy-dossier-i-made-gemini-write-detective-case-files-for-dogs-3p6g</guid>
      <description>&lt;p&gt;This is a submission for [Weekend Challenge: Dog Days Edition] &lt;a href="https://dev.to/devteam/join-our-dev-weekend-challenge-dog-days-edition-1000-in-prizes-across-five-winners-submissions-1g4i"&gt;https://dev.to/devteam/join-our-dev-weekend-challenge-dog-days-edition-1000-in-prizes-across-five-winners-submissions-1g4i&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Good Boy Dossier turns a photo of your dog into a fully-generated "detective case file" a noir-style dossier written by AI. Upload a photo, and it produces a codename, an invented backstory, a deadpan "mood read," a confession of imagined mischief, an Instagram bio written in the dog's own voice, and a "Good Boy Score" with a witty rationale.&lt;/p&gt;

&lt;p&gt;Breed identifiers felt like the obvious angle for a dog-themed challenge, so I wanted to build something that treats the photo as a jumping-off point for a story instead of a classification problem. The goal was less "what breed is this" and more "what's this dog's deal" something genuinely fun to share, not just informative.&lt;/p&gt;

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

&lt;p&gt;🔗 Live app: &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://goodboydossier.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;goodboydossier.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&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%2F1cir2d14mwdav6zg3ufn.gif" 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%2F1cir2d14mwdav6zg3ufn.gif" alt=" " width="720" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/raheelnaziir" rel="noopener noreferrer"&gt;
        raheelnaziir
      &lt;/a&gt; / &lt;a href="https://github.com/raheelnaziir/GoodBoyDossier" rel="noopener noreferrer"&gt;
        GoodBoyDossier
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🕵️ Good Boy Dossier&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Upload a photo of your dog. Get back a noir detective case file.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Good Boy Dossier hands your pet's photo to Google Gemini, which opens an official
file on them: a codename, an invented case history, a deadpan read on their
current expression, a confession to recent crimes, a bio in their own voice, and
a legally meaningless &lt;strong&gt;Good Boy Score&lt;/strong&gt; out of 100.&lt;/p&gt;
&lt;p&gt;Then you download the whole thing as a shareable card.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Case No. GBD-4417-K9 — THE VELVET SNOOT&lt;/strong&gt;
&lt;em&gt;"One left slipper, relocated under the sofa at 0400 hours. The subject
maintains the slipper walked there on its own."&lt;/em&gt;
&lt;strong&gt;Good Boy Score: 87 / 100&lt;/strong&gt; — Would be a clean ninety if the mud on that left
paw matched the mud in the hallway.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why this exists&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Built for &lt;strong&gt;DEV's Weekend Challenge: "Dog Days"&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The brief was dogs, and the interesting constraint in…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/raheelnaziir/GoodBoyDossier" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;The app is a Next.js 14 + TypeScript + Tailwind project, fully client-driven with a single server-side API route.&lt;/p&gt;

&lt;p&gt;When a photo is uploaded, it's sent to an API route that calls Google's Gemini API with a multimodal prompt the image plus instructions to return structured JSON (codename, backstory, mood read, confession, bio, score, and rationale). Gemini's vision capabilities do the actual "reading" of the photo, and its generation handles the creative writing for each field, which is really the core of the app the personality of the output depends entirely on Gemini actually looking at the image and reacting to it, not a canned template.&lt;/p&gt;

&lt;p&gt;A few decisions worth calling out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I asked Gemini for strict JSON back so I could render it into a designed card instead of dumping raw text this meant handling occasional malformed responses (stripping markdown fences, retrying once) so the app doesn't break on an off-format reply.&lt;/li&gt;
&lt;li&gt;The result renders as a shareable "case file" graphic (photo + typed dossier styled like a redacted government file), downloadable as a PNG I wanted the output to be something people would actually want to post, not just read once and close the tab.&lt;/li&gt;
&lt;li&gt;Kept it fully client-session based, no database the app doesn't need to remember anything between visits.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;Submitting for &lt;strong&gt;Best Use of Google AI&lt;/strong&gt; Gemini isn't a bolted-on feature here, it's the entire product: the multimodal read of the photo and the generated writing are what the app actually is.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
  </channel>
</rss>
