<?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: Tushar Sharma</title>
    <description>The latest articles on DEV Community by Tushar Sharma (@tusharsharmain).</description>
    <link>https://dev.to/tusharsharmain</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%2F167675%2F7ea89760-674a-47fe-b310-793c636380be.jpeg</url>
      <title>DEV Community: Tushar Sharma</title>
      <link>https://dev.to/tusharsharmain</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tusharsharmain"/>
    <language>en</language>
    <item>
      <title>SkyDrift ☁️ — Look Up &amp; Touch Grass: AI-Powered Cloud-Gazing Companion</title>
      <dc:creator>Tushar Sharma</dc:creator>
      <pubDate>Fri, 09 Oct 2026 12:25:51 +0000</pubDate>
      <link>https://dev.to/tusharsharmain/skydrift-look-up-touch-grass-ai-powered-cloud-gazing-companion-4e8h</link>
      <guid>https://dev.to/tusharsharmain/skydrift-look-up-touch-grass-ai-powered-cloud-gazing-companion-4e8h</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the Hacktoberfest 2026 Open-Source AI Challenge Week 1: Touch Grass 🌿&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌿 Why SkyDrift? (The "Touch Grass" Fit)
&lt;/h2&gt;

&lt;p&gt;As developers, we spend entire days staring at IDEs, logs, and glowing screens. It is easy to forget there is an entire physical world right above us.&lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;Touch Grass&lt;/strong&gt; challenge, I built &lt;strong&gt;SkyDrift&lt;/strong&gt; — an open-source mobile companion designed to give you an intentional reason to step away from your desk, head outside, and look straight up.&lt;/p&gt;

&lt;p&gt;Most apps are built to maximize screen time and keep you scrolling. SkyDrift does the opposite:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You step outside, take a 5-second photo of the sky, and read the brief creative insight.&lt;/li&gt;
&lt;li&gt;The interaction takes &lt;strong&gt;less than 30 seconds&lt;/strong&gt;, and then you put your phone away to enjoy the outdoors.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;⏳ &lt;strong&gt;Note on First Load:&lt;/strong&gt; The backend runs on Render's free tier. If the service has been idle, please allow &lt;strong&gt;30–50 seconds&lt;/strong&gt; on the very first upload while the instance wakes up. Subsequent requests run instantly!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ✨ Features Delivered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📸 &lt;strong&gt;Camera &amp;amp; Gallery Capture:&lt;/strong&gt; Snap a fresh sky photo in the moment or pick one from your camera roll.&lt;/li&gt;
&lt;li&gt;🦄 &lt;strong&gt;Cloud Shape Spotter (Pareidolia):&lt;/strong&gt; Discovers playful shapes, animals, and whimsical forms floating in the clouds.&lt;/li&gt;
&lt;li&gt;☁️ &lt;strong&gt;Everyday Cloud Labels:&lt;/strong&gt; Practical, plain-English labels (&lt;em&gt;Fair-weather puffs&lt;/em&gt;, &lt;em&gt;High wisps&lt;/em&gt;, &lt;em&gt;Thundercloud&lt;/em&gt;, &lt;em&gt;Low grey sheet&lt;/em&gt;) instead of dense meteorological classifications.&lt;/li&gt;
&lt;li&gt;🌤️ &lt;strong&gt;Sky-Based Weather Outlook:&lt;/strong&gt; A quick 2–4 hour outdoor weather outlook derived directly from the cloud formation in your photo.&lt;/li&gt;
&lt;li&gt;🖼️ &lt;strong&gt;Drift Gallery:&lt;/strong&gt; A persistent archive of all your past sky captures and readings.&lt;/li&gt;
&lt;li&gt;🔍 &lt;strong&gt;Full-Screen Photo View:&lt;/strong&gt; Expand and inspect your high-resolution sky captures in full detail.&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Dual Environment Flavors:&lt;/strong&gt; Clean separation between development (&lt;code&gt;dev&lt;/code&gt; hitting local Docker) and production (&lt;code&gt;prod&lt;/code&gt; hitting live cloud services).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 App Walkthrough &amp;amp; Screenshots
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🏠 Home&lt;/th&gt;
&lt;th&gt;📸 Capture &amp;amp; Upload&lt;/th&gt;
&lt;th&gt;🔍 Cloud Reading&lt;/th&gt;
&lt;th&gt;🖼️ Drift Gallery&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2Frz3s23ot9wzpjnk9pi31.png" alt="Home Page" width="800" height="1778"&gt;&lt;/td&gt;
&lt;td&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%2Fhrr4ffdiv1tvdyxf6cxv.png" alt="Capture or Upload" width="800" height="1778"&gt;&lt;/td&gt;
&lt;td&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%2F23y9txujx2k2u7g2xitj.png" alt="Detail Page" width="800" height="1778"&gt;&lt;/td&gt;
&lt;td&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%2F3mvdfbogxp9044epd8ii.png" alt="Gallery Page" width="800" height="1778"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🏗️ System Architecture
&lt;/h2&gt;

