<?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: Jayant Jeet Tomar</title>
    <description>The latest articles on DEV Community by Jayant Jeet Tomar (@halfbloodcoder).</description>
    <link>https://dev.to/halfbloodcoder</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%2F481134%2F6123d31d-a455-4d40-81c0-9006a7293b76.jpg</url>
      <title>DEV Community: Jayant Jeet Tomar</title>
      <link>https://dev.to/halfbloodcoder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/halfbloodcoder"/>
    <language>en</language>
    <item>
      <title>BioDex - I built a plant-collector simulation to help you touch grass</title>
      <dc:creator>Jayant Jeet Tomar</dc:creator>
      <pubDate>Wed, 07 Oct 2026 03:03:54 +0000</pubDate>
      <link>https://dev.to/halfbloodcoder/biodex-i-built-a-plant-collector-simulation-to-help-you-touch-grass-13ll</link>
      <guid>https://dev.to/halfbloodcoder/biodex-i-built-a-plant-collector-simulation-to-help-you-touch-grass-13ll</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Discover the world of flora with BioDex — an offline plant‑collector simulation game. &lt;br&gt;
Capture real plants using your device camera and transform them into collectible cards with scientific names, rarity levels, and unique attributes.&lt;/p&gt;

&lt;p&gt;🌱 Features:&lt;br&gt;
• Camera-based plant capture for collectible cards&lt;br&gt;
• Learn scientific names and common names of flora&lt;br&gt;
• Rarity system (S‑rank, rare, common) for added challenge&lt;br&gt;
• Offline gameplay — no internet required&lt;br&gt;
• Educational yet fun: explore, collect, and build your own flora deck&lt;br&gt;
• Safe and private: no personal data collected or shared&lt;/p&gt;

