Hi, I'm Gokul. I lead mobile at MyFi in Bangalore, and I've shipped Flutter and Swift apps since 2019. I also build open-source tools other developers install, and I take apps apart to see how they work.
Open to SDE and mobile lead roles
Things I've built that I'm proud of
If the connection drops, it reconnects and resumes from the last event. Each word below is one server event. pub.dev ↗
Pure black, with violet, amber and crimson accents. Zed extension ↗
class Feed extends ChangeNotifier { final List<Post> posts = []; @override Future<void> refresh() async { final res = await http.get(Uri.parse('https://api.example.com/feed')); if (res.statusCode == 200) notifyListeners(); } }
A short Dart snippet in The Dark Side's colours.
A home server I run for media, network-wide ad blocking and coding agents. One conversation plays below.
Favorite commits and learnings
The paywall check lived inside the Android app. I decompiled it, found the one flag in about 20K obfuscated files, and sent a VDP report. Read the story →
The verify step checked the code but let the request say whose account it was. Now the account comes only from what the provider verified.
A small Go service keeps the AI stream running after the app closes. Reopen it and it replays what you missed; if you don't, one push says it's ready.
Poster images held every HTTP/1.1 connection the browser allows, so the movie list waited in line. Cancelling them on refresh fixed it. Read the PR ↗
The movie list waited for a free connection: 7.5 s in the real app.Poster loads were cancelled, so the movie list went first: 695 ms.
Six connections per site, all held by posters. Sped up; 7.5 s and 695 ms are from the PR.
A blur package screenshotted the whole screen every frame, and GPU memory hit about 3 GB. I replaced it with a two-pass shader that blurs in place.
Patching my theme's colours would have fixed it for my users only. I rewrote Zed's Dart highlight queries instead, and every theme got the fix. Read the PR ↗
class Feed extends ChangeNotifier { final List<Post> posts = []; @override Future<void> refresh() async { final res = await http.get(Uri.parse('https://api.example.com/feed')); if (res.statusCode == 200) notifyListeners(); } }
Illustrative snippet in The Dark Side's colours. The PR has the real screenshots.
Say hi
saigklkrishnan@gmail.comCopy email