<?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: deeptej (⁠^⁠.⁠_⁠.⁠^⁠)⁠ﾉ</title>
    <description>The latest articles on DEV Community by deeptej (⁠^⁠.⁠_⁠.⁠^⁠)⁠ﾉ (@deeptej).</description>
    <link>https://dev.to/deeptej</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%2F1000953%2F0d0968c3-c81e-4251-98c6-36ca059020e8.png</url>
      <title>DEV Community: deeptej (⁠^⁠.⁠_⁠.⁠^⁠)⁠ﾉ</title>
      <link>https://dev.to/deeptej</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deeptej"/>
    <language>en</language>
    <item>
      <title>KindWood: Gotta Grow 'em All! (One Kind Act at a Time)</title>
      <dc:creator>deeptej (⁠^⁠.⁠_⁠.⁠^⁠)⁠ﾉ</dc:creator>
      <pubDate>Sun, 06 Sep 2026 15:24:17 +0000</pubDate>
      <link>https://dev.to/deeptej/kindwood-gotta-grow-em-all-one-kind-act-at-a-time-18l3</link>
      <guid>https://dev.to/deeptej/kindwood-gotta-grow-em-all-one-kind-act-at-a-time-18l3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-09-03"&gt;Weekend Challenge: Generosity Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When brainstorming an idea to build around charity and generosity, I knew I wanted to build something that turns a simple act of kindness into a shared experience. Something both people can keep forever and look back on. That reminded me of Pokémon GO, and how it got us to actually go outside and collect Pokémon (Oh good 'ol 2016). What if we could go out and start collecting kind acts instead, and get a unique plant for each one?! 👀&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;KindWood!&lt;/strong&gt; 🌸 A virtual garden that grows more and more lush, every time you're generous and kind to someone.&lt;/p&gt;

&lt;p&gt;The idea is simple: you help someone, then describe it in a sentence in your own words. Google AI then classifies it into a plan species and a short lore about what it means.&lt;/p&gt;

&lt;p&gt;A code appears then on your screen. The person you helped types that code in, sees what you said, and confirms it really happened. Only then does a plant bloom 🌱!! on both your gardens! When tapped it shows a memory card showing what happened, when, both your names.&lt;/p&gt;

&lt;p&gt;But I wanted the garden to feel more alive, like its talking to you. So when you tap on the voice icon on a memory card, the memory is narrated back to you in a calm voice soothing voice, powered by ElevenLabs. Takes you right back!&lt;/p&gt;

&lt;p&gt;Every plant needs two people to agree it happened. That's the whole trust model. kindness in KindWood is never something you claim solo. It always takes two. 🫱🏻‍🫲🏻&lt;/p&gt;

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

&lt;p&gt;Check out the demo video here:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/i7a0LA9eh2c" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;You can find the code on GitHub:&lt;br&gt;
&lt;/p&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/deeptejd" rel="noopener noreferrer"&gt;
        deeptejd
      &lt;/a&gt; / &lt;a href="https://github.com/deeptejd/kindwood" rel="noopener noreferrer"&gt;
        kindwood
      &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&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/deeptejd/kindwood/public/readme-image.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fdeeptejd%2Fkindwood%2FHEAD%2Fpublic%2Freadme-image.png" alt="Kindwood — a garden that grows from shared kindness" width="200"&gt;&lt;/a&gt;
&lt;p&gt;&lt;strong&gt;A virtual garden that grows more and more lush the more kind acts you're part of.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Two people, one moment, one plant. When someone helps another person with something real, they describe it in a sentence. Google AI turns that into a plant species and a short piece of garden lore. The person who was helped confirms it happened with a short code, and only then does a plant bloom- The &lt;em&gt;same&lt;/em&gt; plant, in both of their gardens, forever a shared memory of that moment.&lt;/p&gt;
&lt;p&gt;Built for DEV.to's &lt;a href="https://dev.to/deeptej/kindwood-gotta-grow-em-all-one-kind-act-at-a-time-18l3" rel="nofollow"&gt;Weekend Challenge: Generosity Edition&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;You'll need three free accounts&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. Firebase (the shared database)&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://console.firebase.google.com" rel="nofollow noopener noreferrer"&gt;https://console.firebase.google.com&lt;/a&gt; → &lt;strong&gt;Add project&lt;/strong&gt; → name it anything, skip Google Analytics.&lt;/li&gt;
&lt;li&gt;On the project's "Get started" page, click the &lt;strong&gt;&lt;code&gt;&amp;lt;/&amp;gt;&lt;/code&gt;&lt;/strong&gt; (web) icon → register a web app (skip Firebase Hosting).&lt;/li&gt;
&lt;li&gt;Copy the &lt;code&gt;firebaseConfig&lt;/code&gt; object shown — you'll need every value from it.&lt;/li&gt;
&lt;li&gt;In the…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/deeptejd/kindwood" 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;Stack: React, Tailwind, Firebase/Firestore as the shared source of truth and Framer Motion to make every interacting feel a lot more fun!&lt;/p&gt;

