<?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: Divyansh Goyal</title>
    <description>The latest articles on DEV Community by Divyansh Goyal (@phoenix1808).</description>
    <link>https://dev.to/phoenix1808</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%2F3968855%2F9bb75bc7-0224-4081-8bd2-c29e5735c747.png</url>
      <title>DEV Community: Divyansh Goyal</title>
      <link>https://dev.to/phoenix1808</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/phoenix1808"/>
    <language>en</language>
    <item>
      <title>Later — keep screenshotting, an open-weight model turns your screenshots into one-tap actions</title>
      <dc:creator>Divyansh Goyal</dc:creator>
      <pubDate>Sun, 25 Oct 2026 16:27:30 +0000</pubDate>
      <link>https://dev.to/phoenix1808/later-keep-screenshotting-an-open-weight-model-turns-your-screenshots-into-one-tap-actions-igi</link>
      <guid>https://dev.to/phoenix1808/later-keep-screenshotting-an-open-weight-model-turns-your-screenshots-into-one-tap-actions-igi</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Everyone has a camera roll full of screenshots taken "to deal with later": an event poster, an electricity bill, a café someone recommended, a chat message saying &lt;em&gt;"submit the form by Monday"&lt;/em&gt;. Then nothing happens. The screenshot is the whole plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Later&lt;/strong&gt; is an Android app that rewards exactly that habit. &lt;strong&gt;You keep screenshotting, and you don't even open the app.&lt;/strong&gt; In the background, an open-weight vision model reads each new screenshot and turns it into the one action it needs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You screenshot…&lt;/th&gt;
&lt;th&gt;Later turns it into…&lt;/th&gt;
&lt;th&gt;One tap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🎤 An event poster&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Event&lt;/strong&gt;: date, time, venue, link&lt;/td&gt;
&lt;td&gt;Add to calendar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💡 An electricity bill&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Bill&lt;/strong&gt;: Rs. 1,240, due 28 Oct&lt;/td&gt;
&lt;td&gt;Add reminder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💬 "submit the form by Monday 5 PM"&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;To-do&lt;/strong&gt;: Mon 26 Oct, 17:00&lt;/td&gt;
&lt;td&gt;Add reminder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☕ A café listing&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Place&lt;/strong&gt; with the full address&lt;/td&gt;
&lt;td&gt;Open in maps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔗 An article or product&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Link&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open link&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;😂 A meme&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Skipped&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔒 A bank OTP&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Private&lt;/strong&gt;: skipped, nothing kept&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At &lt;strong&gt;8 PM&lt;/strong&gt;, one notification sums it up: &lt;em&gt;"12 screenshots today, sorted: 2 events, 1 bill, 3 links. Tap to handle them in one go."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Who gets to be lazier? Anyone whose screenshots folder is secretly their to-do list.&lt;/p&gt;

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

&lt;p&gt;📦 &lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://github.com/Phoenix1808/Later/releases/latest" rel="noopener noreferrer"&gt;Download the APK&lt;/a&gt; (Android 7.0+). Allow access to photos, take a screenshot of anything you'd "deal with later", then open Later or wait for the background scan.&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Live backend:&lt;/strong&gt; &lt;a href="https://later-api-pcxg.onrender.com/" rel="noopener noreferrer"&gt;later-api-pcxg.onrender.com&lt;/a&gt; (Render free tier, so the first request after a quiet spell takes ~50 s to wake up).&lt;/p&gt;

&lt;p&gt;Here's what the deployed server returned for a real test screenshot of an electricity bill, with today's date sent as Sunday 25 Oct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BSES Yamuna Power Bill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Pay the Rs. 1,240.00 electricity bill before the due date to avoid a late fee."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-10-28"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rs. 1,240.00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In the app, that becomes a &lt;strong&gt;Bill&lt;/strong&gt; card showing &lt;strong&gt;"⏰ Due Wed 28 Oct"&lt;/strong&gt; and &lt;strong&gt;"💸 Rs. 1,240.00"&lt;/strong&gt;, with one button, &lt;strong&gt;Add reminder&lt;/strong&gt;, which opens your calendar with a "Pay: BSES Yamuna Power Bill (Rs. 1,240.00)" all-day reminder on the 28th. In my testing, a bank OTP screenshot came back as &lt;code&gt;"kind": "private"&lt;/code&gt; with every other field empty.&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/Phoenix1808" rel="noopener noreferrer"&gt;
        Phoenix1808
      &lt;/a&gt; / &lt;a href="https://github.com/Phoenix1808/Later" rel="noopener noreferrer"&gt;
        Later
      &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;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/Phoenix1808/Later/docs/icon.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%2FPhoenix1808%2FLater%2FHEAD%2Fdocs%2Ficon.png" width="110" alt="Later icon: screenshot crop corners around a check mark"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Later&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;b&gt;Keep screenshotting. Later handles it.&lt;/b&gt;&lt;br&gt;
  An Android app that turns the screenshots you take "to deal with later" into one-tap actions
