<?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: Raga Vinjanampati</title>
    <description>The latest articles on DEV Community by Raga Vinjanampati (@raga_vinjanampati).</description>
    <link>https://dev.to/raga_vinjanampati</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%2F4154945%2Fd5cd882e-6201-452d-bba0-180356c2ed97.png</url>
      <title>DEV Community: Raga Vinjanampati</title>
      <link>https://dev.to/raga_vinjanampati</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raga_vinjanampati"/>
    <language>en</language>
    <item>
      <title>I built an app that lets 2.5-billion-year-old rocks guilt-trip you. My college rocks are very disappointed in me.</title>
      <dc:creator>Raga Vinjanampati</dc:creator>
      <pubDate>Mon, 12 Oct 2026 06:23:34 +0000</pubDate>
      <link>https://dev.to/raga_vinjanampati/i-built-an-app-that-lets-25-billion-year-old-rocks-guilt-trip-you-my-college-rocks-are-very-20eb</link>
      <guid>https://dev.to/raga_vinjanampati/i-built-an-app-that-lets-25-billion-year-old-rocks-guilt-trip-you-my-college-rocks-are-very-20eb</guid>
      <description>&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%2Fwnan2zjbdjuoytwn11nn.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%2Fwnan2zjbdjuoytwn11nn.png" alt="Turns out even rocks have more personality then me." width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&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;p&gt;A rock told me my face was a distraction.&lt;/p&gt;

&lt;p&gt;Not a person. A rock. A big granite boulder in Hyderabad, about 2.5 billion years old.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Do try not to stare so intensely. Your face is a distraction."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To be fair, I did build the app that made it say that. So that one's on me.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Adopt-a-Rock&lt;/strong&gt; is a Tamagotchi, but it's a rock. And it only works if you go outside.&lt;/p&gt;

&lt;p&gt;Hyderabad is full of huge, ancient rocks. My college, Gokaraju Rangaraju (GRIET), has them too. I've walked past them for years and never once asked how they were doing.&lt;/p&gt;

&lt;p&gt;So now they tell you. Here's how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find a rock. Take one photo.&lt;/strong&gt; The app saves where the rock is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait.&lt;/strong&gt; The rock is asleep. It's 2.5 billion years old. It doesn't reply the same day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It wakes up.&lt;/strong&gt; Overnight, a free AI running on my laptop looks at the photo and gives the rock a name, a personality, and a grudge. It even gets its own voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go back.&lt;/strong&gt; When you visit the rock again, it talks to you through your earbuds. Each visit unlocks a new bit of its story.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay away, and it texts you.&lt;/strong&gt; Rocks get lonely. And dramatic.&lt;/li&gt;
&lt;/ol&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%2F77fwfecss3npgs8ix2dq.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%2F77fwfecss3npgs8ix2dq.png" alt="Here's the app!" width="800" height="408"&gt;&lt;/a&gt;&lt;br&gt;
You can't look after a rock from your bed. You have to go outside.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

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

&lt;p&gt;Every rock line in the video comes straight from the app. I didn't write a single one of their insults. They came up with those on their own. (The googly eyes were my idea. The rocks did not consent.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet the Rocks
&lt;/h2&gt;