&lt;p&gt;The core mechanic is simpler than it seems. There isn't a per-user garden. A garden is just a live query showing every act where they are either a Giver or a Receiver and that the act has been confirmed, which happens when the receiver confirms it.&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%2F1jxwotpbb3r2ej5c5ah4.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%2F1jxwotpbb3r2ej5c5ah4.png" alt="Garden page description" width="799" height="66"&gt;&lt;/a&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%2Fc1e0w4kvw07hqbdhk0we.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%2Fc1e0w4kvw07hqbdhk0we.png" alt="Logging a kind act" width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A kind act is a single Firestore document that contains a short lived four digit code that lets the receiver query and find it. Once they confirm, their user id and details get populated into the receivers field of the kind act and the status moved from pending to confirmed. That's when the plant appears on both their devices!&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%2Fu26cwyil7hwjetv4743q.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%2Fu26cwyil7hwjetv4743q.png" alt="Code description" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google AI (Gemini) is what turns plain sentences into a garden lore! Every description gets classified into one of six plant species, a short poetic lore for the memory card, and a separate, more conversational narration thats meant to be spoken rather than read. This made the garden feeling alive rather than static. &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%2Fmovgam79hg2v1bekjyle.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%2Fmovgam79hg2v1bekjyle.png" alt="Flow including Google AI" width="799" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ElevenLabs narrates that spoken narration, from the memory card. I felt like it really changed what looking back at a memory feels like, instead of just re-reading what happened, almost like the garden is speaking to you.&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%2Fcf33s14rmrszh9dbvadd.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%2Fcf33s14rmrszh9dbvadd.png" alt="Flow including ElevenLabs" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Google AI:&lt;/strong&gt; I used Google AI to turn natural language descriptions of kind acts into a plant lore and classify the act into plant species.&lt;/li&gt;
&lt;/ul&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%2Ffmhwy57kzvi0dymg8jz6.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%2Ffmhwy57kzvi0dymg8jz6.png" alt="Use of Google AI" width="799" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; I used ElevenLabs to breathe life into to garden and make it as if its speaking to you, describing all your kind acts in a clam soothing voice.&lt;/li&gt;
&lt;/ul&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%2Fpjyh9jebg2mjpim3wdz3.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%2Fpjyh9jebg2mjpim3wdz3.png" alt="Use of ElevenLabs" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks for reading it all!
&lt;/h2&gt;

&lt;p&gt;If KindWood does one thing, I hope it's this: Charity and kindness doesn't need to always be loud, tracked, or public to really matter. It just needs to be real to the two people it happened between. Just someone who cared enough to notice.&lt;/p&gt;

&lt;p&gt;Go be that someone for one person today. Let's get out there and be generous! ✨&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%2Fp1mgdf6596ml9u8mssoi.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%2Fp1mgdf6596ml9u8mssoi.png" alt="Flora" width="797" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>A 100% Private, Local AI Resume Optimizer with Google Gemma 4: How I Built ResuMate!</title>
      <dc:creator>deeptej (⁠^⁠.⁠_⁠.⁠^⁠)⁠ﾉ</dc:creator>
      <pubDate>Sun, 24 May 2026 19:10:57 +0000</pubDate>
      <link>https://dev.to/deeptej/i-built-resumate-a-100-private-local-ai-resume-optimizer-with-google-gemma-4-699</link>
      <guid>https://dev.to/deeptej/i-built-resumate-a-100-private-local-ai-resume-optimizer-with-google-gemma-4-699</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&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.amazonaws.com%2Fuploads%2Farticles%2F81idlv0kgrlv6nnljuqe.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.amazonaws.com%2Fuploads%2Farticles%2F81idlv0kgrlv6nnljuqe.png" alt="Working right after graduation ShinChan meme" width="800" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See why I chose the Gemma 4 E2B model&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I was recently preparing for my internship applications and like everyone else I wanted my resume to be as good as it could possibly be. So I uploaded my entire education history to a website that claimed to rate and improve my resume. I entered every project, every achievement, my phone number, my email, links to my GitHub and LinkedIn, hit enter and waited...&lt;/p&gt;