&lt;/p&gt;

&lt;p&gt;
  Built for the DEV &lt;b&gt;Hacktoberfest 2026 Open-Source AI Challenge, Week 3: "Slow and Steady"&lt;/b&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The lazy habit it rewards&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Everyone screenshots things to deal with later: an event poster, a bill, an address, a link,
a chat message with a deadline. Then the screenshots pile up and nothing happens.&lt;/p&gt;
&lt;p&gt;Later doesn't ask you to change that habit. &lt;strong&gt;You keep screenshotting. You don't even open the app.&lt;/strong&gt;
In the background, an &lt;strong&gt;open-weight vision model&lt;/strong&gt; reads each new screenshot and turns it into
the one action it needs:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You screenshot…&lt;/th&gt;
&lt;th&gt;Later makes it…&lt;/th&gt;
&lt;th&gt;One tap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🎤 An event poster&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Event&lt;/strong&gt;: date, time, venue&lt;/td&gt;
&lt;td&gt;Add to calendar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💡 An electricity bill&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Bill&lt;/strong&gt;: amount + due date&lt;/td&gt;
&lt;td&gt;Add reminder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💬 "submit the form by Monday 5 PM"&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;To-do&lt;/strong&gt; with a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Phoenix1808/Later" 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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Screenshot taken ──▶ WorkManager job (every ~15 min, even with the app closed)
                       │  finds new files in the Screenshots folder (MediaStore)
                       │  shrinks each one to a 1600 px JPEG
                       ▼
       FastAPI backend on Render ──▶ Qwen 3.8 27B (open weights, vision) on Groq
                       │  {kind, title, summary, date, time, location, amount, url}
                       ▼
       Saved on the phone ──▶ one-tap actions + an 8 PM digest notification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The open model does the reading.&lt;/strong&gt; Qwen 3.8 27B (open weights, text + vision) gets the screenshot plus today's date and returns strict JSON: what kind of thing it is, plus exactly the details needed to act on it. Today's date matters: &lt;em&gt;"Monday 5 PM"&lt;/em&gt; only becomes Mon 26 Oct, 17:00 if the model knows today is Wednesday the 21st.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>android</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Side Quest — an app that writes outdoor adventures from the real places around you (and checks your photo proof)</title>
      <dc:creator>Divyansh Goyal</dc:creator>
      <pubDate>Sun, 11 Oct 2026 07:02:24 +0000</pubDate>
      <link>https://dev.to/phoenix1808/side-quest-an-app-that-writes-outdoor-adventures-from-the-real-places-around-you-and-checks-your-34p</link>
      <guid>https://dev.to/phoenix1808/side-quest-an-app-that-writes-outdoor-adventures-from-the-real-places-around-you-and-checks-your-34p</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;Most "go outside" apps are just another screen to stare at. I wanted the opposite: an app that's the &lt;strong&gt;shortest part of your walk&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Side Quest&lt;/strong&gt; is an Android app that looks at the parks, lakes, gardens and viewpoints actually within walking distance of you, checks the weather and how close sunset is, and writes &lt;strong&gt;three small real-world quests&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🍂 &lt;strong&gt;The first yellow leaf.&lt;/strong&gt; Walk to Lodhi Gardens (600 m north-west) and find a leaf that has started turning gold.&lt;br&gt;
🌅 &lt;strong&gt;Catch the last light.&lt;/strong&gt; Sunset is at 18:02. Catch it from the open lawn by the lake.&lt;br&gt;
🐦 &lt;strong&gt;Perched park watcher.&lt;/strong&gt; Find a bird sitting still on a branch or a wire.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You read a quest (about 30 seconds of screen time), put the phone away, and go. When you find the thing, you snap &lt;strong&gt;one photo&lt;/strong&gt;, an &lt;strong&gt;open-weight vision model&lt;/strong&gt; checks it, and the quest lands in your field journal with a 🔥 day streak.&lt;/p&gt;