&lt;p&gt;SkyDrift runs on a clean full-stack architecture powered completely by &lt;strong&gt;100% free, reliable services&lt;/strong&gt; (zero credit cards required):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------------------------------------------------+
|                 Flutter Mobile App                    |
|          (Clean Architecture + BLoC + Dio)            |
+---------------------------+---------------------------+
                            |
                            | POST /api/drift/analyze (Multipart)
                            v
+-------------------------------------------------------+
|                 NestJS Backend API                    |
|               (Hosted on Render Docker)               |
+-------------+---------------------------+-------------+
              |                           |
              v                           v
+---------------------------+ +-------------------------+
|     Google Gemini API     | |     Cloudinary CDN      |
|   (Flash-Lite Vision AI)  | |  (Optimized WebP Media) |
+---------------------------+ +-------------------------+
              |                           |
              +-------------+-------------+
                            |
                            v
              +-------------------------+
              |     Neon PostgreSQL     |
              |  (Serverless DB Pooler) |
              +-------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🛠️ The Tech Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📱 Frontend (Mobile)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; &lt;strong&gt;Flutter&lt;/strong&gt; (Dart 3)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture:&lt;/strong&gt; Clean Architecture (&lt;code&gt;presentation&lt;/code&gt;, &lt;code&gt;application&lt;/code&gt;, &lt;code&gt;domain&lt;/code&gt;, &lt;code&gt;infrastructure&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Management:&lt;/strong&gt; &lt;code&gt;flutter_bloc&lt;/code&gt; &amp;amp; &lt;code&gt;bloc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Generation &amp;amp; DI:&lt;/strong&gt; &lt;code&gt;freezed&lt;/code&gt;, &lt;code&gt;json_serializable&lt;/code&gt;, &lt;code&gt;injectable&lt;/code&gt;, and &lt;code&gt;get_it&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Networking:&lt;/strong&gt; &lt;code&gt;dio&lt;/code&gt; and &lt;code&gt;retrofit&lt;/code&gt; with dynamic flavor configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD:&lt;/strong&gt; Automated GitHub Actions pipeline building and releasing production APKs on every tagged release&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚙️ Backend (API)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; &lt;strong&gt;NestJS&lt;/strong&gt; (TypeScript) with a modular architecture and TypeORM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vision Engine:&lt;/strong&gt; &lt;strong&gt;Google Gemini API&lt;/strong&gt; (&lt;code&gt;gemini-flash-lite-latest&lt;/code&gt;) configured for structured JSON output&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; Serverless PostgreSQL on &lt;strong&gt;Neon&lt;/strong&gt; (&lt;code&gt;ap-southeast-1&lt;/code&gt; pooler endpoint with SSL)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Storage:&lt;/strong&gt; &lt;strong&gt;Cloudinary&lt;/strong&gt; streaming media pipeline (WebP format)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; &lt;strong&gt;Render&lt;/strong&gt; (Docker Web Service) paired with a health-check keep-alive cron job&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 What Broke &amp;amp; Lessons Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI Demand Spikes &amp;amp; Fallback Traps:&lt;/strong&gt; Early on, heavy load on the vision API caused 503 errors that were initially masked by fallback mocks. Switching to &lt;code&gt;gemini-flash-lite-latest&lt;/code&gt; with strict JSON mode (&lt;code&gt;responseMimeType: 'application/json'&lt;/code&gt;) eliminated parsing crashes and drastically reduced latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-Party API Permissions:&lt;/strong&gt; A &lt;code&gt;403 Forbidden&lt;/code&gt; from Cloudinary halted uploads during production testing. It turned out brand-new accounts require explicit email confirmation before API keys unlock. Adding a clear startup credential validator in NestJS made sure misconfigurations surface immediately in server logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keeping Free Tiers Awake:&lt;/strong&gt; Free Render containers sleep after 15 minutes of inactivity. Rather than letting users suffer a 50-second cold boot every time they step outside, a free external cron ping to &lt;code&gt;GET /api/health&lt;/code&gt; keeps the container warm and ready.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Democratizing Outdoor Wellness:&lt;/strong&gt; Mindfulness tools shouldn't be locked behind expensive subscription paywalls. By building with open tooling and generous free tiers, SkyDrift demonstrates that high-quality, full-stack mobile apps can be built and deployed by anyone with zero budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent AI Observations:&lt;/strong&gt; Cloud pareidolia is creative and subjective. Open prompts and accessible model interfaces mean users can inspect exactly how the AI derives its predictions and everyday cloud names, without black-box lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community-Driven Extensions:&lt;/strong&gt; Because the Flutter app follows strict Clean Architecture and the NestJS backend uses standard OpenAPI/Swagger-ready modules, contributors can easily plug in new sensors, alternative vision models, or community galleries.&lt;/li&gt;
&lt;/ol&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; The entire backend runs as a multi-stage Docker container deployed automatically on git push to Render's Web Service, orchestrated alongside serverless PostgreSQL and keeping zero-downtime availability.&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Best Use of Gemma / Google AI:&lt;/strong&gt; Powered by Google's Gemini Vision API with tailored prompt contracts that replace Latin jargon with relatable everyday English cloud taxonomy and structured pareidolia observations.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📦 Source Code &amp;amp; Download
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📱 &lt;strong&gt;Mobile App Repository:&lt;/strong&gt; &lt;a href="https://github.com/TusharSharmaIN/skydrift-app" rel="noopener noreferrer"&gt;github.com/TusharSharmaIN/skydrift-app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Backend Repository:&lt;/strong&gt; &lt;a href="https://github.com/TusharSharmaIN/skydrift-backend" rel="noopener noreferrer"&gt;github.com/TusharSharmaIN/skydrift-backend&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📥 &lt;strong&gt;Android APK:&lt;/strong&gt; &lt;a href="https://github.com/TusharSharmaIN/skydrift-app/releases" rel="noopener noreferrer"&gt;Download Latest Release&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Take 5 minutes today. Step away from your terminal, head outside, and watch the clouds drift.&lt;/em&gt; ☁️🌱&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>flutter</category>
      <category>nestjs</category>
    </item>
    <item>
      <title>There is no better way.</title>
      <dc:creator>Tushar Sharma</dc:creator>
      <pubDate>Mon, 02 Nov 2020 17:51:11 +0000</pubDate>
      <link>https://dev.to/tusharsharmain/there-is-no-better-way-1n85</link>
      <guid>https://dev.to/tusharsharmain/there-is-no-better-way-1n85</guid>
      <description>&lt;p&gt;Hey there.&lt;br&gt;
(This is my first blog and I am very anxious 😐 but exuberant 🤩)&lt;/p&gt;

&lt;p&gt;This year, while staying healthy and inside, I have managed to complete this year's &lt;a href="https://hacktoberfest.digitalocean.com/"&gt;Hactoberfest&lt;/a&gt; challenged. The complete experience was fascinating and now I am much more excited to involve in such activities 😁 and then to write about them ✏.&lt;/p&gt;

&lt;h4&gt;
  
  
  My Contributions
&lt;/h4&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1. Create the main menu for a console application in &lt;a href=""&gt;Java&lt;/a&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="https://github.com/CycloneDevID/SimpleDrinksSalesProgram/pull/4"&gt;https://github.com/CycloneDevID/SimpleDrinksSalesProgram/pull/4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2. Longest Increasing Subsequence in &lt;a href=""&gt;Java&lt;/a&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="https://github.com/Aniket762/Project-alpha/pull/136"&gt;https://github.com/Aniket762/Project-alpha/pull/136&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3. Arithmetic Calculator in &lt;a href=""&gt;Python&lt;/a&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="https://github.com/ary1733/Hacktober2020/pull/43"&gt;https://github.com/ary1733/Hacktober2020/pull/43&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a&gt;&lt;/a&gt;4. Programming books classification and suggestion 🤔&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="https://github.com/ab-anand/programming-books/pull/20"&gt;https://github.com/ab-anand/programming-books/pull/20&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What I've learnt?
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Always go through the labels at issues&lt;/strong&gt; - If you are a beginner like me and you want to pick easy ones, you can search 🔍 for the label marked for beginners like - &lt;code&gt;good first issue&lt;/code&gt;, &lt;code&gt;beginners only&lt;/code&gt;, &lt;code&gt;first-timers-only&lt;/code&gt; or similar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try to get assigned first&lt;/strong&gt; - If you found yourself that you can patch an issue, then let the moderator know that you are willing to work on that issue, once you will get assigned, then you can start working. This will help others to not pick the same issue and your &lt;code&gt;PRs&lt;/code&gt; will get easily merged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are welcome if you are not much technical&lt;/strong&gt; - There are plenty of issues that do not involve any coding related knowledge, as my last PR, it requires only to categorize the books according to the domain. It's easy for those who are a beginner at coding.&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Point
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Get to know about &lt;a href="https://git-scm.com/"&gt;Git&lt;/a&gt; and &lt;a href="https://github.com/"&gt;Github&lt;/a&gt;&lt;/strong&gt; - Git and Github have been quite handy, in the journey of the open-source contribution of mine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Early&lt;/strong&gt; - A merged &lt;code&gt;PR&lt;/code&gt; gets a 14 day review period to get accepted. So, be an early bird 🐓, as you will have chances to submit more &lt;code&gt;PRs&lt;/code&gt; if any of them did not get accepted.&lt;/p&gt;

&lt;p&gt;This year's challenge is successfully ended, for those who have participated, Congrats 🥳, you have learnt something new. For those who missed, they can still practice 🎯 by picking easy issues for next year's challenge &lt;code&gt;#hactoberfest2021&lt;/code&gt;.&lt;/p&gt;

&lt;h5&gt;
  
  
  "There's no better way to learn than by doing."
&lt;/h5&gt;

&lt;p&gt;😃&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>github</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