&lt;p&gt;But somewhere between hitting enter and reading the response, a thought crept in: &lt;em&gt;where did all of that personal information just, go?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A resume is &lt;strong&gt;NOT&lt;/strong&gt; a casual document. It has my address on it, my education history, the names of professors and mentors I listed as references. And I had just handed all of it to a server I knew nothing about, owned by a company whose privacy policy I have definitely never read.&lt;/p&gt;

&lt;p&gt;I couldn't shake that feeling off. &lt;em&gt;So I built something to FIX IT!!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;ResuMate&lt;/strong&gt; is a &lt;em&gt;privacy-first&lt;/em&gt; resume tailoring tool that runs ENTIRELY on your local machine, thanks to &lt;a href="https://deepmind.google/models/gemma/gemma-4/" rel="noopener noreferrer"&gt;Gemma 4&lt;/a&gt;!. Your resume and YOUR personal information never leaves your laptop. Not a single character!&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.amazonaws.com%2Fuploads%2Farticles%2F7lg180mmm5ro3qr14ukn.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.amazonaws.com%2Fuploads%2Farticles%2F7lg180mmm5ro3qr14ukn.png" alt="Dashboard" width="800" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You upload your resume once. Then for every job you're interested in, you paste the job description and ResuMate does &lt;strong&gt;six things:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ATS match analysis:&lt;/strong&gt; Scores your resume against the job description from 0 to 100. Shows you exactly which keywords are present, which are missing, and &lt;u&gt;gives you specific, actionable suggestions to improve your score&lt;/u&gt; without fabricating experience you don't have.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fum88q9auqnn9m2tnkmbh.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.amazonaws.com%2Fuploads%2Farticles%2Fum88q9auqnn9m2tnkmbh.png" alt="ATS Match 1" width="800" height="620"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fvshyj3oe7xco5z5t0ook.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.amazonaws.com%2Fuploads%2Farticles%2Fvshyj3oe7xco5z5t0ook.png" alt="ATS Match 2" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Drafts a cover letter:&lt;/strong&gt; The model &lt;strong&gt;first reads the tone of the job description&lt;/strong&gt;, asks itself, is this a corporate law firm or a startup? and drafts a cover letter best suited for that world. Most importantly, it uses &lt;strong&gt;YOUR&lt;/strong&gt; actual achievements, thanks to &lt;strong&gt;Gemma 4's context window of up to 256K token!&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2F3uqo8pv9qpyuk2br98rl.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.amazonaws.com%2Fuploads%2Farticles%2F3uqo8pv9qpyuk2br98rl.png" alt="Cover letter" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Job Description Decoder:&lt;/strong&gt; This one is my personal favorite. A lot of times companies use a lot of corporate jargon and I'm just steppin' out of college :) ResuMate reads the job description and translates corporate lingo into plain english (phew, now that's better). &lt;em&gt;"Operationalize strategic pillars to achieve sustainable, scalable leverage"&lt;/em&gt; ???? like whaa? The decoder effectively surfaces what the company is trying to say, all while also using the context that the entire job description provides.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fy6ftvg10g8wvlscyooqu.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.amazonaws.com%2Fuploads%2Farticles%2Fy6ftvg10g8wvlscyooqu.png" alt="Job description decoder" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Red Flag Detector:&lt;/strong&gt; ResuMate looks for patterns in the job description that may be something you might want to know before applying or is worth asking during the interview. Each flag comes with severity rating and specific questions you can ask during the interview as well! Now that's convenient~&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2F2lnco2yexqxdzcm5mp5u.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.amazonaws.com%2Fuploads%2Farticles%2F2lnco2yexqxdzcm5mp5u.png" alt="Red Flags Detector" width="800" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interview Prep:&lt;/strong&gt; This one is another one of my favorites! and it also comes from a personal experience! &lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fhfm79rkes4tqx92xqtpp.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.amazonaws.com%2Fuploads%2Farticles%2Fhfm79rkes4tqx92xqtpp.png" alt="Interview Prep" width="800" height="714"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Whenever I look at job descriptions that I might seem fit for, I immediately start thinking about the type of questions that might be asked for such a role and the topics that I might want to prep for the role, I built this feature to tackle just that!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ResuMate generates &lt;strong&gt;questions tailored to both the role requirement and your specific background. **This does not include generic &lt;em&gt;"Tell me your weaknesses and strengths"&lt;/em&gt; type questions. Each question also comes with an explaination of what the interviewer is actually testing and how to approach a strong answer  using your real experience. ResuMate also **recommends a few topics that you might want to brush up before the interview based on the keywords it picks up from the job description.&lt;/strong&gt; Pretty cool right?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generate a tailored resume:&lt;/strong&gt; Gemma reorganizes and emphasizes on your existing experience and structure it to match the priorities of the job description. It incorporates missing keywords if the user already has the experience but not the specific keywords. Once done the user can directly export the tailored resume to a PDF. And the best part, every job page has its own tailored version of resume, so you don't need to download and store multiple versions, they'll always stay under the job card.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fkfboofubny6jslzcn0s5.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.amazonaws.com%2Fuploads%2Farticles%2Fkfboofubny6jslzcn0s5.png" alt="Tailored resume" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every job you analyse is saved locally so you can have a cup of tea or go for a walk and everything is stays exactly where you left it! &lt;strong&gt;No re-running, no re-uploading.&lt;/strong&gt; The dashboard shows your full history with ATS scores for every job at a glance. This not only saves time but also gives you a birds eye view of every job you've looked at!&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.amazonaws.com%2Fuploads%2Farticles%2Fo8su9yo03m2lfrfghncn.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.amazonaws.com%2Fuploads%2Farticles%2Fo8su9yo03m2lfrfghncn.png" alt="Jobs on dashboard" width="799" height="243"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;The thing that makes ResuMate different from every other AI resume tools isn't just any single feature. It's the direction the analysis runs in.&lt;/p&gt;

