Projects
Level
Feb 2026 — Present
Local-first iOS app that remembers which floor you parked on — geofencing, altitude-based prediction, and an iOS widget, all without a server.
- React Native (Expo) with Expo Router, NativeWind, Reanimated, and a custom component library documented in Storybook
- On-device SQLite database via Drizzle ORM with type-safe queries, migrations, and MMKV for fast widget sync and background state persistence
- Background geofencing and altitude collection via expo-task-manager — detects arrivals, prompts for floor entry, and sends local notifications
- Custom floor prediction algorithm: rolling-window altitude smoothing, per-garage calibration from historical entries, and confidence scoring
- SwiftUI iOS widget (small, rectangular, inline, circular) sharing data through App Groups — displays parked floor on home and lock screen
- Mapbox-powered map for managing multiple home locations with custom labels, colors, icons, and geofence radii
React NativeExpoTypeScriptSQLiteDrizzleSwiftUIMapboxGeofencingNativeWindStorybook
- React Native (Expo) mobile app with Mapbox maps, Zustand + TanStack Query state management, and Reanimated/Lottie animations
- React web app with TanStack Router, Radix UI, and Storybook — sharing generated TypeScript types via openapi-fetch
- Flask API with SQLAlchemy, GeoAlchemy2 for geospatial queries, Celery workers for async badge evaluation, and real-time WebSocket events via Flask-SocketIO + Redis pub/sub
- Google Places API and Foursquare API integration with caching for place details, search, and discovery
- AWS infrastructure (ECS, RDS MySQL, ElastiCache Redis, S3, ALB) managed with Terraform modules and deployed via GitHub Actions CI/CD
- Full observability stack: Sentry error tracking, CloudWatch dashboards and alarms, Mixpanel analytics across mobile and backend
React NativeExpoReactFlaskSQLAlchemyRedisCeleryMapboxAWSTerraformSentryMixpanel
(This website)
Jan 2026 — Present
Portfolio and engineering blog built with Astro, styled with Tailwind CSS, and focused on writing up real problems + solutions as I build.
- Astro Content Collections for typed frontmatter and blog routing
- Header images + Open Graph/Twitter cards generated via astro:assets image optimization
- Responsive, animated layout with shared project data + related projects surfaced on blog posts
- Markdown blog posts with embedded images and project links
AstroTypeScriptTailwind CSSastro:assetsContent Collections
- React web app and separate Teams portal built with Rsbuild, Radix UI/shadcn, Zustand + TanStack Query, Tiptap rich-text editing, Stripe payments, and Stream Chat messaging
- React Native (Expo) mobile app with NativeWind styling, Mapbox maps, RevenueCat subscriptions, LaunchDarkly feature flags, and Mixpanel analytics
- Express API with Mongoose/MongoDB, migrated to Elysia.js with Redis caching — Clerk auth, Stripe/RevenueCat webhooks, and Treblle API monitoring
- Dedicated AI microservice powered by Google Gemini and LangChain for college suggestions, AI chat assistant (Socket.IO), and scheduled recommendation pipelines
- Trigger.dev background jobs for daily email digests, roster batch processing, college data sync, and Brevo CRM integration
- Hybrid deployment: Fly.io (API + AI services with auto-scaling), Netlify (web apps), and AWS (S3, CloudFront, Route 53), all managed with Terraform and GitHub Actions CI/CD
ReactReact NativeExpoTypeScriptExpressElysia.jsMongoDBRedisStripeStream ChatGeminiLangChainTrigger.devFly.ioNetlifyAWSTerraform