&lt;p&gt;The part I'm proudest of: &lt;strong&gt;you can't fake a Side Quest.&lt;/strong&gt; While testing an early version, I could complete quests from my room with an old photo, which made the "go outside" part meaningless. So proof now has three layers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Question it answers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;📍 &lt;strong&gt;GPS geofence&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Are you actually &lt;em&gt;at&lt;/em&gt; the place? Too far away → "Not there yet 🚶 You're 1.2 km from Lodhi Gardens", with a Directions button&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📷 &lt;strong&gt;Live camera only&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Was the photo taken &lt;em&gt;now&lt;/em&gt;? There's no gallery upload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🤖 &lt;strong&gt;Vision referee&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Does the photo show &lt;em&gt;the right thing&lt;/em&gt;? It's told to fail photos of screens or printed pictures&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

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

&lt;p&gt;In the video: three quests from real places near me, the GPS check refusing my proof because I was 610 m from the park, the AI referee passing a "leaf shadows on the ground" quest, the streak and field journal updating, Directions, and light/dark mode.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Transparency note: for the photo step in this recording I used a debug-only test shortcut to submit a photo from my gallery. The released app (the APK below) only accepts photos from the live camera.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://github.com/Phoenix1808/SideQuest/releases/latest" rel="noopener noreferrer"&gt;Download the APK&lt;/a&gt; (Android 7.0+)&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing it around home
&lt;/h3&gt;

&lt;p&gt;I tested Side Quest around my own neighbourhood. The quests pointed at real places right around me, like a block park 493 m south and a small unnamed park about 600 m east. The GPS check did its job: standing 610 m from the park, it refused to open the camera and offered directions instead. The quests also change with the time of day. At night they stayed on the balcony and the street (the moon, street lights), and in the morning they sent me looking for leaf shadows on the pavement.&lt;/p&gt;

&lt;p&gt;What I'd improve next: refreshing the weather card without replacing the day's quests, and checking park opening hours before suggesting one.&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/Phoenix1808" rel="noopener noreferrer"&gt;
        Phoenix1808
      &lt;/a&gt; / &lt;a href="https://github.com/Phoenix1808/SideQuest" rel="noopener noreferrer"&gt;
        SideQuest
      &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;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/Phoenix1808/SideQuest/docs/icon.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%2FPhoenix1808%2FSideQuest%2FHEAD%2Fdocs%2Ficon.png" width="120" alt="Side Quest icon: a map pin with a sprout growing inside it"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Side Quest&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;b&gt;Small outdoor adventures, written from the real places around you.&lt;/b&gt;&lt;br&gt;
  Get a quest. Put the phone away. Go outside. Prove it with one photo
&lt;/p&gt;

&lt;p&gt;
  Built for the DEV &lt;b&gt;Hacktoberfest 2026 Open-Source AI Challenge, Week 1: "Touch Grass"&lt;/b&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it is&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Most "go outside" apps are another screen to stare at. Side Quest tries to be the shortest
part of your walk.&lt;/p&gt;
&lt;p&gt;Open it and it writes &lt;strong&gt;three short real-world quests&lt;/strong&gt; from the parks, lakes, gardens and
viewpoints actually within walking distance, shaped by today's weather and how close sunset is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🍂 &lt;strong&gt;The first yellow leaf.&lt;/strong&gt; Walk to Lodhi Gardens (600 m north-west) and find a leaf that has started turning gold.
🌅 &lt;strong&gt;Catch the last light.&lt;/strong&gt; Sunset is at 18:02. Catch it from the open lawn by the lake.
🐦 &lt;strong&gt;Perched park watcher.&lt;/strong&gt; Find a bird sitting still on a branch or a wire.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then the phone goes…&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/Phoenix1808/SideQuest" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The repo has the Android app (Kotlin + XML) and the FastAPI backend, with setup steps in the README.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Android app (Kotlin + XML)
  │  HTTPS + app key
  ▼