&lt;p&gt;Most tools are one directional. They optimise you for the job. &lt;strong&gt;ResuMate is bidirectional.&lt;/strong&gt; &lt;u&gt;It optimises your application and it analyses the job on your behalf.&lt;/u&gt; The job description decoder and red flag detector exist because &lt;strong&gt;a job application is not just you auditioning for a company, it's also the company auditioning for you.&lt;/strong&gt; &lt;em&gt;You should go into that interview having done your homework on both sides.&lt;/em&gt; &lt;/p&gt;




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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/RacHlwbpSpQ"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Find the source code for ResuMate and how you can download and run it on your machine on GitHub: &lt;a href="https://github.com/deeptejd/ResuMate" rel="noopener noreferrer"&gt;ResuMate on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Gemma 4 E2B
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fgstptb75fs6lzy036ien.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.amazonaws.com%2Fuploads%2Farticles%2Fgstptb75fs6lzy036ien.png" alt="gemma 4 e2b from hugginface" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The inputs are text, and both models handle text identically.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ResuMate relies on two text documents as input- a resume and a job description. &lt;a href="https://huggingface.co/google/gemma-4-E2B#dense-models" rel="noopener noreferrer"&gt;Both Gemma 4 E2B and Gemma 4 E4B share the same context window of 128K tokens and the same 262K vocabulary&lt;/a&gt;. For a task like resume analysis, these were the numbers that mattered to me. A resume and a job description rarely exceed a few thousand tokens. E2B handles this without breaking a sweat and E4B would handle it the same way, so there wasn't really a capability gap to close by going bigger.&lt;/p&gt;

&lt;h3&gt;
  
  
  My own hardware told me who my users are
&lt;/h3&gt;

&lt;p&gt;This is the reason I feel the most strongly about. When I tried running E4B locally during development, it would not even initialise on my machine. I have 4GB of total RAM, with perhaps 1 to 2GB realistically available after everything else running. E4B needs more than that to load, let alone run inference. E2B initialised, ran, and was fast.&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.amazonaws.com%2Fuploads%2Farticles%2F2f0r48jdfyt5te7b22g4.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.amazonaws.com%2Fuploads%2Farticles%2F2f0r48jdfyt5te7b22g4.gif" alt="no way 4gb ram ahh" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This made me realise about who ResuMate is actually for. The target audience is students and fresh graduates, people who are actively looking for their first job or first internship. That group, is usually not running high-end hardware. They are on a similar kind of laptop I was on. If the tool that is supposed to help them with their job search cannot even start on their machine, it has already failed them before they typed a single word.&lt;/p&gt;

