Skip to content

Resume

Software engineer in New York. Full-stack TypeScript across dev tools: Convex components, Tauri desktop apps, Expo mobile, CLIs, npm packages. 5 published packages, ~900 weekly downloads combined. 23 PRs merged upstream to expo, bun, shadcn/ui, better-auth, napi-rs, Convex, fumadocs, Astro, and TanStack. Freelancing since 2013.

Selected projects

Full project list →

Open source

23 PRs merged across 10 upstream repos: expo/expo (8), get-convex/better-auth (4), shadcn-ui/ui (3), fuma-nama/fumadocs (2), napi-rs/napi-rs, better-auth/better-auth, withastro/compiler-rs, oven-sh/bun, rudrankriyam/App-Store-Connect-CLI, TanStack/db. 9 more open across 6 repos. Plus a public patches repo (103 patch files in Bun, npm, pnpm, and Yarn formats) so my projects and anyone else hitting the same bug can ship while the upstream PR is in review. Every PR I have merged shipped as a patch first.

10 of those PRs are to expo/expo (8 merged, 2 open), all in @expo/ui: textContentType with all 45 UITextContentType values, textInputAutocapitalization, defaultScrollAnchor, defaultScrollAnchorForRole, scrollTargetBehavior, scrollTargetLayout, scrollPosition binding with worklet callbacks, scaleEffect per-axis, and the clipShape/mask ShapeType fix.

Other highlights: a napi-rs v3 cross-compile regression breaking deploys to Amazon Linux 2023 and Vercel build containers. A PersistentFileLog.readEntries race condition that was flaking expo-updates CI (the only reader bypassing the serial queue every writer relied on). A jose Edge Runtime bug I traced and got fixed in v6.0.4. A concurrent fetchAccessToken dedup with useRef that closed an issue and reduced action counts on Convex. A 17-file better-auth 1.6 migration PR handling three breaking changes at once (Where.mode, shouldReturnResponse flip, twoFactor.verified).

Full contributions list →

How I work

I build tools for people who build things. When their dep breaks, I fix it upstream. When they can’t wait for the release, I ship a patch. When they need a reference implementation, I put mine on GitHub. That’s the whole thing.

I read code before I change it. Most of my merged PRs start by grep’ing for every place a pattern is already used. The @expo/ui ClipShapeModifier silent fallthrough to Rectangle was obvious once I lined it up against the four other shape modifiers in the same directory already using ShapeType. The PersistentFileLog.readEntries race was obvious once I noticed it was the only reader bypassing the serial queue every writer relied on. The napi-rs v3 cross-compile regression was obvious once I found the v2 fix the rewrite dropped. The fix is usually in the diff. The understanding is in the adjacent code.

Some fixes span more than one repo. The session rotation fix is two PRs: better-auth#9087 adds /change-password to the upstream atomListeners matcher, convex-BA#329 invalidates the cached JWT in the Convex adapter. Neither is useful alone. The better-auth 1.6 migration touches validators, plugins, schema, and hooks across 17 files in a single atomic PR because shipping any piece without the others breaks production auth.

The merged PRs span five languages. Swift for @expo/ui modifiers. Zig for bun’s semver validation. Rust for the napi-rs cross-compile regression. Go for the App Store Connect CLI timeout fix. TypeScript for everything else.

I ship the fix before the merge lands. Bug, upstream PR, drop-in patch in ramonclaudio/patches so my projects (and anyone else hitting the same bug) ship without waiting for review. 103 patch files across Bun, npm, pnpm, and Yarn. Every PR above shipped as a patch first. When the release lands, I bump the dep and delete the patch.

Most of the bugs I fix passed CI. Cookie expiry NaN coercion where NaN < anything is always false. A shouldReturnResponse flip in better-auth 1.6 that tests missed because test contexts lack a real Request. A clipShape silent fallthrough to Rectangle because nobody tested capsule. I found them, I fixed them.

I file detailed issue reports. jose process.getBuiltinModule Edge Runtime bug got fixed in v6.0.4 after my traces convinced @panva it was real. The shadcn/ui registry directory submission led @shadcn to invite a PR, which I shipped as #9331. The Claude Code symlink bug got a same-day “Fix incoming” from @bcherny and a close.

I take destructive operations seriously. The early pentesting work made me paranoid about side effects, and that paranoia ships in the tools I build. My commit guard blocks force-push, --no-verify, and GPG bypass so I can’t accidentally ship a dirty commit. I trash instead of rm. If I can’t undo it, I check the diff one more time first.

I work in short loops. Research, plan, implement, verify, commit. I keep a local search index of the docs I hit most (Convex, Expo, AI SDK, Better Auth, RevenueCat, Remotion, Tauri) so I check the source before I guess. I follow the research too: model releases, eval papers, new agentic patterns. When I think I’m done, I re-read the diff in the PR view one more time.

What I build with

TypeScript across the full stack since 2023. Python before that, 2013 to 2023. Comfortable in Rust (via Tauri), Swift (via Expo native modules), and Go (when patching CLI tools) when the work calls for it.

Background

Started freelancing in 2013. Reverse engineering APIs, scraping large datasets, pentesting, learning by doing. A few of those projects turned into businesses that crossed $100K ARR. The freelance life let me travel the world and still be with the people I love while I worked.

Spent 2015 to 2021 in LA collecting art and working with the street art scene: artist websites, e-commerce handling thousands of concurrent drop buyers, AR in Swift, print production and distribution. Ran collaborations with Nike, Adidas, Converse, NTWRK, and Beyond The Streets. One charity print drop raised over $80K in 24 hours.

That led straight into the AI wave. Same pattern, new medium. If I do something twice I write a script. Every tool I build goes public.

What I’m looking for

I ship fast, own projects end-to-end, and the things I build get used. 39 repos, 5 npm packages, 23 upstream PRs merged, 9 more open. I’ve built systems under real load (drop commerce with thousands of concurrent buyers, bot protection, real-time inventory).

What I haven’t done is sit inside an engineering org with code review, on-call, and sprint cycles. I want that next. Most interested in small teams building developer tools, devex, mobile, or AI tooling. Those are the spaces where I’m sharpest and where the habits above add up.

Education

B.S. Computer Science, Long Island University, 2016

- Ray