&lt;p&gt;I tested the app on photos of famous Hyderabad rocks. Here's who woke up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🪨 Khajanchi&lt;/strong&gt; &lt;em&gt;(patiently grumpy)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wants to be dusted with "a single, perfectly formed sand grain each morning."&lt;/li&gt;
&lt;li&gt;Has a neighbour rock called Prakasan, who is "always trying to get people to mistake him for me."&lt;/li&gt;
&lt;li&gt;On how I photographed it: "It's a poor angle. A very poor angle."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🪨 Katta&lt;/strong&gt; &lt;em&gt;(grumbling, stoic)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I consider all shadows an intrusion."&lt;/li&gt;
&lt;li&gt;Hates construction work nearby: "It's a crime against geological stability."&lt;/li&gt;
&lt;li&gt;Secretly likes the light through the leaves. Even rocks have a soft side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🪨 Chilakalu&lt;/strong&gt; &lt;em&gt;(cantankerous)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thinks the pebbles around it are arranged wrong. It's been annoyed about this for a long time.&lt;/li&gt;
&lt;li&gt;When I took its photo: "Focus on the boulders, woman."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🪨 Gael&lt;/strong&gt; &lt;em&gt;(irritated)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I've developed a distinct dislike for the colour orange."&lt;/li&gt;
&lt;li&gt;The one that told me my face was a distraction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🪨 My college rocks&lt;/strong&gt; &lt;em&gt;(asleep 💤)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then I went to adopt the rocks at my own college, GRIET.&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%2Fo8ry0skgyp6ry57vtej0.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%2Fo8ry0skgyp6ry57vtej0.png" alt="Me sitting next to my adopted rock on campus" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Me and my rock. Only one of us is 2.5 billion years old. Only one of us has a braid.&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%2F7yxy7nf2pvxg97hkq8ux.jpeg" 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%2F7yxy7nf2pvxg97hkq8ux.jpeg" alt="The rocks at my college" width="800" height="602"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This one lives at my college. It has seen more batches graduate than any professor.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;These two are wedged between the college buildings. The buildings came later. The rocks have opinions about that.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They haven't said a word yet. They're still asleep, waiting for the laptop to wake them up. They've waited 2.5 billion years for someone to notice them, so they're in no hurry. But I can already tell they're disappointed in me. I've walked past them for years and never said hi.&lt;/p&gt;
&lt;h2&gt;
  
  
  Skip a Visit, Get a Text
&lt;/h2&gt;

&lt;p&gt;If you don't visit, your rock starts messaging you. These are real messages from Khajanchi:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;3 days:&lt;/strong&gt; "A pigeon has built a nest in one of my larger cracks. Really?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 days:&lt;/strong&gt; "The ORR traffic continues its incessant, grating roar."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14 days:&lt;/strong&gt; "A particularly aggressive auto-rickshaw nearly clipped my base. The audacity!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My mom doesn't guilt-trip me this well.&lt;/p&gt;
&lt;h2&gt;
  
  
  No Proxy Attendance
&lt;/h2&gt;

&lt;p&gt;Every college student knows the trick: get a friend to mark you present. This app doesn't fall for it.&lt;/p&gt;

&lt;p&gt;A visit only counts if you're actually standing near the rock &lt;strong&gt;and&lt;/strong&gt; the photo matches. Try to check in with a different rock, and the real one gets offended:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Prakasan is a fool. He's shaped differently, he's covered in algae, and he constantly tries to block my sunlight. He is not me." — Khajanchi&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stricter than my college's attendance system.&lt;/p&gt;
&lt;h2&gt;
  
  
  Bloopers
&lt;/h2&gt;