&lt;p&gt;E2B runs on modest hardware. &lt;strong&gt;It has the same context length and vocabulary as E4B.&lt;/strong&gt; It is faster on constrained resources. This was enough for me to single out which model I am going to go with.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speed makes or breaks the entire user experience
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fkix3e80lupi1xff6l7ck.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.amazonaws.com%2Fuploads%2Farticles%2Fkix3e80lupi1xff6l7ck.gif" alt="sloth from zootopia" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LocalHire runs six sequential prompts every time you analyze a job. This means six round trips to the model before you see a complete analysis. If each prompt takes noticeably longer due to a heavier model, that slowdown really adds up across the entire session. &lt;/p&gt;

&lt;p&gt;And job seekers aren't just going to do a single analysis. They might be looking at tens of roles eveyr week. I wanted every analysis to feel as fast as possible, not something you start and come back to, later. E2B generates tokens faster on the same hardware, and across six prompts per-job that difference is something users would really feel. &lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Gemma 4
&lt;/h2&gt;

&lt;p&gt;There are a total of six resume tasks that are run per job. Gemma 4 runs these, each with its own carefully designed prompt.&lt;/p&gt;

&lt;p&gt;You can check out the prompts here: &lt;a href="https://github.com/deeptejd/ResuMate/blob/main/core/ollama.py#L76" rel="noopener noreferrer"&gt;ResuMate/blob/main/core/ollama.py#L76&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F1jzeuqu7m7cjfiuyo025.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.amazonaws.com%2Fuploads%2Farticles%2F1jzeuqu7m7cjfiuyo025.png" alt="the flow" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;ATS analysis&lt;/strong&gt; asks the model to read two documents simultaneously, identify semantic relationships between the terms rather than just extracting keywords, produce a numeric score, categorize the keywords into two lists i.e. found and missing and generate suggestions to improve the score- all in a structured markdown format that the website can parse and render. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;job description decoder&lt;/strong&gt; which for me was one of the hardest prompts to get right. Corpo lingo carries meaning that depends a lot of context. Getting Gemma to decode phrases honestly, required multiple attempts to get right. And I can finally understand what &lt;em&gt;"Operationalize strategic pillars to achieve sustainable, scalable leverage"&lt;/em&gt; means 😭&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;cover letter generator&lt;/strong&gt; does multiple things- detect the tone of the JD, match it in the response, avoid certain types of opening statements like "I am writing..." and referencing only real experience for the user's resume and not hallucinating all whilst staying within three paras. Gemma 4 handles this really well provided the instructions are explicit enough, and I got to pick up a bit of prompt engineering along the way!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;interview prep&lt;/strong&gt; feature required Gemma 4 to cross-reference the two documents viz. the resume and the job description, and figure out the gap between them to suggest questions that help fill that gap, instead of generic interview questions, which made this even more personal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these prompts streams back to the browser token by token using &lt;strong&gt;Server-Sent Events&lt;/strong&gt;. Django keeps a persistent connection open and forwards each token from Ollama as it arrives.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prompt engineering is harder than it looks.&lt;/strong&gt;&lt;br&gt;
I assumed writing a prompt was just... asking nicely 😭 boy was I wrong. It isnt. Getting Gemma to produce output in a consistent, parseable format took more tries than I expected. Early versions of my prompts produced beautifully written responses that my code could not parse at all. The minute I started telling it, here is exactly what I want, here is exactly how I want it formatted, here is an example, everything got more reliable. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Thinking about constraints&lt;/strong&gt;&lt;br&gt;
Because I was running everything on my own machine I had to constantly think about RAM limits, inference speeds etc. These are constraints that disappear when you use cloud API. Building locally helped me think in constraints.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What worked well
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Finally build my first project with a local LLM&lt;/strong&gt;&lt;br&gt;
I hadn't incorporated a locally running LLM with a project before and I finally got a chance to do it, so that's pretty cool!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gotta love Django&lt;/strong&gt;&lt;br&gt;
File uploads, streaming HTTP responses, SQLite db, template rendering, everything just worked. No fighting with the framework.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Plan to Improve
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser extension for automatic JD import&lt;/strong&gt;
Right now users paste job descriptions manually. The real workflow is: see a job on LinkedIn or Naukri or Indeed, click a button, have the JD extracted automatically. Perhaps a small browser extension that reads the page content and sends it to the local Django server would eliminate the only friction that remains in the core workflow. This is the next feature I want to build.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Every technical decision while building ResuMate traced back to one very important thing: &lt;strong&gt;the model has to run on your machine, privately, on hardware you actually own.&lt;/strong&gt; That constraint ruled out cloud APIs, ruled out the larger models, and helped me go with Gemma 4 E2B as my model of choice. The constraints did not limit the project, but they defined it!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thanks for reading so far!! I hope we all get the role we're dreaming of! ✨🌸 See y'all in another post!! 👋🏻&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fydrocpql96w2c30eit6v.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fydrocpql96w2c30eit6v.webp" alt="byee" width="480" height="268"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Fusing NASA Data with AI: How I Built CosmoDex and Won the MLH Data Hackfest!</title>
      <dc:creator>deeptej (⁠^⁠.⁠_⁠.⁠^⁠)⁠ﾉ</dc:creator>
      <pubDate>Tue, 03 Mar 2026 11:25:11 +0000</pubDate>
      <link>https://dev.to/deeptej/fusing-nasa-data-with-ai-how-i-built-cosmodex-and-won-the-mlh-data-hackfest-5fmm</link>
      <guid>https://dev.to/deeptej/fusing-nasa-data-with-ai-how-i-built-cosmodex-and-won-the-mlh-data-hackfest-5fmm</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What if tracking near-Earth asteroids felt less like reading a spreadsheet and more like commanding a starship? That was the exact question that led to the birth &lt;strong&gt;CosmoDex!&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2Fj1zi54s5lau0p9zadil5.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.amazonaws.com%2Fuploads%2Farticles%2Fj1zi54s5lau0p9zadil5.gif" alt="stargazing" width="600" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;Space is fascinating, but astronomical data is usually presented as dry, intimidating pages of text or raw JSON files. I wanted to change that! I wondered, &lt;strong&gt;&lt;em&gt;What if you could instead just, TALK to the data!!!&lt;/em&gt;&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2F66suth9d9iuqqi7gbvw4.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.amazonaws.com%2Fuploads%2Farticles%2F66suth9d9iuqqi7gbvw4.png" alt="Details about an asteroid and Quackstronaut analyzing it" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So with a clear goal in mind and a weekend to spare, I built CosmoDex! 🥹🚀 an interactive, highly visual dashboard that tracks Near Earth Objects (NEOs) using real-time data from NASA's API, allows you to ask questions about what you're seeing with the power of &lt;strong&gt;Gemini&lt;/strong&gt; and unlock shiny badges while doing all this! I didn’t just want to build a data table, I wanted to build an experience ✨ I heavily drew inspiration from sci-fi movies like Intersteller (my favorite btw) and Gravity, utilizing glowing neon accents 🌟, deep space backgrounds 🌠, and a head up display style aesthetic to make users feel like they are stationed at a futuristic command center 🛰️&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Oh and psst...(whispers) &lt;em&gt;"You think I'd let you be stranded in space like that? Well Ohhh boyy"&lt;/em&gt; I bring to you &lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Flipb1kvq7wepxgg0kks1.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.amazonaws.com%2Fuploads%2Farticles%2Flipb1kvq7wepxgg0kks1.gif" alt="Mandalorian" width="500" height="281"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;drumrollss&lt;/strong&gt;&lt;/em&gt;🥁 &lt;strong&gt;"QUACKSTRONAUT"&lt;/strong&gt; 🦆&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quackstronaut is your friendly AI (Always Intriguing) sidekick that gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily briefings about cool space facts!!&lt;/li&gt;