FastAPI backend on Render
  ├── OpenStreetMap (Overpass)      → real nearby places
  ├── Open-Meteo → MET Norway       → weather
  ├── NOAA sun calculation (local)  → sunrise, sunset, day/night
  └── Qwen 3.8 27B (open weights)   → writes quests + referees photos
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Android side.&lt;/strong&gt; Plain Kotlin with XML layouts. Location comes from Android's own &lt;code&gt;LocationManager&lt;/code&gt; (no Play Services), with two modes: a quick network fix to &lt;em&gt;build&lt;/em&gt; quests, and a fresh GPS fix to &lt;em&gt;prove&lt;/em&gt; you're there. The geofence allows 400 m for big places like parks (OpenStreetMap gives one centre point, but a park can be 600 m across), 150 m for a fountain or viewpoint, plus the GPS's own reported error. If you only granted "approximate" location, the app asks Android to upgrade it to precise. Photos go from the camera app straight into private storage through a &lt;code&gt;FileProvider&lt;/code&gt;, so the app needs &lt;strong&gt;no camera or storage permission at all&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend.&lt;/strong&gt; FastAPI on &lt;strong&gt;Render&lt;/strong&gt;, which is the app's AI runtime: it gathers places and weather, prompts the model for quests as JSON, and sends each photo to the vision model with the quest's "proof" description. The model inference itself runs on Groq. A shared app key keeps strangers who find the public URL from spending the free model quota.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Things that broke, and what I learned:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The model ignored a safety rule.&lt;/strong&gt; I told it in the prompt never to send people into parks after dark. In testing at 3 AM, it still suggested Lodhi Gardens (closed and unlit at night). Prompts aren't guarantees, so now &lt;strong&gt;the backend doesn't show the model any places after sunset at all&lt;/strong&gt;. Night quests stay on the doorstep, balcony or a lit street.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free map servers are slow.&lt;/strong&gt; Public Overpass servers took 17–30 s or timed out. The backend now asks four mirrors at once, uses the first answer, and caches places for a day. Quest creation went from &lt;strong&gt;43 s to about 10 s&lt;/strong&gt;, and about 3 s once an area is cached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather broke only in production.&lt;/strong&gt; Open-Meteo worked from my laptop but not from Render, likely because many apps share Render's outgoing IP addresses and hit its free limit. I added MET Norway's open data as a backup, and now calculate sunrise/sunset on the server (within about a minute of Open-Meteo across five cities), so day/night is always known.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits.&lt;/strong&gt; Groq's free tier allows 8,000 tokens a minute, and a single photo costs about 1,800. The backend now waits and retries when told to slow down, instead of showing an error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this with help from an AI coding agent. I made the product and design calls, like closing the "complete quests from your room" loophole, and went through every file until I could explain how it works.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Everything Side Quest depends on is open, and every piece mattered:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An open-weight model I can move.&lt;/strong&gt; Quests and photo checks run on &lt;strong&gt;Qwen 3.8 27B&lt;/strong&gt;. The backend talks to any OpenAI-compatible endpoint, so switching to Gemma on Hugging Face, or to a model on my own machine with Ollama, is three environment variables, not a rewrite. On an earlier weekend project, the provider retired the model I was using mid-build; because it was just one open model among many, switching took one line. That's why I built Side Quest the same way from the start.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open map data is what makes it personal.&lt;/strong&gt; Quests point at &lt;em&gt;your&lt;/em&gt; neighbourhood because of &lt;strong&gt;OpenStreetMap&lt;/strong&gt;, mapped by volunteers. No paid maps API, no per-request bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open weather, with a second open source as backup.&lt;/strong&gt; When one open service was blocked from my server, another open provider (MET Norway) filled in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; Free tiers all the way down. The constraints of those free tiers (rate limits, slow public servers) shaped the design: retries, caching and racing mirrors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your exact location never reaches the model.&lt;/strong&gt; It only sees place names, distances and the weather.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open tools let a solo developer build something that understands real streets, real weather and real photos, and keep full control over where each piece runs.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; Render is Side Quest's AI runtime. It hosts the FastAPI service that builds each quest (OpenStreetMap + weather + the open model) and referees every photo proof, deployed from a &lt;code&gt;render.yaml&lt;/code&gt; Blueprint.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Map data © &lt;a href="https://www.openstreetmap.org/copyright" rel="noopener noreferrer"&gt;OpenStreetMap&lt;/a&gt; contributors. Weather by &lt;a href="https://open-meteo.com/" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt; and &lt;a href="https://api.met.no/" rel="noopener noreferrer"&gt;MET Norway&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>android</category>
      <category>opensource</category>
    </item>
    <item>
      <title>so what new things you guys are aiming to learn this week</title>
      <dc:creator>Divyansh Goyal</dc:creator>
      <pubDate>Mon, 05 Oct 2026 14:36:02 +0000</pubDate>
      <link>https://dev.to/phoenix1808/so-what-new-things-you-guys-are-aiming-to-learn-this-week-2aff</link>
      <guid>https://dev.to/phoenix1808/so-what-new-things-you-guys-are-aiming-to-learn-this-week-2aff</guid>
      <description></description>
    </item>
  </channel>
</rss>
