<?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: Yashvant Singh</title>
    <description>The latest articles on DEV Community by Yashvant Singh (@jatsuakayashvant).</description>
    <link>https://dev.to/jatsuakayashvant</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3199605%2F0699b6ff-445d-4a02-96ea-c4fdd9c0c569.jpeg</url>
      <title>DEV Community: Yashvant Singh</title>
      <link>https://dev.to/jatsuakayashvant</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jatsuakayashvant"/>
    <language>en</language>
    <item>
      <title>GSoC Week 12: Fading Transitions, Broken Builds &amp; NASA Phones</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sun, 24 Aug 2025 12:29:14 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-12-fading-transitions-broken-builds-nasa-phones-35eo</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-12-fading-transitions-broken-builds-nasa-phones-35eo</guid>
      <description>&lt;p&gt;So here we are, the &lt;strong&gt;final week&lt;/strong&gt; of my coding period in Google Summer of Code.  &lt;/p&gt;

&lt;p&gt;This week has been a rollercoaster — from upgrading Gradle and AGP, fixing compatibility conflicts, to making the app feel more alive with microinteractions and transitions. And yes, testing on my “NASA-powered” phone that just couldn’t keep up 😅.&lt;/p&gt;




&lt;h2&gt;
  
  
  Starting the Week with a Big Upgrade
&lt;/h2&gt;

&lt;p&gt;The week started with my PR: &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/425" rel="noopener noreferrer"&gt;Upgrade AGP to 8.5.0 and Gradle to 8.7 for Kotlin 2.1.10 compatibility #425&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I put in the work to address all of &lt;strong&gt;Coderabbit’s suggestions&lt;/strong&gt; (so much so that I’ve started seeing Coderabbit’s reels on my Instagram feed now 🐇📱).  &lt;/p&gt;

&lt;p&gt;But when &lt;strong&gt;Hardik&lt;/strong&gt; reviewed the PR, we hit some bumps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upgrading Flutter to the latest stable caused conflicts between &lt;code&gt;hive_generator&lt;/code&gt; and &lt;code&gt;build_runner&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Even though I pinned them to compatible versions, the build still failed.&lt;/li&gt;
&lt;li&gt;And most importantly — I had upgraded the &lt;strong&gt;Java version&lt;/strong&gt;. Hardik pointed out that this wasn’t viable within the current timeline since all contributors would also have to upgrade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So yeah… the PR couldn’t be merged, and I had to eventually revert the changes.  &lt;/p&gt;

&lt;p&gt;I did test the &lt;strong&gt;auth flow&lt;/strong&gt; by generating my own client ID and secret. It worked perfectly fine — so when Aboo generates the final keys, it should be ready to roll.&lt;/p&gt;




&lt;h2&gt;
  
  
  Animations vs Microinteractions
&lt;/h2&gt;

&lt;p&gt;I thought the gradle upgrade PR will merge, I switched to UX improvements.&lt;/p&gt;