&lt;li&gt;Information about any asteroid you're currently seeing, powered by Gemini, we can simply ask it a question in our natural language, just like you'd ask your pal! 🦆&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Feaiemwyqgun5fyrnyz9n.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Feaiemwyqgun5fyrnyz9n.jpg" alt="Quackstonaut briefing" width="265" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And finally to gamify it even further we have ✨&lt;strong&gt;&lt;em&gt;Achievements!&lt;/em&gt;&lt;/strong&gt;✨. Interactions on the site such as favoriting near earth objects, asking quackstronaut for more information etc unlocks cool achievements that are visible on your profile!!&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.amazonaws.com%2Fuploads%2Farticles%2F41jmf15t3s874bk6ijuj.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.amazonaws.com%2Fuploads%2Farticles%2F41jmf15t3s874bk6ijuj.png" alt="Achievements" width="800" height="975"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What role did Google Gemini play?
&lt;/h3&gt;

&lt;p&gt;While the NASA API provided the raw numbers (velocity, distance, estimated diameter), I fed the raw asteroid data into Gemini and prompted it to generate dynamic, gamified threat assessments and sci-fi lore for each specific space rock. Instead of just seeing "(2012 FU35): 0.05 AU away," users get an immersive briefing about an incoming celestial body, making the data highly engaging and accessible.&lt;/p&gt;

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

