[about.ray]
RSS FeedHi, I'm Ray. Developer tools engineer in NYC, solo since 2013. CLIs, scaffolders, a Zig tree viewer for Claude Code, a Tauri menubar GitHub dashboard. Most of my projects started as a bug somewhere upstream or a task I found myself doing way 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 what I'm shipping now and how I'm set up. Also drink way too much coffee. Sey beans, V60, 1Zpresso ZP6, full nerd mode (I go deeper here).
60 PRs merged across 12 repos · 34 to expo · 70 patches · 10 npm packages
[merged.upstream]
60 PRs merged into projects I don't maintain.
- expo/expo · 34 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
- 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 - stop
workspace:*shipping in the published canary tarballs for scoped packages #45403 -
font({ textStyle })so text scales with Dynamic Type, all 11 styles #46007 -
dynamicTypeSizemodifier to clamp how far text grows #46540 - PersistentFileLog read-race fix that flaked expo-updates CI #43958
- 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
- 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
- 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
- fuma-nama/fumadocs · 2 PRs
- withastro/compiler-rs · 2 PRs
- react/react-native · 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]
- seetree · Zig · CLI · TUI
Live tree viewer for Claude Code, written in Zig. Lights up files as Claude reads, writes, edits, or deletes them. ~200K binary, on Homebrew and npm.
~200K binary · 319 total downloads
- ccbase · TypeScript · Bun · SQLite
Local analytics dashboard, productivity tracker, conversation viewer, and searchable session history for Claude Code.
282 total downloads
- gitbar · Tauri · Rust · TypeScript · React
Menubar GitHub dashboard built with Tauri. PRs, issues, repos, and activity in one window.
~5MB binary
- convex-revenuecat · TypeScript · Convex
Convex component that mirrors RevenueCat subscription state. Webhook and REST sync with lifecycle hooks for entitlement transitions.
12,561 total downloads · Convex Components Directory
- 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.
- vexpo · Expo SDK 56 · 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.
5,773 total downloads · @ramonclaudio/vexpo + create-vexpo on npm
- 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.
- 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,249 total downloads across tanstack-cn and create-tanstack-cn
[stack]
- 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. - Web. TanStack Start + Vite 8 + Base UI + shadcn + Bun + oxlint/oxfmt for new work. Next 16 for marketing surfaces. Astro for this one.
- Backend. Convex for everything. Better Auth via
@convex-dev/better-auth. Resend via@convex-dev/resend. RevenueCat via my ownconvex-revenuecatcomponent. - Desktop + CLI. Tauri + Rust for menubar apps (
gitbar). Bun everywhere else, compiled to single-file binaries when shipping. - Claude Code infra. Nine plugins in
skills. Session handoff inhandoff. SQLite dashboard over~/.claude/inccbase. Zig 0.16 atstd_optionslevel inseetree.
[recent.writing]
-
Building seetree: A tiny 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.