🚀 I'm a React Native Developer with 5+ years of experience in building high-quality and performant mobile applications
💡 I'm passionate about creating impressive user experiences and writing clean, efficient code
🔧 I publish native modules for React Native and fix bugs in the libraries I ship with
📱 I love turning ideas into beautiful, functional mobile applications
🐕 I absolutely love dogs and I'm a proud owner of 5 adorable poodles! They're my coding companions and stress relievers
const BaoInformation = {
pronouns: "He" | "Him",
askMeAbout: ["React Native Development", "Native Modules", "Mobile App Architecture", "UI/UX Design"],
technologies: {
frontend: ["React Native", "React", "TypeScript", "JavaScript"],
native: ["Swift", "SwiftUI", "Objective-C", "Kotlin", "TurboModules", "Fabric"],
backend: ["Node.js", "Express"],
database: ["MongoDB", "MySQL", "Firebase"],
tools: ["Expo", "React Native CLI", "Redux", "Context API", "TanStack"],
design: ["Figma", "Adobe XD"],
others: ["Git", "GitHub", "GitLab", "Bitbucket", "Jira", "VS Code", "Xcode", "Android Studio"]
},
currentFocus: "Open source native modules for the New Architecture",
funFact: "I debug with console.log and I'm not ashamed! 😄",
personalLife: "Dog lover with 5 poodles 🐩 - they're the best debugging partners!"
}27 pull requests to 6 projects. I use these libraries in production, so when something breaks I go and fix it upstream — every PR below comes with a root-cause write-up and a regression test.
High-performance 2D graphics for React Native
| PR | What it fixes |
|---|---|
#4001 open |
Use-after-free in Font.getTypeface(). The borrowed pointer from SkFont::getTypeface() was adopted into an owning sk_sp without a ref, so every call silently drained the typeface's refcount until it was destroyed underneath live fonts. Proven with a C++ harness linked against the real prebuilt Skia binary — the unpatched build SIGABRTs, the patched one exits clean. |
Native macOS menu bar app that unifies your AI subscriptions — Swift 6, strict concurrency
| PR | What it fixes |
|---|---|
#467 open |
Configuring the proxy overwrote ~/.codex/auth.json wholesale, destroying credentials — now a merge-write with a restorable backup |
#471 open |
Round-tripping an auth file dropped every field the app didn't recognise — silent data loss straight into the Keychain |
#477 open |
An opencode.json with comments failed to parse and got wiped; now parses JSONC and splices a single field back byte-for-byte |
#481 open |
Custom HTTP headers for custom providers, with RFC 7230 validation so a CR/LF in a header value can't inject a request |
#475 open |
A -1 "no data" sentinel was rendered as 100 − (−1) = 101% — placeholder now, in the ring and in VoiceOver |
#472 open |
Accounts imported from Cursor and Trae couldn't be deleted — and deleted ones resurrected on the next scan |
15 more →
| PR | What it does |
|---|---|
#468 open |
Classify Codex quota windows by actual duration instead of position in the response |
#469 open |
Deduplicate Copilot quota items appearing twice under legacy and current identity keys |
#470 open |
Show the provider in the request log — and stop attributing Kiro requests to Claude |
#473 open |
Configurable reasoning effort for Codex models |
#474 open |
Let the user choose which quota bucket the menu bar shows |
#476 open |
Complete app reset in Settings, with an injectable directory so tests never touch real data |
#478 open |
Sort the accounts currently in use to the top of the menu |
#479 open |
Detect Trae CN in "Scan for IDEs", with a domain allowlist so a user-writable file can't exfiltrate a token |
#480 open |
Persist traffic statistics across proxy restarts, with a versioned store and migration |
#482 open |
Split Gemini models into their own Google-protocol provider for OpenCode |
#483 open |
Show available models in the app panel, distinguishing "empty" from "failed to load" |
#484 open |
Opt-in restore of agent configs on quit, keyed by a SHA-256 receipt so it never clobbers a config it didn't write |
#485 open |
Carry explicit quota bucket kinds from the fetchers instead of inferring them from display strings |
#486 open |
Refresh imported Cursor and Trae quotas on a global refresh |
#487 open |
Opt-in adaptive refresh cadence that backs off when nothing is changing |
Beautiful, fast and modern React Native UI library
| PR | What it fixes |
|---|---|
#464 open |
<Typography weight> stopped working in v1.0.6. The BEM migration dropped the font-weight declarations, so every weight rendered identically unless you defined custom font variables. Traced to the exact migration PR that introduced it. |
Self-hostable OTA update solution for React Native
| PR | What it does |
|---|---|
#1142 merged ✅ |
New @hot-updater/bugsnag-plugin — uploads source maps to BugSnag on every release so crash reports from OTA bundles are readable |
#1143 open |
An unknown built-in baseline bundle id was treated as a real baseline, so devices could be handed an update they couldn't apply |
Google's Filament 3D renderer for React Native
| PR | What it fixes |
|---|---|
#345 open |
file:// URIs were never percent-decoded, so any asset with a space or a non-ASCII character in its path failed to load on both platforms. Guarded so an existing file with a literal % in its name doesn't regress. |
Bottom sheet components for React Native
| PR | What it fixes |
|---|---|
#71 open |
Nested scrollables were hit-tested from the wrong point on iOS — the post-threshold pan location instead of the touch-down point, so a gesture that started inside an inner list could be stolen by the sheet |
Native modules for the New Architecture, plus one SwiftUI package. All MIT, all with example apps and CI.
| Library | What it does | |
|---|---|---|
| react-native-device-pulse | Device health from JS — thermal state, low power mode, memory warnings. Event listeners and React hooks. | |
| react-native-app-shortcuts | Home screen quick actions — UIApplicationShortcutItem on iOS, ShortcutManager on Android. |
|
| react-native-shared-transition | Shared element transitions between screens. Revived and rewritten — first working iOS build in the project's history. | |
| react-native-tipkit | Apple's TipKit for React Native — popover and inline tips, display rules, event counts, frequency control. | |
| react-native-image-analysis | On-device OCR with text geometry, barcodes, and a tap-to-select text view. Apple VisionKit on iOS, Google ML Kit on Android. | |
| react-native-ios-controls | Control Center, Lock Screen and Action Button controls (iOS 18 ControlWidget), plus a CLI that wires up the widget target for you. |
|
| ToastKit | A polished SwiftUI toast & snackbar library — queued toasts, semantic styles, swipe-to-dismiss, full accessibility. |








