[about.ray]
RSS FeedI'm Ray. 13 years writing code. When a dep breaks, I fix it at the source and patch my apps so I'm never blocked. I also drink way too much coffee. Sey beans, V60, 1Zpresso ZP6, full nerd mode (I go deeper here).
40 repos · 28 PRs merged upstream · 7 npm packages · ~6,800 total downloads
Every merged PR shipped as a drop-in patch first. Bun, npm, pnpm, Yarn.
[shipped]
- ccbase · TypeScript · Bun · SQLite
Local analytics dashboard, productivity tracker, conversation viewer, and searchable session history for Claude Code.
200 total downloads
- 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, save inspiration to community pin boards.
- convex-revenuecat · TypeScript · Convex
Convex component that mirrors RevenueCat subscription state. Webhook and REST sync with lifecycle hooks for entitlement transitions.
3,767 total downloads · Convex Components Directory
- gitbar · Tauri · Rust · TypeScript · React
Menubar GitHub dashboard built with Tauri. PRs, issues, repos, and activity in one window.
~5MB binary
- coderabbit-shadcn-registry · TypeScript · React
shadcn registry for CodeRabbit API integration, with framework-agnostic client, storage adapters, and React components.
listed in shadcn/ui registry
- tanstack-cn · TanStack Start · Vite 8 · Tailwind v4
TanStack Start starter on the latest majors. Vite 8 Rolldown+Oxc, Tailwind v4 and shadcn/ui base-luma on Base UI, Oxlint+Oxfmt. No Radix, no ESLint, no Prettier.
657 total downloads (starter + create-tanstack-cn CLI)
[merged.upstream]
28 PRs merged to projects I don't maintain.
- expo/expo · 8 PRs
- textContentType modifier wrapping all 45 UITextContentType values to wire @expo/ui text fields into iOS keychain autofill (passwords, addresses, cards, OTP) #44548
- textInputAutocapitalization modifier so TextField can finally turn off auto-caps without forcing an ASCII keyboard layout #44547
- scrollTargetBehavior and scrollTargetLayout modifiers (iOS 17+) for paging and view-aligned scroll snapping #43955
- defaultScrollAnchorForRole modifier (iOS 18+) for per-role anchor overrides on initialOffset, sizeChanges, and alignment #43923
- defaultScrollAnchor modifier (iOS 17+) so chat UIs no longer need scaleEffect(y: -1) flips, reversed data, and inverted scroll indicators #43914
- per-axis scaleEffect accepting { x, y } for inverted-list message threads #43228
- ShapeType enum fix unblocking capsule and ellipse in clipShape and mask (they were silently rendering Rectangle) #43158
- PersistentFileLog serial queue race fix that was flaking expo-updates log tests in CI #43958
- get-convex/better-auth · 4 PRs
- four bugs causing stale auth state: cookie expiry comparison NaN-coerced because JSON.parse turned the Date into a string, stale cookies persisting after session expiry, getSessionData returning truthy {} after sign-out, and isAuthenticated true for {} and undefined sessions #218
- widened better-auth peer dep from exact 1.4.9 to >=1.4.9 <1.5.0 to cover 1.4.9 through 1.4.18, excluding 1.5.0 which moved createAuthEndpoint and createAuthMiddleware out of better-auth/plugins #245
- concurrent fetchAccessToken dedup via useRef so React 18 StrictMode and ConvexProviderWithAuth setAuth re-renders no longer fire N redundant /convex/token round-trips on page load #267
- dead react-dom peer dep removal that was generating warnings in bun and pnpm projects (zero react-dom imports across all 32 files in src/) #278
- napi-rs/napi-rs · 1 PR
- cross-compile regression in the v3 CLI rewrite where passing --cross-compile silently fell through to cargo build when host matched target on linux or darwin, linking against the host glibc instead of zig's pinned version. Broke deploys to Amazon Linux 2023 and Vercel build containers (glibc 2.34) when binaries were built on ubuntu-latest (glibc 2.39). The v2 fix from #1432 wasn't carried over during the v3 rewrite #3189
- shadcn-ui/ui · 5 PRs
- added the TanStack Start dark mode guide to the official shadcn docs, the fifth framework-specific guide after Next.js, Vite, Astro, and Remix. Built on ScriptOnce for the pre-hydration inline script, a React context for post-hydration state, suppressHydrationWarning on <html>, documentElement.style.colorScheme so native UI respects the theme, and a prefers-color-scheme listener for system mode. Superseded three prior PRs from other contributors (#7173, #7490, #9096) that each traded off a different piece. In review shadcn refactored the inline script string into a getThemeScript(storageKey, defaultTheme) function so custom provider props reach the pre-hydration pass #10396
- notFoundComponent on the Start root route in the start-app and start-monorepo templates, silencing the TanStack Router warning that fires on first load from phantom requests to /favicon.ico and Chrome DevTools' /.well-known/appspecific/com.chrome.devtools.json when neither notFoundComponent nor defaultNotFoundComponent is configured. JSX shape matches the existing 404 ErrorBoundary pattern from the react-router-app and react-router-monorepo templates (same container mx-auto p-4 pt-16 wrapper, same 404 heading and copy) so the ten-template suite stays consistent #10369
- fixed llms.txt 404s and backfilled missing routes so LLM crawlers can index the full docs site #10337
- raw <ComponentsList /> tag leaking into copy-to-markdown output on component pages #9484
- registered the @ramonclaudio-coderabbit shadcn registry in the official open source directory per #8892. The registry ships a framework-agnostic CodeRabbit API client, pluggable storage adapters (LocalStorage, Convex, Supabase, PostgreSQL, MySQL), and React components for developer activity reports #9331
- oven-sh/bun · 1 PR
- added the decompress property to the BunFetchRequestInit interface with JSDoc, removing the need for @ts-ignore when disabling response decompression in Bun fetch (the option already worked at runtime) #21855
- fuma-nama/fumadocs · 2 PRs
- fixed the TanStack Start template in create-fumadocs-app by wiring the vite-react plugin with the required customViteReactPlugin: true flag, configuring a custom NotFound component for TanStack Router, and bumping deps. Resolved four issues at once: vite-react plugin warning, missing custom 404 warning, module resolution errors during navigation, and React hydration errors from useMemo null references #2092
- prettier formatting fix that unblocked the changesets release PR #2093 for create-fumadocs-app@15.7.0 #2095
- rorkai/App-Store-Connect-CLI · 1 PR
- added Mac App Store screenshot support to the asc CLI. New --provider macos grabs the frontmost window of a running app by bundle ID via screencapture -l <windowID>, with the window ID coming from a Swift one-liner piped through swift - (no cgo, no extra binaries). New --device mac renders to the 2880x1800 APP_DESKTOP canvas without a device bezel, with optional title, subtitle, and background color overlays. Also fixed ASC_TIMEOUT being silently ignored for screenshots capture and frame, both now use ContextWithTimeout #784
- better-auth/better-auth · 3 PRs
- noop ./instrumentation via conditional exports for browser and edge runtimes, matching the shape ./async_hooks already uses. The dynamic import('@opentelemetry/api') in packages/core/src/instrumentation/api.ts threw synchronously on Convex's V8 isolate (bare specifiers rejected at resolve time via deno_core::resolve_import), so the .catch() in getOpenTelemetryAPI never ran and every withSpan call through to-auth-endpoints.ts and with-hooks.ts surfaced an uncaught error. The breaking pattern landed in #9111 and shipped in v1.6.6. @opentelemetry/api itself ships a noop proxy when no SDK is registered, so this is about dynamic-import-probe portability, not OTel runtime support. Unblocks the 1.6 migration for @convex-dev/better-auth consumers #9281
- added /change-password and /revoke-other-sessions to the atomListeners matcher so $sessionSignal fires after session-rotating endpoints. Without this, useSession() kept returning stale data after password changes because the client never re-fetched. Companion to get-convex/better-auth#329 which invalidates the Convex adapter's cached JWT on the same events #9087
- incorrect operationId in the password reset callback endpoint, plus forget-to-forgot cleanup across demo apps and tests #9072
- withastro/compiler-rs · 2 PRs
- switched linux-gnu builds from -x (zigbuild) to --use-napi-cross after #22 turned out to be insufficient. Zigbuild without an explicit glibc suffix falls back to zig's per-arch baseline (GLIBC_2.35 on x86_64, GLIBC_2.30 on aarch64 for zig 0.15), so the 0.1.7 binary still couldn't load on Vercel, Amazon Linux 2023, AWS Lambda, RHEL/CentOS 7, or Debian 10. --use-napi-cross downloads @napi-rs/cross-toolchain with a sysroot pinned to glibc 2.17, matching the pattern used by oxc, swc, canvas, lightningcss, and the official napi-rs/package-template. Verified on a fork CI run plus a live Vercel preview deploy with experimental.rustCompiler: true. Shipped in @astrojs/compiler-rs@0.1.8 #25
- first-attempt glibc compat fix, added -x to x86_64-unknown-linux-gnu. Turned out to be insufficient, superseded by #25 #22
- TanStack/db · 1 PR
- corrected the README link to the example todo app, which pointed at a stale path. Now resolves to examples/react/todo so first-time visitors landing on the repo can actually open the example. Was PR #17 in the repo (early days) #17
[recent.writing]
-
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.