&lt;p&gt;You can find the source code for the project here: &lt;a href="https://github.com/DeeptejD/data-hackfest" rel="noopener noreferrer"&gt;DeeptejD/data-hackfest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/H9WLzTXALXw"&gt;
  &lt;/iframe&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.amazonaws.com%2Fuploads%2Farticles%2Fju9e2ujrisy2ac93txo8.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.amazonaws.com%2Fuploads%2Farticles%2Fju9e2ujrisy2ac93txo8.png" alt="The homepage" width="799" height="398"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Frkwric5totsl0v6yq2en.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.amazonaws.com%2Fuploads%2Farticles%2Frkwric5totsl0v6yq2en.png" alt="Asteoroid info" width="800" height="684"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F41jmf15t3s874bk6ijuj.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.amazonaws.com%2Fuploads%2Farticles%2F41jmf15t3s874bk6ijuj.png" alt="Achievements" width="800" height="975"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F49b0cf4mbxayoqqmo4wl.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.amazonaws.com%2Fuploads%2Farticles%2F49b0cf4mbxayoqqmo4wl.png" alt="vault containing favorited near earth objects" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Building CosmoDex was a massive learning experience spanning both code and design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Designing for Immersion (UI/UX):&lt;/em&gt;&lt;/strong&gt; I learned that good UI isn't just about making things look "cool" it’s about visual hierarchy. I had to balance the intense, futuristic sci-fi aesthetics with actual readability so the NASA data which was the star of the project didn't get lost in the design.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speaking in a video (Soft Skill): Gosh I had to do like 6-7 takes  to get the video right and realised its sooo hard to speak in front of the camera! But I eventually did it and feel much more confident about it now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Working with GenAI:&lt;/em&gt;&lt;/strong&gt; This was the first time I worked with GenAI so my technical skills were pushed to the limit. I had to reliably pass data fetched from NASA into an LLM prompt (Gemini) and parse the response back into our frontend without breaking the immersion. I also learnt a little bit about prompt engineering and how to structure good prompts!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;State Management &amp;amp; Async Loading: Waiting for an AI to generate a story takes a few seconds. I learned a lot about handling asynchronous data streams and creating sleek loading states like animations so the user stays engaged while Gemini did its thing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;p&gt;Working with Gemini was a new and really cool experience. Seeing raw data turn into a lore was honestly super cool. But like all things it came with its own set of pros and cons...&lt;/p&gt;

&lt;h3&gt;
  
  
  What worked well?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I was literally building a persona that was in my head "Quackstronaut" and Gemini was really adaptable to the persona I exactly imagined. It perfectly captured the astronaut side-kick and sci-fi vibe I was going for! &lt;/li&gt;
&lt;li&gt;Something that really impressed me was its ability to take cold hard numbers like velocity and come up with some creative lore or story.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What caused friction
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gemini worked well as long as the prompt was well structured. Nailing that prompt was a bit difficult for me since this was my first time.&lt;/li&gt;
&lt;li&gt;Since I was dealing with scientific data it became more important that Gemini didn't hallucinate which it did sometimes by throwing in random numbers here and there&lt;/li&gt;
&lt;li&gt;latency was something that made the platform feel a bit slow, but this was mainly because I was using the Gemini flash models instead of the pro models&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Thanks for reading so far!! Will see you in another post explorer!&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fhgz4g94b4q39trm4s3pz.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.amazonaws.com%2Fuploads%2Farticles%2Fhgz4g94b4q39trm4s3pz.gif" alt="bye" width="480" height="268"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