&lt;p&gt;I studied the difference between &lt;strong&gt;animations and microinteractions&lt;/strong&gt; in layman’s language:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Animations&lt;/strong&gt;: Big, visible motions that catch attention (like screen transitions, loaders, or onboarding visuals).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microinteractions&lt;/strong&gt;: Subtle feedback elements that make the app feel “alive” (like a button bounce when clicked, a smooth fade when a form is submitted, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I added microinteractions to our button components. Then I tackled &lt;strong&gt;page transitions&lt;/strong&gt;. Luckily, the project has a centralized &lt;code&gt;router.dart&lt;/code&gt;, so I slipped in a &lt;strong&gt;sleek fade transition&lt;/strong&gt; across pages.&lt;/p&gt;

&lt;p&gt;When I tested on my phone, nothing showed up (thanks to my laggy, NASA-powered device 🚀📱).&lt;br&gt;&lt;br&gt;
But testing on my friend’s phone confirmed it — the app felt way more alive!&lt;/p&gt;




&lt;h2&gt;
  
  
  Weekly Meet with the Mentors
&lt;/h2&gt;

&lt;p&gt;Yesterday, we (me, Hardik, Aboo) had a project meet. Since this was the &lt;strong&gt;final submission week&lt;/strong&gt;, we discussed the remaining tasks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I explained the &lt;strong&gt;auth flow&lt;/strong&gt; progress.&lt;/li&gt;
&lt;li&gt;We talked about the &lt;strong&gt;interactive book&lt;/strong&gt; feature. Hardik clarified that it won’t be possible during GSoC due to time constraints, but we can revisit it post-GSoC. Until then, I’ll keep exploring possible solutions.&lt;/li&gt;
&lt;li&gt;I also reviewed the open PRs (mostly from dependabot), marked which can be merged directly, and made required changes. But with the Gradle PR dropped, I had to &lt;strong&gt;revert a bunch of things&lt;/strong&gt;.
(Thankfully, I saved my code, so it’s just copy-paste-push when the time comes ✨).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then came the big question — &lt;strong&gt;Do I want to join the core team?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Honestly, that’s a huge question. We were joking around, but Hardik did mention they love reading my blogs — for the innocence and realism they hold. That meant a lot. ❤️&lt;/p&gt;




&lt;h2&gt;
  
  
  Back to Auth, Deployment &amp;amp; Stores
&lt;/h2&gt;

&lt;p&gt;Today, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reverted everything back to the earlier version (with the correct settings and versioning).&lt;/li&gt;
&lt;li&gt;Worked again on the &lt;strong&gt;auth&lt;/strong&gt; flow.&lt;/li&gt;
&lt;li&gt;Studied deployment on the &lt;strong&gt;Huawei AppGallery&lt;/strong&gt; (to target the Chinese audience).
Key takeaways:

&lt;ul&gt;
&lt;li&gt;We can add our &lt;strong&gt;APK for review&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;No need to pay anything.
&lt;/li&gt;
&lt;li&gt;The only constraint: we must not depend on Google services. Currently, only &lt;code&gt;google_sign_in&lt;/code&gt; is an issue, everything else is fine.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Next up: I’ll also increase my pace for the deployment on &lt;strong&gt;F-Droid Store&lt;/strong&gt;.&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Blog &amp;amp; Wrap Up
&lt;/h2&gt;

&lt;p&gt;I’ve also started working on my &lt;strong&gt;final blog report&lt;/strong&gt;. Not gonna lie, I spent &lt;strong&gt;2 hours just making the cover&lt;/strong&gt; — but it looks good (I think 🤞).  &lt;/p&gt;

&lt;p&gt;This week has been about &lt;strong&gt;trying, failing, learning, and then finding another way&lt;/strong&gt;. The build may have failed, but the app is alive and kicking with better UX. And honestly, I couldn’t ask for a better ending to my GSoC journey. 💙&lt;/p&gt;




&lt;p&gt;✨ Thanks to everyone — Hardik, Aboo, and the CircuitVerse team — for all the guidance, laughs, and late-night debugging sessions.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Until the final report....&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>opensource</category>
      <category>gsoc</category>
      <category>appdev</category>
    </item>
    <item>
      <title>GSoC Week 11: Nearing the Finish Line with CircuitVerse</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Mon, 18 Aug 2025 14:29:38 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-11-nearing-the-finish-line-with-circuitverse-kgb</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-11-nearing-the-finish-line-with-circuitverse-kgb</guid>
      <description>&lt;h1&gt;
  
  
  Week 11 of GSoC
&lt;/h1&gt;

&lt;p&gt;Writing &lt;strong&gt;Week 11&lt;/strong&gt; of my GSoC blog feels very different. We are so close to the end, and honestly, it’s a mix of emotions. What started with a lot of uncertainty and fear — &lt;em&gt;“Am I even good enough to do this? Will I be able to pull it off?”&lt;/em&gt; — now feels like a journey I’ll always cherish.&lt;/p&gt;

&lt;p&gt;The constant support from the CircuitVerse community made this possible, especially &lt;strong&gt;Hardik&lt;/strong&gt; and &lt;strong&gt;Aman&lt;/strong&gt; (who are also my college seniors, though we didn’t talk much back then). Their guidance has been invaluable.&lt;/p&gt;

&lt;p&gt;A heartfelt farewell to &lt;strong&gt;Nihal&lt;/strong&gt;. He helped me with so many things — always humble, always polite, and always replying almost immediately, putting in the effort to get things done. And bro, the last demo you gave was a &lt;em&gt;killer&lt;/em&gt;. Also, congratulations to Nihal for being felicitated as the &lt;strong&gt;4th Year Computer Engineering Topper&lt;/strong&gt; during the &lt;em&gt;Dewang Mehta Memorial Lecture &amp;amp; IT Awards 2025&lt;/em&gt; in Ahmedabad. Proud moment! &lt;/p&gt;




&lt;h2&gt;
  
  
  The Last Meet Vibes
&lt;/h2&gt;

&lt;p&gt;Our last contributor meet was on &lt;strong&gt;10th August&lt;/strong&gt;, and I decided to go first with my updates. Surprisingly, no mentor or admin joined that day — it was just us contributors. But man, the talk we had was amazing.&lt;/p&gt;

&lt;p&gt;We discussed our project updates, helped each other with doubts, and then shifted to life beyond GSoC — college life, attendance, ladies (👀), and more. It was pure fun.&lt;/p&gt;

&lt;p&gt;The best part came later when it was just me, &lt;strong&gt;Vivek&lt;/strong&gt;, and &lt;strong&gt;Nihal&lt;/strong&gt;. We started discussing our projects, and then Vivek asked me about my startups. Bruh, I went on for like &lt;strong&gt;40–45 minutes straight&lt;/strong&gt; . It turned into one of the greatest discussions ever.&lt;/p&gt;

&lt;p&gt;Vivek also shared about his current venture and how they’re pulling it off. Super insightful and motivating. Wishing more success to my broski.&lt;/p&gt;

&lt;p&gt;This reminded me once again: &lt;strong&gt;Open source is about community and people&lt;/strong&gt;. What you learn from others, how you grow together, and the bonds you form — that’s what makes the process fun and fast. CircuitVerse fosters this culture so well, and I’m proud to be part of it. ❤️&lt;/p&gt;




&lt;h2&gt;
  
  
  Work Updates
&lt;/h2&gt;

&lt;p&gt;As mentioned in last week’s blog, I raised the PR for the simulator, but it had some flaws in how we were storing things and their compliance with the Play Store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simulator PR&lt;/strong&gt; → &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/421" rel="noopener noreferrer"&gt;#421&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then we started working on upgrading the Android Gradle Plugin and Gradle for Kotlin 2.1.10 compatibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade AGP to 8.5.0 &amp;amp; Gradle to 8.7&lt;/strong&gt; → &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/425" rel="noopener noreferrer"&gt;#425&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was supposed to be a small PR, but it turned out bigger than expected. In the process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I upgraded Flutter to &lt;strong&gt;3.35.1&lt;/strong&gt; (new stable release).&lt;/li&gt;
&lt;li&gt;Fixed CI test failures caused by GitHub changing macOS runners.&lt;/li&gt;
&lt;li&gt;Resolved incompatibility between &lt;code&gt;hive_generator&lt;/code&gt; and &lt;code&gt;build_runner&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also worked on removing &lt;code&gt;flutter_facebook_auth&lt;/code&gt; as planned earlier. I included that commit in the AGP PR itself.&lt;/p&gt;

&lt;p&gt;Finally, I tested the &lt;strong&gt;auth flow&lt;/strong&gt; by regenerating new keys. It works fine, though it still needs thorough testing to ensure smooth user experience without any breakage.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Fun Incident
&lt;/h2&gt;

&lt;p&gt;During the last meet, after I gave my updates, Vedant mentioned that &lt;strong&gt;Satvik&lt;/strong&gt; is also working on the deployment part. I was like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Uh, pardon, Vedant… who is Satvik? Can you give me context?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vedant: &lt;em&gt;“Oh, you don’t know Satvik? He is one of the co-founders of CircuitVerse.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And I was like: &lt;em&gt;“F&lt;/em&gt;** ”*&lt;/p&gt;

&lt;p&gt;So yeah, wish me luck with the deployment. Pray I don’t mess it up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;This week has been special — not just in terms of work but also the &lt;strong&gt;people, conversations, and connections&lt;/strong&gt;. With only a week left in GSoC, I can proudly say that beyond code, I’ve gained mentors, friends, and experiences that will stay with me forever.&lt;/p&gt;

&lt;p&gt;Till next week.&lt;/p&gt;

</description>
      <category>gsoc</category>
      <category>opensource</category>
      <category>flutter</category>
      <category>android</category>
    </item>
    <item>
      <title>GSoC Week 10 – The Week of… Well, Distractions</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sun, 10 Aug 2025 11:03:42 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-10-the-week-of-well-distractions-1pg7</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-10-the-week-of-well-distractions-1pg7</guid>
      <description>&lt;h2&gt;
  
  
  Week 10 started with a very clear plan.
&lt;/h2&gt;

&lt;p&gt;Me and Hardik had a meet to decide what to do for the simulator issues and in which order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Download Image&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Manual&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discussion Forum&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Themes&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Simple. Clear. Easy.&lt;br&gt;&lt;br&gt;
But then… me being me… I saw another bug and just couldn’t resist. Sorry, Hardik. &lt;/p&gt;




&lt;h2&gt;
  
  
  The Detour #1 – Project Description Editing Mess
&lt;/h2&gt;

&lt;p&gt;While working on the simulator, I stumbled upon something that kept bugging me.&lt;/p&gt;

&lt;p&gt;When you try to edit a project you created:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;UI wasn’t uniform&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;tag input field&lt;/strong&gt; had no instructions on how to add multiple tags.&lt;/li&gt;
&lt;li&gt;Even worse — you update the project, then try to re-edit it… and all your &lt;strong&gt;previous details are gone&lt;/strong&gt;. You’d have to write from scratch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I fixed the persistence issue first — now, when you re-edit a project, your details are still there.&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%2Febrr07so6tcj70le7tv4.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%2Febrr07so6tcj70le7tv4.jpg" alt=" " width="717" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But then I saw another thing: &lt;strong&gt;tags weren’t even showing up&lt;/strong&gt; on the project description page after saving.&lt;/p&gt;

&lt;p&gt;I checked the CircuitVerse website and saw how they have nice &lt;strong&gt;colored chips&lt;/strong&gt; matching the theme.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Tags on website
&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%2F4f7pmsyb6wq539f8pngw.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%2F4f7pmsyb6wq539f8pngw.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tags implementation in App
&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%2Fl2yv3qb4hzyyrspvwi1s.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%2Fl2yv3qb4hzyyrspvwi1s.jpg" alt=" " width="717" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So… yeah… I implemented that too. This “small” side quest stretched way longer than planned. I am again very sorry, Hardik.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/415" rel="noopener noreferrer"&gt;Project details pre-fills saved data and added tags&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Detour #2 – Share Button on Project Card
&lt;/h2&gt;

&lt;p&gt;And then, while going through the project cards, I had another thought:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"Wouldn’t it be cool if people could just share a project directly from here?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Right now, if someone liked a project, they had to open it, copy the link, and then paste it somewhere.&lt;br&gt;&lt;br&gt;
That’s too many steps — especially for people who just want to quickly share a project with friends, classmates, or in the community.&lt;/p&gt;

&lt;p&gt;So… I added a &lt;strong&gt;share button&lt;/strong&gt; right on the card.&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%2F2qzmk7gzlcqgpx3kci60.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%2F2qzmk7gzlcqgpx3kci60.jpg" alt=" " width="800" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tap once → share instantly&lt;/strong&gt; via your device’s share sheet.
&lt;/li&gt;
&lt;li&gt;No extra navigation needed.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This wasn’t in our priority list (again, sorry Hardik 😅) but I feel like it improves the overall UX a lot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/417" rel="noopener noreferrer"&gt;Share button in the Featured Circuit Card&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Detour #3 – Shrinking the App Size
&lt;/h2&gt;

&lt;p&gt;While doing all this, another thought hit me:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"Hmm… why not reduce the app size too?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I went ahead with &lt;strong&gt;R8 optimization&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%2Fgoewjs1c8wflrfiqm03w.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%2Fgoewjs1c8wflrfiqm03w.png" alt=" " width="729" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Turns out R8 was technically already implemented, but some key configurations were missing.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;I will discuss this with Hardik and then I will make the PR.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  I added:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What these do:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;minifyEnabled true&lt;/code&gt; → Removes unused code for smaller APKs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;shrinkResources true&lt;/code&gt; → Removes unused resources like images/XML.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;proguardFiles&lt;/code&gt; → Ensures critical code isn’t stripped accidentally.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, removing my changes gave the same APK size,&lt;br&gt;
but after reading more, I realized my config gives better control over R8 in the long run.&lt;/p&gt;

&lt;p&gt;Told Hardik, he was happy… but also reminded me (again) to stick to the plan. 😅&lt;/p&gt;




&lt;h1&gt;
  
  
  Back to the Actual Simulator Issues
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Download Image
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The “Download Image” button in the simulator (running in a Flutter InAppWebView) technically worked, but the file:&lt;/p&gt;

&lt;p&gt;Wasn’t saved in a public, user-accessible location.&lt;/p&gt;

&lt;p&gt;Didn’t appear in the Gallery or Downloads folder until a device rescan/restart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this happens:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Android needs a media scan after saving a new file, otherwise the system doesn’t “know” it exists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&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%2Fzp6bhvlynhgaq1xacuov.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%2Fzp6bhvlynhgaq1xacuov.jpg" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Saved files to &lt;code&gt;/storage/emulated/0/Download&lt;/code&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added runtime permission checks for older Android versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created a &lt;code&gt;MethodChannel&lt;/code&gt; in &lt;code&gt;MainActivity.kt&lt;/code&gt; to call &lt;code&gt;MediaScannerConnection.scanFile&lt;/code&gt; from Dart — instantly updates the &lt;code&gt;gallery/download&lt;/code&gt; list.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. User Manual &amp;amp; Discussion Forum
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Issue:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both buttons (inside the simulator WebView) were doing nothing. No crash, no error — just silence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;flutter_inappwebview&lt;/code&gt; was intercepting the external links and not letting them open in the system browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fix:&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%2F87mdzeesh7k6w7coynqy.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%2F87mdzeesh7k6w7coynqy.jpg" alt=" " width="800" height="358"&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%2Ffff4ryd1dh7okz14zd7x.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%2Ffff4ryd1dh7okz14zd7x.jpg" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Update navigation handling logic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detect external URLs and open them using &lt;code&gt;url_launcher&lt;/code&gt; instead of keeping them inside WebView.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Themes
&lt;/h2&gt;

&lt;p&gt;This one… just started working on its own.&lt;br&gt;
I’m not touching it. If it works, it works. &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%2Fdpnu6qgzonikbva8nktc.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%2Fdpnu6qgzonikbva8nktc.jpg" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/421" rel="noopener noreferrer"&gt;Enhance Simulator Download &amp;amp; External Link Handling with Android 13+ Media Support&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Next Up
&lt;/h1&gt;

&lt;p&gt;We’ll now focus on the authentication issue.&lt;br&gt;
And yes, Hardik, I promise I’ll try not to get distracted… try.&lt;/p&gt;




&lt;h1&gt;
  
  
  This Week’s Lessons
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Bugs are like side quests — you can’t just ignore them when they’re staring at you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flutter WebView + external links = tricky business.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;R8 optimization isn’t just about enabling it — proper configuration gives more control.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sometimes, the universe fixes bugs for you… don’t ask why.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>GSoC Week 9: Bugs, Collaboration &amp; a Few Funny Glitches</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sat, 09 Aug 2025 15:19:19 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-9-bugs-collaboration-a-few-funny-glitches-4jlc</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-9-bugs-collaboration-a-few-funny-glitches-4jlc</guid>
      <description>&lt;p&gt;We kicked off Week 9 by discussing what needed to be done in the &lt;strong&gt;CircuitVerse mobile app simulator&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;For those who don’t know, the &lt;strong&gt;CircuitVerse Mobile App&lt;/strong&gt; lets you dive into the world of logic circuits for free! From simple gates to complex sequential circuits, plotting timing diagrams, automatic circuit generation, exploring standard ICs, and more, it’s your &lt;strong&gt;personal electronics lab in your hands&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%2Fjaxb493r8mxf4oqmm1o8.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%2Fjaxb493r8mxf4oqmm1o8.jpg" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The heart of the app is the &lt;strong&gt;simulator&lt;/strong&gt;, where you can build, test, and learn about circuits. It’s the mirror of CircuitVerse’s web simulator, integrated into our Flutter app using &lt;strong&gt;&lt;a href="https://pub.dev/packages/flutter_inappwebview" rel="noopener noreferrer"&gt;flutter_inappwebview&lt;/a&gt;&lt;/strong&gt; — a powerful package that allows you to embed and control web content inside Flutter apps.  &lt;/p&gt;

&lt;p&gt;While the simulator works well overall, some bugs had been bothering us:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Download Image&lt;/strong&gt; feature not working
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Manual&lt;/strong&gt; link not opening
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apply Themes&lt;/strong&gt; not applying correctly
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discussion Forum&lt;/strong&gt; link broken
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;First Round of Debugging&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I started the week tackling these issues. To get more clarity, I discussed them with my mentor &lt;strong&gt;Hardik&lt;/strong&gt;, who suggested I connect with (&lt;a href="https://github.com/ThatDeparted2061?tab=overview&amp;amp;from=2025-08-01&amp;amp;to=2025-08-09" rel="noopener noreferrer"&gt;Harsh Rao&lt;/a&gt;) — another contributor working on &lt;strong&gt;Project 2: Desktop Application and CV-frontend-Vue&lt;/strong&gt; (&lt;a href="https://github.com/orgs/CircuitVerse/projects/43/views/1" rel="noopener noreferrer"&gt;Project Board here&lt;/a&gt;).  &lt;/p&gt;

&lt;p&gt;Our discussion was super productive:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Themes Issue:&lt;/strong&gt; Harsh tested it on his iPhone it worked fine. I tried it on a friend’s phone also fine. Turns out, it was just my phone acting up.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Manual:&lt;/strong&gt; Harsh gave me a perspective I had overlooked. When I followed that direction, it worked.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discussion Forum:&lt;/strong&gt; On the web, selecting the same option led to a non-existent page. We decided the simplest fix was to remove it entirely from the web, which would automatically reflect in the app. Harsh said he’d discuss this with his mentor.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Balancing GSoC with Other Things&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In between debugging, I was also:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filling out the &lt;strong&gt;Y Combinator&lt;/strong&gt; application
&lt;/li&gt;
&lt;li&gt;Attending an &lt;strong&gt;interview for startup fund allocation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I communicated this to Hardik — and he, being incredibly supportive, gave me the space to focus on those while helping me plan the next week so we can wrap up GSoC with a &lt;strong&gt;100% complete project&lt;/strong&gt;.  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Best Part of the Week&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The highlight? &lt;strong&gt;Collaborating with Harsh Rao.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Not only did I get clarity on the issues, but we also discovered we were facing some of the same challenges, funnily enough, even with tasks we had originally written in our proposals.  &lt;/p&gt;

&lt;p&gt;We ended up talking about life, college, plans… and then came the topic of &lt;strong&gt;Aboo&lt;/strong&gt; (our org admin).  &lt;/p&gt;

&lt;p&gt;We both agreed he’s an amazing person, full of knowledge, and deeply supportive. But yes… we’re both a &lt;em&gt;bit scared&lt;/em&gt; of him! Not in a bad way — more like the “I don’t want to let this person down” kind of way.  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;My Funniest (and Most Embarrassing) Moment&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Last time I had a meeting with Aboo and Hardik, I was working on the simulator with &lt;strong&gt;three desktop workspaces full of apps and browser tabs&lt;/strong&gt; open. Naturally, my laptop had a meltdown &lt;em&gt;right&lt;/em&gt; before the call.  &lt;/p&gt;

&lt;p&gt;“No problem,” I thought, I’ll just join via phone. As I just want to present the simulator and that can be done via phone too. Except… when I went to present the app, it was not there in the phone (which I had built barely 10 minutes earlier).  &lt;/p&gt;

&lt;p&gt;Yes, I was just staring at an empty screen in front of Aboo and Hardik.&lt;br&gt;&lt;br&gt;
Embarrassing? Absolutely.&lt;br&gt;&lt;br&gt;
Supportive? They both were.  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Closing Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This week was a mix of &lt;strong&gt;planning, mistakes, and fixes&lt;/strong&gt; — but also great conversations and teamwork.  &lt;/p&gt;

&lt;p&gt;We’re getting closer to the finish line, and soon you’ll see the &lt;strong&gt;CircuitVerse Mobile App live on the Play Store&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Week 9 was proof that Google Summer of Code isn’t just about code, it’s about collaboration, learning, and the occasional laugh over tech glitches.  &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>flutter</category>
      <category>gsoc</category>
      <category>programming</category>
    </item>
    <item>
      <title>GSoC Week 8: Linting Upgrades, UI Redesigns &amp; Simulator</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Tue, 29 Jul 2025 14:35:52 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-8-linting-upgrades-ui-redesigns-simulator-36hm</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-8-linting-upgrades-ui-redesigns-simulator-36hm</guid>
      <description>&lt;p&gt;Week 8 of GSoC has been all about refining and polishing—from updating development standards to enhancing user experience and improving project editing workflows. Let's dive into the highlights!&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrading Linting: Flutter Lints 6.0.0
&lt;/h2&gt;

&lt;p&gt;I kicked off the week by cleaning up the codebase and aligning it with the latest best practices by upgrading &lt;code&gt;flutter_lints&lt;/code&gt; from &lt;strong&gt;5.0.0 to 6.0.0&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pull Request&lt;/strong&gt;: &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/405" rel="noopener noreferrer"&gt;chore: upgrade flutter_lints from 5.0.0 to 6.0.0 #405&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Flutter Lints 6.0.0?
&lt;/h3&gt;

&lt;p&gt;The new version introduces stricter type safety and code readability rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;strict_top_level_inference&lt;/code&gt;&lt;/strong&gt;: Forces explicit type annotations, improving clarity and catching errors early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;unnecessary_underscores&lt;/code&gt;&lt;/strong&gt;: Promotes cleaner naming conventions by flagging redundant underscores in unused parameters.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Changes Made:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bumped &lt;code&gt;flutter_lints&lt;/code&gt; in &lt;code&gt;pubspec.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Added explicit type annotations to constructors and method parameters&lt;/li&gt;
&lt;li&gt;Cleaned up unused parameter names to follow the new underscore rule&lt;/li&gt;
&lt;li&gt;Ensured zero violations with &lt;code&gt;dart analyze&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Summary:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type safety&lt;/strong&gt; → Improved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readability&lt;/strong&gt; → Sharpened&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functional changes&lt;/strong&gt; → None, but the code is now cleaner and future-proof&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Featured Project Card Redesign
&lt;/h2&gt;

&lt;p&gt;Next, we shifted gears to user-facing components. The &lt;code&gt;FeaturedProjectCard&lt;/code&gt; got a complete makeover to enhance both functionality and aesthetics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Major Improvements:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;New layout with better visual hierarchy&lt;/li&gt;
&lt;li&gt;Display of project statistics: &lt;strong&gt;Stars ⭐&lt;/strong&gt; and &lt;strong&gt;Views 👀&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Better responsive design with thoughtful spacing&lt;/li&gt;
&lt;li&gt;Added a fallback image (&lt;code&gt;default_project_image.png&lt;/code&gt;) for projects without custom images&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Widget Test Updates:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tests updated to reflect the new &lt;code&gt;TextButton&lt;/code&gt; (replacing &lt;code&gt;CVPrimaryButton&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Coverage improved for all new logic and edge cases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Extras:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HTML tags stripped from project descriptions&lt;/li&gt;
&lt;li&gt;Enhanced dark mode support for consistent UX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pull Request&lt;/strong&gt;: &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/406" rel="noopener noreferrer"&gt;Featured circuit card #406&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A quick note on the PR journey:&lt;/strong&gt;&lt;br&gt;
Last week, I didn't submit the PR as the UI changes were pending review from Nitin. This week, I finally opened it, and &lt;strong&gt;Aboo himself reviewed it&lt;/strong&gt;! There were a few corrections to make, but after addressing them, the PR was merged successfully.&lt;/p&gt;

&lt;p&gt;This revamp significantly improves how projects are showcased—making the browsing experience visually appealing and informative.&lt;/p&gt;




&lt;h2&gt;
  
  
  imgBot PR Fixes: Lighter Assets, Faster Loads
&lt;/h2&gt;

&lt;p&gt;We also worked on resolving the &lt;strong&gt;imgBot PR&lt;/strong&gt;, which optimized asset file sizes across the repo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of Image Optimization:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reduced initial load time &lt;/li&gt;
&lt;li&gt;Lower data consumption for users &lt;/li&gt;
&lt;li&gt;Better performance on low-bandwidth networks&lt;/li&gt;
&lt;li&gt;Smaller bundle sizes for improved deployment efficiency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pull Request&lt;/strong&gt;: &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/407" rel="noopener noreferrer"&gt;chore(images): optimize assets with Imgbot #407&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every kilobyte counts, and this cleanup brings long-term benefits to app performance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project re-editing
&lt;/h2&gt;

&lt;p&gt;The most impactful feature of the week was integrating &lt;strong&gt;project re-editing&lt;/strong&gt;, along with several UX improvements in the editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simulator Editing Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Passed &lt;code&gt;Project&lt;/code&gt; object to &lt;code&gt;SimulatorView&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Dynamically generated simulator URL based on the editing context
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;Project&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Get&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;arguments&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;Project&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_projectToEdit&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;${EnvironmentConfig.CV_BASE_URL}&lt;/span&gt;&lt;span class="s"&gt;/simulator/edit/&lt;/span&gt;&lt;span class="si"&gt;${_projectToEdit!.id}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;${EnvironmentConfig.CV_BASE_URL}&lt;/span&gt;&lt;span class="s"&gt;/simulator'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rich Text Editor Enhancements:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added 16px padding for cleaner UI&lt;/li&gt;
&lt;li&gt;Maintained full toolbar functionality&lt;/li&gt;
&lt;li&gt;Improved readability and layout&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Router Enhancements:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Modified routes to accept project arguments&lt;/li&gt;
&lt;li&gt;Improved type safety and argument passing throughout&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;Open in Simulator&lt;/code&gt; Button:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added a direct entry point to the simulator from the project edit view&lt;/li&gt;
&lt;li&gt;Seamless flow between project editing and simulation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pull Request&lt;/strong&gt;: &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/409" rel="noopener noreferrer"&gt;Project re-editing feature #409&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Video of working
&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%2Feasqe8aj1xjuhlbuhr8g.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%2Feasqe8aj1xjuhlbuhr8g.png" alt=" " width="368" height="697"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Collaboration Update:
&lt;/h3&gt;

&lt;p&gt;This feature was a team effort! Aboo, Hardik, and I had a meeting to discuss the implementation, ensuring everything aligned with the project's vision.&lt;/p&gt;

&lt;p&gt;This improves both the developer experience and the usability for users working with projects interactively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond GSoC: Life Updates
&lt;/h2&gt;

&lt;p&gt;While GSoC has kept me busy with coding, other areas of life have been equally active:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Academic Commitments&lt;/strong&gt;: College has resumed with full schedules, creating an interesting challenge balancing coursework with GSoC responsibilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Career Development&lt;/strong&gt;: I have an upcoming external panel interview for a grant opportunity - your encouragement is appreciated!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Entrepreneurial Pursuits&lt;/strong&gt;: I'm currently in the process of applying to Y Combinator, a long-term goal I'm excited to be pursuing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Business Ventures&lt;/strong&gt;: Alongside technical work, I'm gaining valuable experience co-running a digital marketing agency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Technical Growth&lt;/strong&gt;: I've been expanding my systems programming knowledge through learning ownership concepts in Rust.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Upcoming Focus Areas
&lt;/h2&gt;

&lt;p&gt;Looking ahead to the next few weeks, my priorities will be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Strategy&lt;/strong&gt;: Finalizing plans for both Play Store and F-Droid distribution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Refinement&lt;/strong&gt;: Identifying and resolving any remaining interface issues&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interaction Design&lt;/strong&gt;: Planning micro-interactions and animations to enhance usability and also getting it reviewed, so that we can raise a PR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language Support&lt;/strong&gt;: Discussion for adding more languages or say to choose which language to add next&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Week 8 represented significant progress in elevating our standards - from code quality improvements through linting upgrades to user experience enhancements in both the UI and simulator integration. Each of these refinements contributes to building a more robust and polished application.&lt;/p&gt;

&lt;p&gt;I'm looking forward to sharing more updates as development continues!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>opensource</category>
      <category>dart</category>
      <category>rust</category>
    </item>
    <item>
      <title>GSoC Week 6: Deep Diving into the Interactive Book Issue</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sun, 13 Jul 2025 16:42:49 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-6-deep-diving-into-the-interactive-book-issue-4n3p</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-6-deep-diving-into-the-interactive-book-issue-4n3p</guid>
      <description>&lt;p&gt;As I mentioned in my &lt;a href="https://dev.to/jatsuakayashvant/gsoc-week-5-markdown-broke-cicd-woke-59kf"&gt;GSoC Week 5: Markdown broke, CI/CD woke&lt;/a&gt;, after completing the release pipeline of the app, I jumped back into the &lt;strong&gt;Interactive Book&lt;/strong&gt; issue.&lt;/p&gt;

&lt;p&gt;Since it hadn’t been resolved the previous week, I decided to approach it with a fresh mind—and honestly, a whole new debugging strategy. I started from scratch and quickly discovered that the three custom builders—&lt;code&gt;IbEmbedSyntax&lt;/code&gt;, &lt;code&gt;IbMdTagSyntax&lt;/code&gt;, and &lt;code&gt;IbLiquidSyntax&lt;/code&gt;were the main culprits.&lt;/p&gt;

&lt;p&gt;These builders are responsible for parsing custom markup, but they weren’t doing a great job. I attempted to make them more robust by tweaking their RegExp &lt;code&gt;getPattern&lt;/code&gt; methods to improve parsing. There was some progress, but unfortunately, it still wasn’t functioning properly and lost core functionality toward the end.&lt;/p&gt;

&lt;p&gt;At this point, I had a realization, I've &lt;em&gt;never&lt;/em&gt; actually seen the fully functional version of the Interactive Book in action 😶. I didn’t even have a proper reference for the content it used to display. So, I shifted focus.&lt;/p&gt;

&lt;p&gt;I dug into the markdown content (which looked okay to me) and attempted to set up the project locally just to confirm whether all the content was loading or not. Although I ran into some hiccups setting up Ruby, I managed to at least check the markdown rendering. And yes, the content was there but still no breakthrough.&lt;/p&gt;

&lt;p&gt;After trying a few more iterations with no results, I took a step back and decided to &lt;strong&gt;understand the entire history&lt;/strong&gt; of the Interactive Book—its origin, its evolution, and all the previous attempts to fix it.&lt;/p&gt;

&lt;p&gt;I went through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Issues: &lt;a href="https://github.com/CircuitVerse/mobile-app/issues/25" rel="noopener noreferrer"&gt;Idea: Integrate Interactive Book in Mobile App for easy learning.&lt;/a&gt;, &lt;a href="https://github.com/CircuitVerse/mobile-app/issues/216" rel="noopener noreferrer"&gt;Interactive book throwing error&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PRs: &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/44" rel="noopener noreferrer"&gt;POC: Interactive Book Page Parser&lt;/a&gt;, &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/110" rel="noopener noreferrer"&gt;Interactive Book Integration Phase 1 | GSoC 2021&lt;/a&gt;, &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/111" rel="noopener noreferrer"&gt;Revert "Interactive Book Integration Phase 1 | GSoC 2021"&lt;/a&gt;, &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/249" rel="noopener noreferrer"&gt;Interactive book throwing error , markdown builder bug fixed&lt;/a&gt;, &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/281" rel="noopener noreferrer"&gt;Upgrade to flutter 3.29.2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs, blogs, comments… literally everything I could find.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In doing so, I found a previous workaround by &lt;a href="https://github.com/tanmoysrt" rel="noopener noreferrer"&gt;@tanmoysrt&lt;/a&gt;, where an invisible character (U+200E) was added to help the parser terminate the AST correctly. But later, he upgraded the &lt;code&gt;flutter_markdown&lt;/code&gt; package, and things seemed to work again—&lt;em&gt;for a while&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That’s when I learned something crucial:&lt;br&gt;&lt;br&gt;
Until about 3 months ago, we were using CircuitVerse’s &lt;strong&gt;community fork&lt;/strong&gt; of &lt;code&gt;flutter_markdown&lt;/code&gt;:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/CircuitVerse/packages" rel="noopener noreferrer"&gt;https://github.com/CircuitVerse/packages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, this fork was not actively maintained and lagged far behind the main fork. It was finally replaced with the official package during the last Flutter upgrade via &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/281" rel="noopener noreferrer"&gt;this PR&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Digging into the version history, I found this helpful comment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This issue might give you a little bit of a hard time as &lt;code&gt;flutter_markdown&lt;/code&gt; was buggy. We're using our own fork of it... feel free to open a PR there, though it’s not up to date."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To add to this mess, Flutter officially &lt;strong&gt;discontinued &lt;code&gt;flutter_markdown&lt;/code&gt;&lt;/strong&gt; due to limited resources.&lt;br&gt;&lt;br&gt;
Here’s the issue: &lt;a href="https://github.com/flutter/flutter/issues/162960" rel="noopener noreferrer"&gt;https://github.com/flutter/flutter/issues/162960&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Despite pushback from the community, it’s now archived.&lt;/p&gt;

&lt;p&gt;I tried looking for other community-maintained forks, but... nothing.&lt;br&gt;&lt;br&gt;
In one of the discussion threads, someone mentioned &lt;code&gt;markdown_widget&lt;/code&gt; as a potential alternative. After talking to Hardik about this, he suggested downgrading to a previous &lt;code&gt;flutter_markdown&lt;/code&gt; version that used to work—but no luck there either.&lt;/p&gt;

&lt;p&gt;Then I explored a few other alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;code&gt;flutter_markdown_plus&lt;/code&gt; – Too new and didn’t align well with our complex structure.&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;markdown_widget&lt;/code&gt; – Seemed promising, but the architecture is entirely different and &lt;strong&gt;does not support custom builders&lt;/strong&gt;. Implementing it would mean rewriting a lot from scratch.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;This is where I am with the issue right now.&lt;br&gt;&lt;br&gt;
Honestly? It doesn’t &lt;em&gt;feel&lt;/em&gt; like much progress. It feels like a lot of trying and failing. But at the same time, I’ve learned &lt;em&gt;so much&lt;/em&gt;—about the history of the feature, about our dependencies, and about package maintenance and community forks.&lt;/p&gt;

&lt;p&gt;Even if it doesn’t feel like a win yet, I know this groundwork will help us find the right way forward.&lt;/p&gt;

&lt;p&gt;Let’s see what Week 7 brings!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>flutter</category>
      <category>dart</category>
    </item>
    <item>
      <title>GSoC Week 5: Markdown broke, CI/CD woke</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sun, 13 Jul 2025 12:18:10 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-5-markdown-broke-cicd-woke-59kf</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-5-markdown-broke-cicd-woke-59kf</guid>
      <description>&lt;p&gt;So this week started with me working on the buggy &lt;em&gt;Interactive Book&lt;/em&gt; part of the app. We hit this error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞══  
'package:flutter_markdown/src/builder.dart': Failed assertion: line 267 pos 12: '_inlines.isEmpty': is not true.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The widget causing it was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SingleChildScrollView:file:///C:/Users/emper/Desktop/cv_app_gsoc/lib/ui/views/ib/ib_page_view.dart:501:22
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an assertion failure in the &lt;code&gt;flutter_markdown&lt;/code&gt; package, and basically, the parser found some weird inline elements in our Markdown that it couldn’t handle. Either some broken tags or bad formatting. Now we were already using a &lt;code&gt;sanitizeMarkdown()&lt;/code&gt; function (I’d mentioned that in the last blog), to catch broken lines and tags but still, this popped up.&lt;/p&gt;

&lt;p&gt;Digging deeper, I noticed this in our custom builders:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;RegExp&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;RegExp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sx"&gt;r'{:\s?(.+)\s?}'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is for extracting content between &lt;code&gt;{:&lt;/code&gt; and &lt;code&gt;}&lt;/code&gt;. We had more such patterns, and I was trying all ways to fix things from the UI side wrapping in an error boundary, adding debug logs, etc.&lt;/p&gt;

&lt;p&gt;Also ran into a &lt;code&gt;null operator used on a null value&lt;/code&gt; kind of thing, so I added proper checks for that as well.&lt;/p&gt;




&lt;h3&gt;
  
  
  But then… Hardik pinged
&lt;/h3&gt;

&lt;p&gt;Hardik asked me to pause this bug-hunt for a while and work on releasing the app — a basic &lt;code&gt;GitHub release&lt;/code&gt; so others in the community can try it too.&lt;/p&gt;

&lt;p&gt;This was &lt;em&gt;literally&lt;/em&gt; the first time I was doing anything with CI/CD — had zero idea about it 😅. So I just told my mentors: “Yeh we can do that, but I don’t have much knowledge on this… could you share something I can start with?”&lt;/p&gt;

&lt;p&gt;Hardik shared this article:&lt;br&gt;
👉 &lt;a href="https://medium.com/@colonal/automating-flutter-builds-and-releases-with-github-actions-77ccf4a1ccdd" rel="noopener noreferrer"&gt;Automating Flutter Builds with GitHub Actions: A Step-by-Step Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It was actually really well written and easy to understand. But in that article, they used &lt;strong&gt;a single file&lt;/strong&gt; for the workflow.&lt;/p&gt;

&lt;p&gt;In our project, we had &lt;strong&gt;three files&lt;/strong&gt;: &lt;code&gt;main.yml&lt;/code&gt;, &lt;code&gt;ci.yml&lt;/code&gt;, and &lt;code&gt;cd.yml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So I read more and turns out it’s perfectly fine. You use one file if your project is small, but for a bit more structure, people prefer separate files. In our case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;main.yml&lt;/code&gt;: Just validates commit messages (we're using &lt;code&gt;action-conventional-commits&lt;/code&gt;). Triggers on &lt;code&gt;pull_request&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;ci.yml&lt;/code&gt;: Handles build, test, and code checks (formatting, analysis, coverage). Runs on every push/PR.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;cd.yml&lt;/code&gt;: Manages release and deployment using &lt;code&gt;semantic-release&lt;/code&gt;, &lt;code&gt;Fastlane&lt;/code&gt;, GitHub Releases, etc. Triggers manually or on &lt;code&gt;push&lt;/code&gt; to &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  What I added
&lt;/h3&gt;

&lt;p&gt;I added this part to &lt;strong&gt;build and upload the APK&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build APK (Android)&lt;/span&gt;
  &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.platform == 'ubuntu-latest' }}&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;flutter build apk --release \&lt;/span&gt;
      &lt;span class="s"&gt;--dart-define=FB_APP_ID=${{ secrets.FB_APP_ID }} \&lt;/span&gt;
      &lt;span class="s"&gt;--dart-define=FB_APP_NAME=${{ secrets.FB_APP_NAME }} \&lt;/span&gt;
      &lt;span class="s"&gt;--dart-define=GITHUB_OAUTH_CLIENT_ID=${{ secrets.GH_OAUTH_CLIENT_ID }} \&lt;/span&gt;
      &lt;span class="s"&gt;--dart-define=GITHUB_OAUTH_CLIENT_SECRET=${{ secrets.GH_OAUTH_CLIENT_SECRET }}&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Upload APK Artifact&lt;/span&gt;
  &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.platform == 'ubuntu-latest' }}&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/upload-artifact@v4&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;android-apk-${{ github.run_number }}&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build/app/outputs/apk/release/app-release.apk&lt;/span&gt;
    &lt;span class="na"&gt;if-no-files-found&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I added the &lt;strong&gt;release section&lt;/strong&gt; to automate GitHub release creation when code is pushed to &lt;code&gt;master&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ github.event_name == 'push' &amp;amp;&amp;amp; github.ref == 'refs/heads/master' }}&lt;/span&gt;
  &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build&lt;/span&gt;
  &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
  &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Download APK Artifact&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/download-artifact@v4&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;android-apk-${{ github.run_number }}&lt;/span&gt;
        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Get Current Date&lt;/span&gt;
      &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;date&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;echo "date=$(date +'%Y-%m-%d')" &amp;gt;&amp;gt; $GITHUB_OUTPUT&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Create Release&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;softprops/action-gh-release@v2&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;tag_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v1.0.${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;github.run_number&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Release&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;v1.0.${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;github.run_number&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;steps.date.outputs.date&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;Android APK release built from commit ${{ github.sha }}.&lt;/span&gt;

          &lt;span class="s"&gt;Build number: ${{ github.run_number }}&lt;/span&gt;
          &lt;span class="s"&gt;Build date: ${{ steps.date.outputs.date }}&lt;/span&gt;

          &lt;span class="s"&gt;Download and install the APK file below.&lt;/span&gt;
        &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./app-release.apk&lt;/span&gt;
        &lt;span class="na"&gt;draft&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
        &lt;span class="na"&gt;prerelease&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
        &lt;span class="na"&gt;generate_release_notes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To try what I learnt, I created a separate repo and tried out the learning here:&lt;br&gt;
👉 &lt;a href="https://github.com/JatsuAkaYashvant/learning_github_workflow" rel="noopener noreferrer"&gt;Learning GitHub Workflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The PR : &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/398" rel="noopener noreferrer"&gt;Enhance CI with automated releases #398&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After this, Hardik made the release public in the community and shared the APK. And guess what — &lt;strong&gt;people actually downloaded and ran it&lt;/strong&gt;! &lt;/p&gt;




&lt;h3&gt;
  
  
  And then... F-Droid?
&lt;/h3&gt;

&lt;p&gt;Someone in the community — &lt;code&gt;salmoneatenbybear&lt;/code&gt; aka Aditya (I hope I’m right 😅) — mentioned F-Droid deployment. I’ll be honest, I didn’t know what F-Droid was at that moment.&lt;/p&gt;

&lt;p&gt;So I looked it up.&lt;/p&gt;

&lt;p&gt;Turns out:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;F-Droid is a free and open-source app store for Android.&lt;br&gt;
It doesn’t track users, hosts only FOSS apps, and is maintained by the community.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s kinda like Play Store, but &lt;em&gt;for open-source-only apps&lt;/em&gt;. Very cool.&lt;/p&gt;

&lt;p&gt;I tried checking the last PR related to it (or maybe it wasn’t a PR), but it didn’t really come to a conclusion. Still need to explore it more.&lt;/p&gt;

&lt;p&gt;If you're curious about how to contribute or deploy on F-Droid, here’s a good starting point: 📘 &lt;a href="https://gitlab.com/fdroid/fdroiddata/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;F-Droid Contribution Guide&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Wrapping up...
&lt;/h3&gt;

&lt;p&gt;So yeah — started the week trying to make Markdown behave, ended the week building CI/CD pipelines, publishing GitHub releases, and learning about app stores I never knew existed 😄&lt;/p&gt;

&lt;p&gt;Next up: probably explore more around F-Droid, improve release notes, and see if I can finally fix that Markdown crash for good.&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you have suggestions, feel free to drop them in comments 🙌&lt;/p&gt;




</description>
      <category>opensource</category>
      <category>flutter</category>
      <category>dart</category>
    </item>
    <item>
      <title>GSoC Week 4: RTL Madness, OAuth Adventures &amp; Markdown Mayhem</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sun, 29 Jun 2025 10:30:43 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-4-rtl-madness-oauth-adventures-markdown-mayhem-413p</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-4-rtl-madness-oauth-adventures-markdown-mayhem-413p</guid>
      <description>&lt;p&gt;Week 4 of my GSoC journey started with a fresh set of tasks—one of which was fixing the authorization flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  It All Started with OAuth… and a Missed README
&lt;/h2&gt;

&lt;p&gt;So the week started with a new task: fix the OAuth authorization.&lt;/p&gt;

&lt;p&gt;Seems straightforward, right?&lt;/p&gt;

&lt;p&gt;Well, I might have missed reading the README properly. Turns out, it clearly mentioned:&lt;/p&gt;

&lt;p&gt;“For Google OAuth we use &lt;code&gt;google_sign_in&lt;/code&gt;. You'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cv_debug.jks&lt;/code&gt; in &lt;code&gt;android/app/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;key.debug.properties&lt;/code&gt; in &lt;code&gt;android/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For these secrets, just message us on Slack. We'll take care of the rest.”&lt;/p&gt;

&lt;p&gt;And guess who didn’t read that? 🙃&lt;/p&gt;

&lt;p&gt;I messaged Aboo (our org admin), only to learn the files were on his old laptop. So I hopped on texts with Hardik, and we decided: okay, let’s set it up from scratch — new OAuth credentials, new keys, new everything.&lt;/p&gt;

&lt;p&gt;We also geeked out a bit on why OAuth fails sometimes. Quick tip: OAuth credentials can expire if they’re rotated or due to change in Google's policies. So if you’re facing weird auth issues — always check your keys first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Welcome to the World of RTL Languages
&lt;/h2&gt;

&lt;p&gt;Just when I thought I was done with multi-language support, Aboo said:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“We also need to support RTL languages — like Arabic and Hebrew.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’m going to be honest here — I barely manage English and Hindi. Arabic? Never seen, never typed.&lt;/p&gt;

&lt;p&gt;So I started by detecting if the selected locale was RTL, and wrapped my widgets using &lt;code&gt;Directionality&lt;/code&gt;. At first, I was manually adjusting everything. It felt huge, and the UI started looking weird to me.&lt;/p&gt;

&lt;p&gt;But here’s the cool part — turns out Flutter handles RTL automatically if your localization setup is right. That discovery? Literal joy.&lt;/p&gt;

&lt;p&gt;I used DeepSeek to auto-translate for testing (yes, AI is now my bestie), and then came Manar — who joined the RTL-support Slack group and saved my life. She pointed out mistakes that I couldn’t even spot because… I literally couldn’t read the script 😅&lt;/p&gt;

&lt;p&gt;I was like:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Oh this looks like that word… maybe?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;She explained things patiently and I learned a lot — not just about the languages, but about designing with empathy for users you don’t share a language with.&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%2Fdz0kq79jqr81q8wih6gx.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%2Fdz0kq79jqr81q8wih6gx.jpg" alt="Image description" width="717" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pull request: &lt;a href="https://github.com/CircuitVerse/mobile-app/pull/391" rel="noopener noreferrer"&gt;https://github.com/CircuitVerse/mobile-app/pull/391&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A good video that you can see(recommended by Aboo): &lt;a href="https://www.youtube.com/watch?v=sNbNId_MGtc" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=sNbNId_MGtc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also added language-specific screenshots — earlier the UI changed, but the screenshots stubbornly stayed in English. Fixed ✅&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%2F6fgda8ndd5yuv5wb4irr.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%2F6fgda8ndd5yuv5wb4irr.png" alt="Image description" width="800" height="279"&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%2Fu17no6ge6pfnq4yhwf2f.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%2Fu17no6ge6pfnq4yhwf2f.png" alt="Image description" width="800" height="268"&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%2F11tg3cyij3mszwdzg00a.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%2F11tg3cyij3mszwdzg00a.png" alt="Image description" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Markdown Mayhem: My Widget Had a Meltdown
&lt;/h2&gt;

&lt;p&gt;Now let’s talk about the Interactive Book section.&lt;/p&gt;

&lt;p&gt;It broke. Hard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EXCEPTION CAUGHT BY WIDGETS LIBRARY:
Failed assertion: line 267 pos 12: '_inlines.isEmpty': is not true.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caused by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Malformed markdown content&lt;/li&gt;
&lt;li&gt;Null or improperly formatted data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To address this, I started writing a function to sanitize Markdown input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String _sanitizeMarkdown(String content) {
  debugPrint('Sanitizing markdown content...');
  final originalLength = content.length;

  content = content.replaceAll(RegExp(r'[\x00-\x09\x0B-\x1F]'), '');
  content = content.replaceAll(RegExp(r'\r\n?'), '\n');

  content = content
      .replaceAllMapped(RegExp(r'(?&amp;lt;!\*)\*\*([^\*]+)(?!\*\*)'), (m) =&amp;gt; '**${m[1]}**')
      .replaceAllMapped(RegExp(r'(?&amp;lt;!_)__([^_]+)(?!__)'), (m) =&amp;gt; '__${m[1]}__')
      .replaceAllMapped(RegExp(r'(?&amp;lt;!`)`([^`]+)(?!`)'), (m) =&amp;gt; '`${m[1]}`');

  if (content.length != originalLength) {
    debugPrint('Sanitization changed content length from $originalLength to ${content.length}');
  }

  return content;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s not perfect yet, but it’s helping. Slowly taming the Markdown monster 🐉&lt;/p&gt;

&lt;h2&gt;
  
  
  Pubspec.yaml Curiosity
&lt;/h2&gt;

&lt;p&gt;I also peeked into pubspec.yaml and noticed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http: any
markdown: any
webview_flutter: any

dependency_overrides:
  mime: ^1.0.1
  plugin_platform_interface: ^2.1.2
  markdown:
    git: https://github.com/dart-lang/markdown.git

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using &lt;code&gt;any&lt;/code&gt; and &lt;code&gt;overriding dependencies&lt;/code&gt; isn't best practice—could be contributing to instability. Tried a few changes, but didn’t get far (yet).&lt;/p&gt;

&lt;h2&gt;
  
  
  “Hey… How Often Do You Talk to Your Mentors?”
&lt;/h2&gt;

&lt;p&gt;Now for the jump scare of the week.&lt;/p&gt;

&lt;p&gt;I got a message from Aboo:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Hey, how often do you discuss the project with your mentors? Do you keep meeting notes?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And in my head:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Gyi naukri.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But later Hardik clarified it was for internal process. Crisis averted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond GSoC
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Startup Update: Our startup got screened for a ₹10 lakh ignition grant! &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GSSoC Campus Ambassador: I don’t know why I got selected, but hey—I did.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rust: I learnt a bit of rust and tried contributing to the main repo (to the documentation, don't laugh).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Big thing brewing: Can’t share yet, but something big is on the horizon.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Web3 Hackathon: Teaming up with seniors. Learning tons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Notion Geekery: Made a cool Notion template and shared it on LinkedIn, here's the link of that template : &lt;a href="https://erratic-capacity-70d.notion.site/My-Organized-Chaos-200262d4c667802389f0dcf825392d6a" rel="noopener noreferrer"&gt;My Organized Chaos&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it for Week 4—lots of learning, a bit of chaos, and many “Oh no!” moments turned into “Aha!” ones. If you’ve been in the trenches of OAuth or RTL or just want to laugh at my mishaps, let’s connect!&lt;/p&gt;

&lt;p&gt;See you next week 🚀&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>flutter</category>
      <category>gsoc</category>
      <category>learning</category>
    </item>
    <item>
      <title>GSoC Coding Period Week 3:</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sun, 22 Jun 2025 12:05:34 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-coding-period-week-3-42j3</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-coding-period-week-3-42j3</guid>
      <description>&lt;p&gt;This week was a classic GSoC rollercoaster—funny moments, frustrating bugs, and fulfilling breakthroughs!&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up Codebase Modernization
&lt;/h2&gt;

&lt;p&gt;The week began by finishing up a few pending tasks from codebase modernization. One of those tasks was commenting on Coderabbit's suggestions. Now, here's the funny part—when I saw the suggestions reacting and replying by themselves, I thought Aboo (my mentor) was responding manually.&lt;/p&gt;

&lt;p&gt;Turns out, Coderabbit talks back.My reaction? Mild panic, major confusion, and then a chuckle.&lt;/p&gt;

&lt;p&gt;Anyway, it's surprisingly helpful. Definitely the kind of AI pair programmer you don’t mind having around.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Great Key-Naming Fiasco
&lt;/h2&gt;

&lt;p&gt;A BIG mistake I made and I’m writing it in caps so future-me never forgets is this:&lt;/p&gt;

&lt;p&gt;Always use unique keys when working with Flutter's localization (&lt;code&gt;gen-l10n&lt;/code&gt;)!&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;profile_view_error&lt;/code&gt;, &lt;code&gt;ib_landing_view_error&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why? Because ARB files are flat JSONs. If you use the same key name ("error": "Error") multiple times, the &lt;code&gt;Flutter gen-l10n&lt;/code&gt; tool will crash... hard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Facebook Auth + macOS = 🥲
&lt;/h2&gt;

&lt;p&gt;Then came the big auth task: the app was looking for a macOS implementation of &lt;code&gt;facebook_auth_desktop&lt;/code&gt;, but it wasn’t there. I tried adding it manually—ambitious, I know—but soon hit conflicts with &lt;code&gt;oauth2_client&lt;/code&gt;and &lt;code&gt;flutter_secure_storage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Hardik, my mentor, rightly pointed out that downgrading just to fix a conflict is not a great long-term solution. So, I went searching.&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%2Fgffnj3sv01ejwgnh53jp.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%2Fgffnj3sv01ejwgnh53jp.jpg" alt="Image description" width="800" height="749"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I discovered &lt;code&gt;flutter_appauth&lt;/code&gt;, a promising alternative—but it also needed &lt;code&gt;facebook_auth_desktop&lt;/code&gt;, and brought along security constraints due to PKCE.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s PKCE?
&lt;/h2&gt;

&lt;p&gt;PKCE (Proof Key for Code Exchange) is a security extension to OAuth 2.0. It prevents authorization code interception attacks, especially on public clients like mobile and desktop apps. Instead of just sending a client secret, it uses a dynamically generated code verifier and challenge.&lt;/p&gt;

&lt;p&gt;It's secure—but yeah, not simple when you're juggling conflicting packages &lt;/p&gt;

&lt;h2&gt;
  
  
  UI Time: Card Redesign Sprint
&lt;/h2&gt;

&lt;p&gt;To cool off from the auth-heavy chaos, I shifted gears and decided to redesign the profile cards.&lt;/p&gt;

&lt;p&gt;I went deep down the rabbit hole of UI inspiration sites. After scrolling endlessly, I landed on &lt;a href="https://www.boltuix.com/2023/02/creating-beautiful-card-ui-in-flutter.html" rel="noopener noreferrer"&gt;BoltUiX&lt;/a&gt;—and let me just say, what a vibe! I learned a lot about spacing, contrast, and minimal design elements just from observing how cleanly they laid things out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&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%2Fq2t90byoxyfm6qshp032.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%2Fq2t90byoxyfm6qshp032.jpg" alt="Image description" width="540" height="1204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&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%2F1lb4asoybwkap1swex14.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%2F1lb4asoybwkap1swex14.jpg" alt="Image description" width="717" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Frontend work can be so relaxing. It’s like gardening... but with Figma tabs open.&lt;/p&gt;
&lt;h2&gt;
  
  
  Weekly Discussions &amp;amp; Sync-ups
&lt;/h2&gt;

&lt;p&gt;One of the best parts of this week was how much I talked with my mentors. Frequent discussions are underrated—they make sure you're never sailing off-course, and everyone’s on the same page.&lt;/p&gt;

&lt;p&gt;We even had a sync-up call me, Aboo, and Hardik where we discussed upcoming work and blockers.&lt;/p&gt;
&lt;h2&gt;
  
  
  Funny Incident: My First Code Review (Sort of)
&lt;/h2&gt;

&lt;p&gt;Okay, confession time: I noticed Aboo had requested a review from me... 9 days ago.&lt;/p&gt;

&lt;p&gt;The PR was:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chore(deps): bump flutter_lints from 5.0.0 to 6.0.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Me: “What do I even do in a review?”&lt;/p&gt;

&lt;p&gt;I had no clue, so I opened the official GitHub guide like a student before exams. After a few scrolls, I figured out: I can either approve the changes or suggest changes. Got it. &lt;/p&gt;

&lt;p&gt;The update brought in a new rule: &lt;code&gt;strict_top_level_inference&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This means now you must declare types for top-level variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Before
final primaryColor = Colors.blue;

// After
final Color primaryColor = Colors.blue;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Options we can go for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add types wherever necessary&lt;/li&gt;
&lt;li&gt;Disable the rule temporarily in &lt;code&gt;analysis_options.yaml&lt;/code&gt; and add types progressively with upcoming PRs:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;linter:
  rules:
    strict_top_level_inference: false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s a wrap for Week 3! Let’s see what Week 4 throws at me &amp;lt;3&lt;/p&gt;

</description>
      <category>appdev</category>
      <category>opensource</category>
      <category>flutter</category>
    </item>
    <item>
      <title>GSoC Week 2 — Languages, UX &amp; 40 Failing Tests</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sun, 15 Jun 2025 10:33:29 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/gsoc-week-2-languages-ux-40-failing-tests-5b72</link>
      <guid>https://dev.to/jatsuakayashvant/gsoc-week-2-languages-ux-40-failing-tests-5b72</guid>
      <description>&lt;p&gt;This week was a rollercoaster from fine-tuning user experience to modernizing an entire codebase for localization. Here’s what went down:&lt;/p&gt;

&lt;h2&gt;
  
  
  Smoother Profile Updates – Better UX, Better You
&lt;/h2&gt;

&lt;p&gt;Started off with some subtle yet powerful changes to the update profile feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved UX&lt;/li&gt;
&lt;li&gt;Faster suggestions&lt;/li&gt;
&lt;li&gt;Cleaner and more intuitive interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s always amazing how a few thoughtful tweaks can enhance the overall user journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hello, World – In Multiple Languages!
&lt;/h2&gt;

&lt;p&gt;Next up: Multi-language support&lt;br&gt;
We initially had two .arb files – Hindi &amp;amp; English. I added a language toggle in the sidebar and... it worked! Well, kind of. 😅&lt;/p&gt;

&lt;p&gt;Turns out it only translated user static strings.&lt;/p&gt;

&lt;p&gt;One conversation with Hardik later, I realized what I actually needed to do — modernize the entire codebase for true localization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modernizing the Codebase – Line by Line
&lt;/h2&gt;

&lt;p&gt;And so began the mission:&lt;/p&gt;

&lt;p&gt;Went file by file, line by line, transforming static text into translatable resources&lt;/p&gt;

&lt;p&gt;Every page I touched started speaking a new language — it was oddly satisfying&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%2Fts7la8cuhcwyqjjp00gx.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%2Fts7la8cuhcwyqjjp00gx.jpg" alt="Image description" width="540" height="1204"&gt;&lt;/a&gt;&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%2Fkofz3f9mt7qsj5yuuu0b.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%2Fkofz3f9mt7qsj5yuuu0b.jpg" alt="Image description" width="540" height="1204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Faced multiple hiccups — including spending 45 minutes debugging a missing comma in an .arb file (yes, just a comma 🫠)&lt;/p&gt;

&lt;p&gt;Eventually, the transformation was complete:&lt;/p&gt;

&lt;p&gt;From static strings to notifications, from error messages to button labels everything now speaks your chosen language!&lt;/p&gt;

&lt;h2&gt;
  
  
  40 Tests Failed… and I’m Weirdly Happy About It
&lt;/h2&gt;

&lt;p&gt;Just out of curiosity, I ran flutter test — now my new hobby.&lt;/p&gt;

&lt;p&gt;Boom 💥 — 40 test cases failed!&lt;/p&gt;

&lt;p&gt;Why? Because even the test files needed localization updates.&lt;br&gt;
So, that’s what I’m tackling next. Let’s just say, this week kept me very awake 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  A Quick Shoutout to Crowdin
&lt;/h2&gt;

&lt;p&gt;As I was exploring translations, I checked out Crowdin, a localization management platform already set up by Aboo.&lt;/p&gt;

&lt;p&gt;Crowdin is a super helpful tool that simplifies collaboration between developers and translators. It keeps all translations organized, syncs with the codebase, and makes the whole process scalable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;Localization isn't just about translating text — it's about restructuring your codebase to support diverse experiences&lt;/p&gt;

&lt;p&gt;Always double-check your .arb commas. Always.&lt;/p&gt;

&lt;p&gt;Test failures aren’t always a bad thing — they show you how far you've come&lt;/p&gt;

&lt;p&gt;Week 2 isn't over yet, and I’m already looking forward to what's next!&lt;/p&gt;

&lt;p&gt;If you've worked on localization or used Crowdin in your projects — I’d love to hear your thoughts or tips. 👇&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Week 1 of GSoC: Learning Through Dependencies and Communication</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Sun, 08 Jun 2025 16:29:32 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/week-1-of-gsoc-learning-through-dependencies-and-communication-1d1g</link>
      <guid>https://dev.to/jatsuakayashvant/week-1-of-gsoc-learning-through-dependencies-and-communication-1d1g</guid>
      <description>&lt;p&gt;My GSoC journey began with something most developers both respect and fear: dependency resolution. The first issue I picked involved fixing deprecated packages and aligning the project with the latest compatible versions. Sounds simple — but I quickly realized just how intricate and interconnected dependency management can be.&lt;/p&gt;

&lt;p&gt;What I Learned during this week, I got a solid grasp of:&lt;/p&gt;

&lt;p&gt;📦 How Flutter and Dart dependencies interact.&lt;/p&gt;

&lt;p&gt;🔍 How to identify compatible versions and understand why upgrading isn't always the best solution.&lt;/p&gt;

&lt;p&gt;🛠️ Refactoring deprecated components — such as replacing imageBuilder with a custom implementation.&lt;/p&gt;

&lt;p&gt;🚀 Diving into CI/CD pipelines, understanding automated test workflows and how things work post-commit.&lt;/p&gt;

&lt;p&gt;📁 Tools like FVM (Flutter Version Management), VIM, and GitHub’s advanced features.&lt;/p&gt;

&lt;p&gt;🔐 An important insight: In production, we use .define to keep client secrets (like API keys or client IDs) safe — preventing leaks of sensitive tokens.&lt;/p&gt;

&lt;p&gt;🔒 I also explored authorization concepts in more depth, including how tokens are managed securely on the client side.&lt;/p&gt;

&lt;p&gt;🚀 I also got to know that in big companies like my org CircuitVerse, we don't work on the latest flutter version, but a bit older version.&lt;/p&gt;

&lt;p&gt;Communication: The Real Game-Changer&lt;br&gt;
One of my key reflections this week wasn’t just technical — it was personal.&lt;/p&gt;

&lt;p&gt;Initially, I found myself struggling with communication. Not because the mentors weren’t supportive — in fact, they were incredibly helpful and available. It was more about me not reaching out enough or asking the right questions early on. Toward the end of the week, I made a conscious effort to change that and started communicating more proactively.&lt;/p&gt;

&lt;p&gt;Special thanks to Hardik for being consistently patient and encouraging throughout this period.&lt;/p&gt;

&lt;p&gt;Looking Ahead&lt;br&gt;
In hindsight, I recognize that my initial solutions could have been more efficient. But this is part of the journey — learning by doing, improving with every iteration. From next week, I plan to:&lt;/p&gt;

&lt;p&gt;Start with a more structured approach to issues.&lt;/p&gt;

&lt;p&gt;Communicate early and clearly.&lt;/p&gt;

&lt;p&gt;Document more of my learning as I go.&lt;/p&gt;

&lt;p&gt;I’m excited for what’s ahead and grateful for this opportunity to grow through real-world, open-source experience. 💪&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My GSoC Community Bonding Period with CircuitVerse 💻✨</title>
      <dc:creator>Yashvant Singh</dc:creator>
      <pubDate>Mon, 02 Jun 2025 05:32:22 +0000</pubDate>
      <link>https://dev.to/jatsuakayashvant/my-gsoc-community-bonding-period-with-circuitverse-8o5</link>
      <guid>https://dev.to/jatsuakayashvant/my-gsoc-community-bonding-period-with-circuitverse-8o5</guid>
      <description>&lt;h2&gt;
  
  
  May 8 – June 1, 2025
&lt;/h2&gt;

&lt;p&gt;The Community Bonding Period of &lt;strong&gt;Google Summer of Code&lt;/strong&gt; (GSoC) 2025 with &lt;strong&gt;CircuitVerse&lt;/strong&gt; has been nothing short of amazing! From the very first day, I’ve been welcomed into a vibrant and supportive community full of warmth, learning, and collaboration.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Impressions Matter 🌸
&lt;/h2&gt;

&lt;p&gt;The journey began with a fun and light-hearted introductory meeting where I got to meet the mentors, fellow contributors, and the entire CircuitVerse community. We shared stories, experiences, and a lot of laughs. It was more like catching up with old friends than meeting a group of techies online!&lt;/p&gt;

&lt;p&gt;From there, our &lt;strong&gt;bi-weekly meetings&lt;/strong&gt; began. But these weren’t your usual serious sync-ups — we always started with the good things in life. Fun updates, small wins, random banter... and then came the work. That balance made these meets feel human and refreshing.&lt;/p&gt;

&lt;p&gt;We had a shared Google Doc that tracked every discussion point — super helpful for anyone who missed a meet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Deep Dive 🐳
&lt;/h2&gt;

&lt;p&gt;During this period, I went full-on OCD (Organized Contributor Disorder 😄). I created a fresh local fork of the app and started combing through the codebase, finding bugs, suggesting improvements, and getting a real feel for how everything worked. It was less about jumping into code and more about understanding the soul of the project.&lt;/p&gt;

&lt;p&gt;I had some fantastic 1:1 sessions with my mentors — &lt;strong&gt;Hardik Sachdeva&lt;/strong&gt; and &lt;strong&gt;Aboobacker MK&lt;/strong&gt; — where we discussed timelines, project flow, and features. They helped me set up a GitHub project board to track everything neatly. The coding period hadn’t even started, but these meetings were already shaping how I approached the project.&lt;/p&gt;

&lt;p&gt;Also, shoutout to Hardik for making everything feel cool. Quite literally — “Cool” might just be his most-used word, and somehow it always works!&lt;/p&gt;

&lt;h2&gt;
  
  
  Community: The Real Backbone 💬
&lt;/h2&gt;

&lt;p&gt;I didn’t stop there. I stalked (in a nice way 😅) every other GSoC’25 contributor, especially from my org, and ended up connecting with most of them. We even created a dedicated group for all the CircuitVerse contributors, and the support there is amazing — everyone is always ready to help, share tips, or just laugh at random jokes.&lt;/p&gt;

&lt;p&gt;The Telegram GSoC community is another level altogether — chaotic, helpful, and full of energy. A must-join for every GSoCer.&lt;/p&gt;

&lt;p&gt;Big thanks to my seniors: Aaditya Patil and Utkarsh Maurya, for being absolute gems. They patiently answered all my silly doubts and gave me guidance throughout.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways from Bonding Period 💡
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Organize like Vedant:&lt;/strong&gt; I learned how you can keep a meeting short, impactful, and on track — Vedant nailed that in 30 mins while mine go on for 2 hours 😅&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use GitHub Project Boards:&lt;/strong&gt; Absolute game changer for tracking tasks and progress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overcommunication &amp;gt; Assumptions:&lt;/strong&gt; Better to clarify things early than to be stuck later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track everything:&lt;/strong&gt; Logs, notes, tasks — it all adds up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Everyone wants RCB to win:&lt;/strong&gt; Ee saala cup namde! ❤️💛&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead 🚀
&lt;/h2&gt;

&lt;p&gt;The community bonding period has laid a strong foundation. I feel more confident, more connected, and more excited about the work ahead. The real coding begins now — and I can’t wait to dive in and make a real impact with CircuitVerse.&lt;/p&gt;

&lt;p&gt;See you all in the next blog, probably with more code and fewer memes (&lt;strong&gt;just kidding, memes will stay 😎&lt;/strong&gt;).&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
