Rosebud / May 2025 – Present

Helping people
reflect.

Senior Engineer at an AI journaling app for reflection and personal growth. Selected from 300 candidates.

Visit Rosebud ↗
PlatformsiOS · Android · Web
FocusAI + product engineering
ScopeIdea to release

From the first question
to the release.

Ownership with a plan

I turn product goals into clear specs, scope, and deadlines. I organize milestones in Notion around quarterly objectives and carry the work through implementation, code review, and release.

Decisions backed by evidence

I prototype with design in Figma and Paper, share work early, and refine it with feedback. Mixpanel events and BigQuery analysis help me understand adoption and decide what to improve.

Production is part of the work

I participate in the engineering on-call rotation, investigate issues in Sentry, and verify fixes with production evidence. I ship native and web releases and work toward feature parity.

Less time waiting for checks

I split TypeScript and Jest checks across runners, moved test transpilation to SWC, and improved cache handling. In October 2026 benchmarks, required checks averaged 10m15s before and 5m41s after with cold caches, across five runs per version. These timings exclude end-of-job cache saving.

More context for
reflection.

Chat, journaling, and memory

I build streamed AI chat, image attachments, signup personalization, and visible feedback when the AI uses memory tools. I improved reflection and psychology generation with validation, fallback models, and response feedback.

Voice that survives interruptions

My work includes ElevenLabs transcription, background recording, transcript recovery, spoken replies, and draft protection. These details help people keep their thoughts when a session is interrupted.

Providers and retrieval

I work with the Vercel AI SDK for streaming, tool calls, and structured responses. I centralized Claude model routing and removed unused memory retrieval that caused extra calls and timeouts.

One product,
across platforms.

A shared TypeScript monorepo

React Native and Expo power iOS and Android. Next.js powers the customer-facing web app and API routes. Shared code and packages live in a pnpm and Turborepo monorepo.

Native when it matters

I build custom Expo modules in Swift and Kotlin for chat composition, keyboard focus, scrolling, and accessible touch targets. I also improve notification routing when the app starts from a notification. I handle Expo upgrades, build automation, beta feedback, and releases for both platforms.

The data behind the experience

The wider system uses Firestore for app data, Pinecone for journal retrieval, persistent AI notes for long-term memory, and Redis-backed memory caching alongside provider prompt caching. PostgreSQL tracks AI usage and costs; BigQuery and dbt support the data warehouse.

Several AI providers

The product uses OpenAI, Anthropic, and Google models, including integrations through Amazon Bedrock and Vertex AI. This context shapes how I work on model routing, reliability, and user-facing AI features.

The details make
the product.

Privacy and account safety

I took biometric protection from proposal to release with Face ID, fingerprint authentication, and automatic locking. I also hardened account deletion with activity checks and progress tracking.

Subscriptions and exports

I work on subscription upgrades, usage, payment recovery, and analytics with RevenueCat and Stripe. I built shared web and mobile exports for journals, drafts, goals, and reports.

Reflection beyond the chat

My work includes the Gratitude Challenge, the Wrapped 2025 year-in-review, mindfulness session tracking with HealthKit, and native design system documentation.

Agentic engineering

I use reusable AI skills, automated routines, independent review, and device QA in my daily development workflow. The workflow page explains how I organize that work.

The working stack.

Mobile & native

React NativeExpoSwiftUIKitSwiftUI with Expo UIExpo WidgetsKotlinAndroid ViewsExpo ModulesNew ArchitectureHermesExpo RouterReanimatedFlashListHealthKit

Web & interfaces

TypeScriptReactNext.jsNext.js API routesNode.jsVitepnpmTurborepoMonoreposTailwind CSSRadix UIshadcn/uiTiptapZustandReact Intl

AI & voice

Vercel AI SDKZodOpenAIOpenAI Realtime APIAnthropicGoogle GeminiAmazon BedrockVertex AIGroqxAIOpenRouterElevenLabsWhisperDeepgramPinecone

Data & analytics

FirebaseFirestoreSupabasePostgreSQLRedisUpstashBigQuerySQLdbtMixpanelSentryAppsFlyer

Releases & payments

EAS BuildEAS SubmitEAS UpdateEAS WorkflowsFastlaneRubyApp Store ConnectGoogle Play ConsoleTestFlightGitHub ActionsVercelRevenueCatStripe

Testing & QA

JestTesting LibraryJUnitPlaywrightMaestroArgentStorybookXcodeAndroid StudioiOS SimulatorAndroid Emulator

Agentic development

Robust AgentsClaude CodeCodexCursorGrokConductorMCPContext7Reusable skillsAutomated routinesRemote simulatorsTailscaletmux

Product & collaboration

NotionFigmaPaperSlackGitHubLoomDiscordTodoistClear specsMilestone planningEarly demosProduct analytics
Next / Agentic development ↗Complete resume ↗
Atmosphere
Atmosphere

Moving background and subtle signal interference.