[about.ray]
RSS FeedHi, I'm Ray. Developer tools engineer in NYC, building since 2013. CLIs and build tooling. Most of my projects started as a bug somewhere upstream or a task I found myself doing too often. When I hit a bug I try to find the cause at the source, file the PR, and keep a patch around so my projects don't wait on review. More on how I'm set up.
63 PRs merged across 12 repos · 36 to expo · 70 patches · 11 npm packages
[merged.upstream]
63 PRs merged into projects I don't maintain.
- expo/expo · 36 PRs
- make docs data generation fail loudly instead of shipping empty files #47691
- print the real
xcodebuilderror whenexpo run:iosfails, instead of a truncated log #47748 - fix the
expo-dev-menumacOS build against react-native-macos's olderRCTDevMenusurface #47693 - guard a dev-only React Native call so
expo-dev-launchercompiles in Release again #47688 - fix two dead docs mapping entries and report every failure, not just the first #47670
- regenerate 32 stale docs API data files so local docs stop showing old content #47663
- silence the Xcode every-build warning on the
EXUpdatespodspec #47622 - drop the deep import warning baked into the LogBox web bundle #47772
- stop
workspace:*shipping in the published canary tarballs for scoped packages #45403 - PersistentFileLog read-race fix that flaked expo-updates CI #43958
- make five auto-firing scheduled workflows fork-safe #45782
- gate 15 more workflows on the upstream repo, finishing the fork-safety sweep #46050
- skip 13 secret-gated workflows on forks #45859
- add
testIDandaccessibilityLabeltoNativeTabs.Triggerso tests can find tabs and screen readers can read them #47472 -
strokeBordermodifier so a border can be dashed and follow the shape #47426 -
accessibilityAddTraitsandaccessibilityRemoveTraitsso VoiceOver announces the right role #47387 - redaction modifiers for skeleton loading and privacy-sensitive views #47269
-
Imagewas droppingfont,dynamicTypeSize, andresizable, so SF Symbols never scaled #46714 -
Hostmodifiers did nothing on iOS, one missing Swift field #45872 -
scrollPositionandidso JS can read and set where aScrollViewsits #44652 -
font({ textStyle })so text scales with Dynamic Type, all 11 styles #46007 -
dynamicTypeSizemodifier to clamp how far text grows #46540 - scrollTargetBehavior and scrollTargetLayout for snap paging #43955
-
fontwas losing scaling and weight on nested<Text>runs #46509 -
textContentTypeso text fields work with iOS keychain autofill #44548 - SwiftUI Alert component for @expo/ui #45700
- defaultScrollAnchor so chat UIs drop the scaleEffect(y: -1) flip #43914
- defaultScrollAnchorForRole for per-role scroll anchors #43923
-
imageScaleso SF Symbols size relative to the text around them #46774 -
accessibilityInputLabelsto set the phrases Voice Control listens for #46661 -
clipShapeandmaskdrew a rectangle for every shape but circle and rounded #43158 - textInputAutocapitalization without forcing an ASCII keyboard #44547
-
accessibilityIdentifierso XCUITest can find a view #46556 -
accessibilityHiddento hide decorative views from VoiceOver #46579 -
accessibilityElementto group a subtree into one VoiceOver stop #47156 - per-axis scaleEffect accepting { x, y } #43228
- get-convex/better-auth · 5 PRs
- shadcn-ui/ui · 5 PRs
- official TanStack Start dark mode guide, replacing three stale PRs #10396
- strip the raw <ComponentsList> tag from copy-to-markdown output #9484
- notFoundComponent on the Start templates to silence the Router warning #10369
- fix llms.txt 404s and backfill missing routes #10337
- register the @ramonclaudio-coderabbit registry in the official directory #9331
- better-auth/better-auth · 3 PRs
- facebook/hermes · 3 PRs
- react/react-native · 3 PRs
- fuma-nama/fumadocs · 2 PRs
- withastro/compiler-rs · 2 PRs
- TanStack/db · 1 PR
- fix the stale example todo app link in the README #17
- oven-sh/bun · 1 PR
- typed decompress option for fetch, no more @ts-ignore #21855
- rorkai/App-Store-Connect-CLI · 1 PR
- Mac App Store screenshot support for the asc CLI #784
- napi-rs/napi-rs · 1 PR
- respect --cross-compile when host matches target, fixing glibc breaks on Vercel and Lambda #3189
[shipped]
- convex-revenuecat · TypeScript · Convex
Convex component that mirrors RevenueCat subscription state. Webhook and REST sync with lifecycle hooks for entitlement transitions.
21,500+ total downloads · Convex Components Directory
- vexpo · Expo SDK 57 · Convex · Better Auth · Resend
Mobile sibling of tanvex. iOS starter wiring Expo, Convex, Better Auth, and Resend. Email + password, OTP, Apple Sign In, push notifications, universal links, profile uploads, full-text search, OTA updates, EAS submit and workflows. create-vexpo scaffolds it, then the vexpo CLI provisions Convex, Apple, EAS, and Resend, so you go from new project to TestFlight in one afternoon. My mobile dogfood, where I hit the Expo, React Native, and Hermes edge cases I file upstream.
7,200+ total downloads · @ramonclaudio/vexpo + create-vexpo on npm
- tanstack-cn · TanStack Start · Vite 8 · Tailwind v4
CLI scaffolder (bun create tanstack-cn my-app) and shared runtime package, same shape as shadcn's. Vite 8 Rolldown+Oxc, Tailwind v4 and shadcn/ui base-luma on Base UI, Oxlint+Oxfmt instead of Radix, ESLint, and Prettier.
1,300 total downloads across tanstack-cn and create-tanstack-cn
- tanvex · TanStack Start · Convex · Better Auth
tanstack-cn extended with Better Auth and Convex, running on latest majors. My web dogfood, where I reproduce edge cases for TanStack, Convex, and Better Auth PRs. SSR auth, email OTP, rate limiting, one-command setup.
- ccbase · TypeScript · Bun · SQLite
Local log indexer. Parses Claude Code's session directory into SQLite with full-text search across every project, plus a dashboard over the result.
SQLite full-text search · stays local
- seetree · Zig · CLI · TUI
Terminal tree viewer written in Zig. Tails Claude Code's JSONL session logs and lights up files as they get read, written, edited, or deleted. ~200K binary, on Homebrew and npm.
~200K binary · Homebrew + npm
- gitbar · Tauri · Rust · TypeScript · React
Menubar GitHub dashboard built with Tauri. PRs, issues, repos, and activity in one window.
~5MB binary
- counter · Expo · Convex · ElevenLabs · Firecrawl
My ElevenHacks Season 1 submission. Voice AI with three modes: research products, live negotiation coaching, and practice against an AI salesman. ElevenLabs agents plus Firecrawl search.
- dreamseeker · Expo · Convex · RevenueCat
My RevenueCat Shipyard 2026 submission. Goal-achievement app: break goals into daily micro-actions, track with streaks and XP, share progress to a community feed.
[stack]
- Desktop + CLI. Bun for CLIs, compiled to single-file binaries when shipping. Tauri
for menubar apps (
gitbar). - Mobile. React Native apps on Expo, canary.
@expo/ui+expo-glass-effect, native-first (no NativeWind). Convex, Better Auth, RevenueCat underneath. Six apps on the same skeleton. - Backend. Convex for everything. Better Auth via
@convex-dev/better-auth. Resend via@convex-dev/resend. RevenueCat via my ownconvex-revenuecatcomponent. - Web. TanStack Start + Vite 8 + Base UI + shadcn + Bun + oxlint/oxfmt for new work. Next 16 for marketing surfaces. Astro for this one.
- Local tooling. Nine Claude Code plugins in
skills. Session handoff between agents inhandoff. SQLite index over~/.claude/inccbase.seetreeis Zig, no external deps, ~200K binary.
[recent.writing]
-
Building seetree: A terminal tree viewer and Claude Code companion written in Zig
A live tree for Claude Code in Zig. Lights up files as they're read, written, edited, or deleted.
-
Dark Mode in TanStack Start with shadcn (and the PR)
Updated:shadcn documents dark mode for Next.js, Vite, Remix, and Astro. TanStack Start was missing. I opened a PR. It merged.
-
Building convex-revenuecat: Server-Side Entitlements for Convex
I needed server-side entitlement checks in my Convex app. No component existed. So I built one.
-
Building Gitbar: A Menubar GitHub Dashboard
I got tired of opening 4 GitHub tabs to answer one question. So I built a menubar app that answers it in one glance.
-
Hello, World!
Hello, I'm Ray.