&lt;p&gt;The AI is small, so it gets things wrong. My favourites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I asked Gael for &lt;strong&gt;one&lt;/strong&gt; "3 days without a visit" message. It kept going: &lt;em&gt;"Nine days. A pigeon sat on me. I let it."&lt;/em&gt; Its 14-day message went all the way to &lt;em&gt;"Thirty-five days. I am parched, utterly depleted."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Katta finished a story, then kept typing closing quote marks: &lt;code&gt;” ” ” ” ” ” ” ”&lt;/code&gt;. Forever.&lt;/li&gt;
&lt;li&gt;Khajanchi wrote a scene where I put a plastic bottle next to it for the photo. &lt;strong&gt;There was no bottle.&lt;/strong&gt; The AI just decided I was that kind of person.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The tricky part: phones can't run a big AI model easily, and there's no signal near most rocks. So I split the work in two.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rocks are slow.&lt;/strong&gt; Everything that happens &lt;em&gt;at the rock&lt;/em&gt; runs on the phone, with no internet. The heavy AI work happens at home on my laptop, while the rock "sleeps".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHONE (works offline)                 LAPTOP (at home)
─────────────────────                 ────────────────
Camera + GPS                          Gemma 3 (the rock's brain)
Photo matching (CLIP)        ⇄        Piper (the rock's voice)
Saved stories + voices      Wi-Fi     Writes new stories overnight
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 4B&lt;/strong&gt; (Google's open model) runs on my laptop through &lt;strong&gt;Ollama&lt;/strong&gt;. It looks at the rock's photo and writes the personality, stories, and nagging texts. Waking up one rock takes about 2 minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLIP&lt;/strong&gt; runs right inside the phone's browser. It checks whether your photo shows the same rock. It works with Wi-Fi and mobile data turned off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Piper&lt;/strong&gt; turns the text into speech. Each rock gets its own voice and talks a little slowly, because rocks are never in a hurry.&lt;/li&gt;
&lt;li&gt;When the phone gets back on home Wi-Fi, it syncs with the laptop and picks up any new stories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Three things I learned about getting a small AI to be funny:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It copies examples.&lt;/strong&gt; If I put one example line in my instructions, every rock repeated it. So I describe the style instead of giving examples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make it look first.&lt;/strong&gt; I ask the AI to list what it sees in the photo before it writes anything. That way the stories mention real details, like cracks, trees and the building behind the rock.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check its work.&lt;/strong&gt; The code throws out broken answers (like the quote-mark spiral) and asks again, up to 3 times.&lt;/li&gt;
&lt;/ol&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/Raga-V" rel="noopener noreferrer"&gt;
        Raga-V
      &lt;/a&gt; / &lt;a href="https://github.com/Raga-V/deccan-rocks" rel="noopener noreferrer"&gt;
        deccan-rocks
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Adopt a 2.5-billion-year-old granite boulder in Hyderabad. It talks, slowly and with grudges. Offline phone PWA + local Gemma, no cloud.
    &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;Deccan Rocks&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Adopt a 2.5-billion-year-old granite boulder in Hyderabad. Visit it. It talks to you, slowly and with grudges.&lt;/p&gt;

&lt;p&gt;Everything runs on your own devices. The phone works fully offline on the hill. The rock's brain (Gemma) runs on a
laptop at home. No cloud API is involved, and GPS and photos never leave your phone and laptop.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The design trick: rocks are slow&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;In the field (phone, offline)&lt;/th&gt;
&lt;th&gt;At home (laptop, local)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Snap the rock, read GPS&lt;/td&gt;
&lt;td&gt;FastAPI + SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLIP ViT-B/32 in the browser (transformers.js) checks it's the same rock&lt;/td&gt;
&lt;td&gt;Gemma 3 via Ollama looks at the photo and invents a personality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPS check: within ~40 m of the adoption spot&lt;/td&gt;
&lt;td&gt;Gemma writes the next 3 chapters, a rejection line and guilt-trip nags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plays the next chapter's voice line, cached on the phone&lt;/td&gt;
&lt;td&gt;Piper TTS gives every rock its own voice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;A rock you adopt is &lt;strong&gt;asleep 💤&lt;/strong&gt;…&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/Raga-V/deccan-rocks" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Because a rock on a hill doesn't have Wi-Fi. Neither does most of my college.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Adopt-a-Rock (open, runs on my devices)&lt;/th&gt;
&lt;th&gt;A paid cloud AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Works with no signal&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where your location goes&lt;/td&gt;
&lt;td&gt;Your phone and laptop only&lt;/td&gt;
&lt;td&gt;Someone else's server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost per visit&lt;/td&gt;
&lt;td&gt;₹0&lt;/td&gt;
&lt;td&gt;Pay every time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can I change how the rock thinks?&lt;/td&gt;
&lt;td&gt;Yes. Edit it, swap models, retrain it&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An app like this knows where you go every day. For a student, that's basically your whole routine: which classes you skip and how long you spend at the canteen. I didn't want that on anyone else's server. With open models, it doesn't have to be.&lt;/p&gt;

&lt;p&gt;Also, since every visit is free, your rock can talk to you every day for four years of college. For a rock, four years is about one blink.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Serious Bit
&lt;/h2&gt;

&lt;p&gt;The rocks have good reason to be grumpy. Hyderabad's ancient rock formations have been disappearing to construction for decades, and people here have fought for years to save them.&lt;/p&gt;

&lt;p&gt;I gave the AI a list of things a Hyderabad rock might complain about: peacocks, biryani smell, rain puddles, auto-rickshaws, construction. Almost every rock picked construction or traffic. They know.&lt;/p&gt;

&lt;p&gt;I started this as a silly project. Now I notice every rock on my way to class.&lt;/p&gt;

&lt;p&gt;Go adopt a rock. It's been waiting since before your college was built. It will complain about that too.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— Raga Gowtami, student at GRIET, now legally responsible for several very disappointed rocks&lt;/em&gt; 🪨&lt;/p&gt;

&lt;p&gt;&lt;em&gt;P.S. If you build your own and your rock insults you, drop its best line in the comments. Mine called my face a distraction. Beat that.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
