DEV Community

Cover image for GSoC Week 4: RTL Madness, OAuth Adventures & Markdown Mayhem
Yashvant Singh
Yashvant Singh

Posted on

GSoC Week 4: RTL Madness, OAuth Adventures & Markdown Mayhem

Week 4 of my GSoC journey started with a fresh set of tasks—one of which was fixing the authorization flow.

It All Started with OAuth… and a Missed README

So the week started with a new task: fix the OAuth authorization.

Seems straightforward, right?

Well, I might have missed reading the README properly. Turns out, it clearly mentioned:

“For Google OAuth we use google_sign_in. You'll need:

  • cv_debug.jks in android/app/
  • key.debug.properties in android/

For these secrets, just message us on Slack. We'll take care of the rest.”

And guess who didn’t read that? 🙃

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.

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.

Welcome to the World of RTL Languages

Just when I thought I was done with multi-language support, Aboo said:

“We also need to support RTL languages — like Arabic and Hebrew.”

I’m going to be honest here — I barely manage English and Hindi. Arabic? Never seen, never typed.

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

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

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 😅

I was like:

“Oh this looks like that word… maybe?”

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.

Image description

Pull request: https://github.com/CircuitVerse/mobile-app/pull/391

A good video that you can see(recommended by Aboo): https://www.youtube.com/watch?v=sNbNId_MGtc

Also added language-specific screenshots — earlier the UI changed, but the screenshots stubbornly stayed in English. Fixed ✅

Image description

Image description

Image description

Markdown Mayhem: My Widget Had a Meltdown

Now let’s talk about the Interactive Book section.

It broke. Hard.

EXCEPTION CAUGHT BY WIDGETS LIBRARY:
Failed assertion: line 267 pos 12: '_inlines.isEmpty': is not true.

Enter fullscreen mode Exit fullscreen mode

Caused by:

  • Malformed markdown content
  • Null or improperly formatted data

To address this, I started writing a function to sanitize Markdown input:

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'(?<!\*)\*\*([^\*]+)(?!\*\*)'), (m) => '**${m[1]}**')
      .replaceAllMapped(RegExp(r'(?<!_)__([^_]+)(?!__)'), (m) => '__${m[1]}__')
      .replaceAllMapped(RegExp(r'(?<!`)`([^`]+)(?!`)'), (m) => '`${m[1]}`');

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

  return content;
}
Enter fullscreen mode Exit fullscreen mode

It’s not perfect yet, but it’s helping. Slowly taming the Markdown monster 🐉

Pubspec.yaml Curiosity

I also peeked into pubspec.yaml and noticed:

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

Enter fullscreen mode Exit fullscreen mode

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

“Hey… How Often Do You Talk to Your Mentors?”

Now for the jump scare of the week.

I got a message from Aboo:

“Hey, how often do you discuss the project with your mentors? Do you keep meeting notes?”

And in my head:

“Gyi naukri.”

But later Hardik clarified it was for internal process. Crisis averted.

Beyond GSoC

  • Startup Update: Our startup got screened for a ₹10 lakh ignition grant!

  • GSSoC Campus Ambassador: I don’t know why I got selected, but hey—I did.

  • Rust: I learnt a bit of rust and tried contributing to the main repo (to the documentation, don't laugh).

  • Big thing brewing: Can’t share yet, but something big is on the horizon.

  • Web3 Hackathon: Teaming up with seniors. Learning tons.

  • Notion Geekery: Made a cool Notion template and shared it on LinkedIn, here's the link of that template : My Organized Chaos.

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!

See you next week 🚀

Top comments (0)