&lt;p&gt;Perfect for nature enthusiasts, students, and casual gamers who love discovery. &lt;br&gt;
Turn your surroundings into a living Pokédex of plants — all while playing offline.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;A short screen recording shows BioDex in action:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/_vVePeb4DfE" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Everything lives in one repo: the Android app, the model export script, and the Gemma note generator.&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/Jayant-Jeet" rel="noopener noreferrer"&gt;
        Jayant-Jeet
      &lt;/a&gt; / &lt;a href="https://github.com/Jayant-Jeet/BioDex" rel="noopener noreferrer"&gt;
        BioDex
      &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;BioDex&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;BioDex is an Android-first, offline plant-collector MVP built with Kotlin, Jetpack Compose, CameraX, and the official Imageomics BioCLIP 2.5 ViT-H/14 image encoder. Capture a plant photo, find its closest match in a 4,271-species field guide, generate a field card, save it locally, and share the PNG.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Prepare the official model&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The app uses the official checkpoint, not the smaller distilled student. The upstream OpenCLIP/PyTorch checkpoint is about &lt;strong&gt;3.94 GB&lt;/strong&gt;. Before building the app:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install Python 3.13 and create the project environment with &lt;code&gt;py -3.13 -m venv .venv&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the model-export dependencies: &lt;code&gt;.venv\Scripts\python.exe -m pip install -r scripts\requirements-bioclip-export.txt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;.venv\Scripts\python.exe scripts\export-bioclip-25-onnx.py&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The exporter verifies the existing 4,271-label embedding table against its published SHA-256 (the model author identifies it as the teacher's text-embedding space), downloads the checkpoint at a pinned Hugging Face revision, exports an FP16 ONNX image encoder, and verifies its output against OpenCLIP and…&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/Jayant-Jeet/BioDex" 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;BioDex is a Kotlin app: Jetpack Compose for the UI, CameraX for the camera, ONNX Runtime for the model. The interesting part is what the model is and where each half of it runs.&lt;/p&gt;

&lt;h4&gt;
  
  
  BioCLIP, split in half
&lt;/h4&gt;

&lt;p&gt;BioCLIP is a CLIP-style model for biology. It was trained to put photos of living things and their names into the same vector space, so "which species is this?" becomes "which name sits closest to this photo?" That framing is what makes the whole app possible on a phone.&lt;/p&gt;

&lt;p&gt;I use the official BioCLIP 2.5 Huge (ViT-H/14) from the Imageomics Institute, MIT-licensed. Only one half of it runs on the phone: the image encoder. The text half had already done its job before the app existed, because the 4,271 plant names were turned into embeddings ahead of time and shipped as a table (I reused a published one, more on that below). At runtime the app crops and normalizes your photo to 224 x 224, runs one forward pass to get a vector, compares it against the table with cosine similarity, and takes the closest match. If nothing scores at least 0.45, BioDex says so instead of inventing a plant. The phone never has to read a word.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;photo -&amp;gt; crop + normalize (224 x 224) -&amp;gt; image encoder (FP16 ONNX, on the phone) -&amp;gt; vector&lt;br&gt;
vector vs. 4,271 precomputed name embeddings -&amp;gt; cosine similarity -&amp;gt; best match (&amp;gt;= 0.45) -&amp;gt; card&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Getting a 4 GB checkpoint into an APK
&lt;/h4&gt;

&lt;p&gt;The official checkpoint is 3.94 GB. A Python script in the repo downloads it at a pinned revision, exports just the image encoder to ONNX in FP16, and checks the result against OpenCLIP and ONNX Runtime before it goes anywhere near Android. What comes out is a 1.26 GB file, roughly 632 million weights at two bytes each. It sits in the app's assets and gets copied into private storage on first use, which is why the very first run is slow due to model download.&lt;/p&gt;

&lt;p&gt;That's the honest price of open and offline: this is not a small model. The first version of BioDex used a tiny distilled student model from Nate Hamilton's BioCLIP 2.5 Mobile project. The current version runs the full teacher. The swap was possible because Nate published his 4,271-plant list together with text embeddings in the teacher's own embedding space, so the same table works behind either image encoder. I reused his species list and that table (verifying its SHA-256 along the way), left his student encoder out, and put the real thing behind it. That was a lot of work I didn't have to do, and I'm grateful for it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Teaching 4,271 plants to talk
&lt;/h4&gt;

&lt;p&gt;A card needs words, and I wanted them to read like a field guide rather than a database row. The obvious move, a language model on the phone, would have meant squeezing it in beside a 1.26 GB vision model. So I moved the language to build time. Gemma 4 (the E4B size, running locally through Ollama) wrote a common name and a short field note for every one of the 4,271 plants, once, with a resumable script in the repo. The results ship as a JSON file and the app just looks them up. No language model runs on the phone.&lt;/p&gt;

&lt;p&gt;The trade-off is that the notes describe the species, not your photo. Specimen #0001 shows it: the note talks about small, pale flowers, and my photo is full of pink ones. The notes are AI-written and can be wrong, and the README says so plainly.&lt;/p&gt;

&lt;h4&gt;
  
  
  The game on top
&lt;/h4&gt;

&lt;p&gt;I designed the look in Figma Make first: forest greens, DM Serif Display for names, an orange full stop after the logo, and a card that turns purple and gold the moment you capture something. Then I rebuilt it in Compose. XP depends on rarity (a duplicate is worth 25), every 1,000 XP is a level (level 1 is Seedling), and there's a daily streak, a daily field mission with bonus XP and badges, and a field rank. Cards and progress live in the app's private storage, and any card can be shared as a PNG through Android's share sheet.&lt;/p&gt;

&lt;h4&gt;
  
  
  Rough edges
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plants only.&lt;/strong&gt; Animals and fungi aren't in the field guide, and a plant that isn't on the list can't come back as an answer, only its closest cousin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The score isn't a confidence level.&lt;/strong&gt; Cosine similarity says how close two vectors are, not how likely you are to be right. BioDex treats it as a suggestion and a minimum bar, never a verdict.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's heavy.&lt;/strong&gt; You need a high-end Android phone with several GB of free RAM and about 3 GB of storage. Smaller phones may run out of memory or crawl.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never use it to decide whether a plant is edible, poisonous, or medicinal.&lt;/strong&gt; Seriously.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;The prompt asks where the open approach beat a closed one, so here is exactly what BioDex gets from each open piece, and what it costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It works where there's no signal.&lt;/strong&gt; The model is inside the APK and the app never touches the network. A hosted vision API would turn "what is that?" into a spinner on exactly the trails where you'd ask it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your photos stay on your phone.&lt;/strong&gt; Pictures of your garden, your kids, your street: none of it gets uploaded, because the app never connects to anything. Photos and cards stay in private storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I could pin, verify, and swap.&lt;/strong&gt; The weights are MIT-licensed, so I pinned an exact revision, verified the label table against its published SHA-256, recorded hashes for everything the exporter produced, and swapped a tiny student model for the full one without redoing any label work. An API that can change underneath you can't promise that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identifying a plant costs nothing.&lt;/strong&gt; No per-photo fee, no rate limit, no API key to leak. The only bill was my own machine's time while Gemma wrote 4,271 field notes locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where closed would have won.&lt;/strong&gt; A hosted model would probably know far more than 4,271 plants, handle animals and fungi too, and wouldn't need 1.26 GB of my phone. Open cost me storage, RAM and one very long export script instead of money and privacy. For a game whose whole point is walking somewhere without signal, I'd make that trade again.&lt;/p&gt;

&lt;p&gt;I also didn't have to invent any of the hard parts. The Imageomics Institute trained and open-sourced the model, Nate Hamilton published a plant list and embeddings I could build on, Google's Gemma wrote the notes, and ONNX Runtime ran the whole thing on a phone. I wired them together and put a card game on top. That's open innovation at hobby scale.&lt;/p&gt;

&lt;p&gt;My BioDex started at 0 / 4,271. That's 4,271 reasons to look up from the screen.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma.&lt;/strong&gt; Gemma 4 (E4B), running locally through Ollama, wrote the common name and field note for all 4,271 plants in BioDex's field guide. The generator is a resumable script in the repo, and its output ships with the app as a plain JSON file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of GitHub Copilot.&lt;/strong&gt; GitHub Copilot became my silent co‑developer throughout BioDex’s creation — helping me transform a concept into a working MVP far ahead of schedule. It accelerated development by generating clean Kotlin snippets for Android UI components, data models, and coroutine logic, while also assisting in debugging complex camera and JSON parsing workflows.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Interview Prep Buddy - Helping my friend prepare for his next job switch 🤫</title>
      <dc:creator>Jayant Jeet Tomar</dc:creator>
      <pubDate>Sat, 03 Oct 2026 19:35:02 +0000</pubDate>
      <link>https://dev.to/halfbloodcoder/interview-prep-buddy-1cn7</link>
      <guid>https://dev.to/halfbloodcoder/interview-prep-buddy-1cn7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Interview Prep Buddy&lt;/strong&gt;, a privacy‑first web app that helps my friend prepare for job interviews. The tool lets them upload their resume and paste a job description, then generates commonly asked interview questions tailored to their skills and experience. It also highlights strengths and gaps in the resume for that specific role, so they can prepare compensating answers.&lt;/p&gt;

&lt;p&gt;The app goes further with a mock interview mode: an AI voice asks questions, the user responds via speech, and the system scores their answers, identifies gaps, and adds follow‑up questions. It’s a supportive, interactive way to practice interviews without risking personal data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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://www.interview-prep.online/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;interview-prep.online&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&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/Jayant-Jeet" rel="noopener noreferrer"&gt;
        Jayant-Jeet
      &lt;/a&gt; / &lt;a href="https://github.com/Jayant-Jeet/interview-prep-buddy" rel="noopener noreferrer"&gt;
        interview-prep-buddy
      &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;Interview Prep Buddy&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Interview Prep Buddy matches a resume to a job description, creates a role-aware question bank, and scores spoken or typed practice answers. Question generation runs in Ollama on each visitor's own device; the app does not use a hosted inference service.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Node.js (only needed to run the local static development server)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ollama.com/" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; installed on the device running the browser&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;llama3.1:8b&lt;/code&gt; model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Download the model in a terminal:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull llama3.1:8b&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Keep Ollama running while using the app. The app connects from the browser directly to &lt;code&gt;http://localhost:11434&lt;/code&gt;; resume and job-description text are not sent to this project's web server.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run the hosted website with local Ollama&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install Ollama on the device running your browser and download the model:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull llama3.1:8b&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On Windows, allow the hosted website's exact origin in Ollama. In PowerShell, run:&lt;/p&gt;
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;setx OLLAMA_ORIGINS &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;https://www.interview-prep.online&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;If &lt;code&gt;OLLAMA_ORIGINS&lt;/code&gt; already has values, add…&lt;/p&gt;
&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/Jayant-Jeet/interview-prep-buddy" 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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open‑Source AI&lt;/strong&gt;: Powered by &lt;strong&gt;Llama&lt;/strong&gt; running locally via &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Minimalist single‑page web app (HTML, CSS, lightweight JS).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speech Integration&lt;/strong&gt;: Browser‑based speech recognition and synthesis for interactive interviews.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation&lt;/strong&gt;: AI + rule‑based scoring for clarity, technical accuracy, and confidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The USP is that resumes and job descriptions are processed &lt;strong&gt;entirely on the user’s device&lt;/strong&gt;. Nothing is sent to external servers, ensuring complete privacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation made this project possible. Running open‑weight models locally means users don’t depend on closed APIs or external services. They keep control of their data, while still benefiting from advanced AI capabilities. This freedom to adapt, extend, and run inference locally is exactly why open‑source AI matters — it empowers individuals to build tools that are both useful and trustworthy.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of GitHub Copilot&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Community Feedback
&lt;/h2&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%2Fibwwd8z87ok2ljnjtq3e.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%2Fibwwd8z87ok2ljnjtq3e.png" alt=" " width="537" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

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