Full-Stack Software Engineer

Jay Heo

Building streaming experiences for web, mobile, and 30,000 feet in the air.

I build Ecco's cross-platform streaming app across web, mobile, and an airline in-flight entertainment build — frontend in React and React Native, backend in Go and Node. I built the analytics pipeline that surfaced an AI Search discoverability problem, then moved the feature into the navigation and more than doubled repeat engagement. I also led the IFE build now in front of 18 airlines including Lufthansa and Etihad.

Scroll Down

Experience

Where I've worked and what I actually shipped.

Ecco, Inc.

Software Engineer

Apr 2025 – Present

Irvine, CA

Building Ecco's cross-platform streaming app across web, mobile, and an airline in-flight entertainment build.

  • Moved AI Search, the product's most differentiated feature, into a permanent navigation tab on mobile web and the mobile app, after event tracking I built showed how few users were finding it. First-month reach went from 20% to 25% of active users, repeat engagement more than doubled (24% to 54% returning 3 or more times), and daily core-area engagement climbed from 9.5% to 34% — holding after marketing spend dropped to zero.
  • Ported the web app to airline in-flight entertainment hardware (an old Qt browser with barely any CPU or memory to spare) and built an MQTT-based remote so a separate device could drive it. Demoed at the Aircraft Interiors Expo, leading to follow-up meetings with 18 airlines including Lufthansa, Etihad, and Saudia.
  • Led the React Native upgrade from 0.76 (past end-of-support) to 0.84 alongside React 19 and Expo 55, driven by Android 16 KB page-size requirements for Google Play and a native dependency stack (expo-video, FlashList v2, Reanimated v4) moving New-Architecture-only — using ~490 existing tests to catch regressions across iOS and Android.
  • Rebuilt voice search around a proper speech-recognition state machine — stable vs. interim transcripts, intentional stops vs. dropped connections, rate-limited auto-restart — driving a 30% increase in searches after launch.
  • Diagnosed and fixed a rare race condition in the video feed that only reproduced under rapid scrolling, where the index from user events and the one TanStack Virtualizer managed internally could drift apart and play the wrong video. Fixed by centralizing feed state in Zustand.
  • Built the Go backend and Redis-based session logic for the analytics event pipeline (events that require a user_id vs. ones fired pre-login), and shipped the app's first monetization path: a Stripe subscription flow covering checkout, subscription status, and webhook-driven entitlements.
ReactReact NativeGoNode.jsMQTTZustandTanStack VirtualizerStripeRedisAmplitude

ShineResumes

Team Project

Full-Stack Engineer

Jul 2024 – Nov 2024

Tustin, CA

  • Migrated the backend from REST to GraphQL/Apollo so the frontend fetches exactly what each resume section needs instead of over-fetching across multiple endpoints.
  • Built the AI resume generation flow — calculating available line space before generation, with keyword tracking so bullets don't repeat across a resume.
  • Moved resume file storage off the database and onto S3 with pre-signed URLs for previews and downloads.
Next.jsGraphQLApolloPrismaAWS S3OpenAI

Preps AI

Y Combinator S2024 — Final Round

Front-End Engineer & Project Lead

Dec 2023 – Jun 2024

Fullerton, CA

  • Cut AI response latency from 5–10 seconds to near real-time: the original pipeline recorded full audio, transcribed it with Whisper, then called the OpenAI API. Rebuilt it to stream audio over WebSockets in chunks and stream responses back token by token, after benchmarking faster inference like Groq.
  • Built the real-time mock interview flow with Next.js dynamic routes talking to the AI backend over WebSockets, and split coding questions from general prompts before they hit the AI so responses came back more relevant.
  • Coordinated project timelines and sprint planning with a Kanban workflow to hit each milestone ahead of Y Combinator's application deadline.
Next.jsWebSocketOpenAIWhisperZustand

Mustadd

Contract

Software Engineer

Aug 2022 – Aug 2023

Los Angeles, CA

  • Built a portfolio view pulling a user's on-chain holdings and calculating average cost basis, current value, and unrealized gains/losses against live prices — caching CoinGecko responses and polling on refresh to stay under a low API rate limit.
  • Added QR-code actions tied to the user's wallet address, with options depending on what the scanned code was.
React NativeExpoTypeScriptCoinGecko API

Featured Projects

A selection of things I've built end to end — from AI products to mobile apps.

ShineResumes

ShineResumes

An app that generates resumes tailored to a job description in seconds — AI generation flow with line-space calculation, keyword dedup, and S3-backed file storage.

TypeScriptNext.jsGraphQLExpress.jsPrismaAWSDocker
Preps AI

Preps AI

Real-time AI mock interview platform for software engineers — YC S2024 final round. Streams audio and AI responses over WebSockets for near real-time conversation.

TypeScriptNext.jsZustandWebSocketWeb Speech API
PDF Uploader

PDF Uploader

Upload a PDF and listen to it — text-to-speech powered by PlayAI, with Supabase storage and dynamic routes per document.

TypeScriptNext.jsTailwindSupabasePlayAI
Giverr

Giverr

Social media app for sending & receiving gifts — Lottie-animated onboarding, SMS auth with Firebase, and Firestore-backed user data.

TypeScriptReact NativeExpoLottieFirebaseFirestore
Mellow

Mellow

Single-page product landing with infinite scroll animation and Git LFS-managed media assets.

Next.jsTailwind AnimationGit LFS
Bags Trade Tracker

Bags Trade Tracker

Mobile app for tracking trades — built with React Query and tested with React Native Testing Library against a reverse-engineered API.

TypeScriptReact NativeExpoReact QueryRN Testing Library

Technical Skills

The stack I work with day to day.

Languages

JavaScript
TypeScript
Go
Python
Java
SQL

Frontend & Mobile

React
Next.js
React Native
Expo
Zustand
Redux
Context API
Tailwind CSS
Framer Motion
TanStack Virtualizer

Backend & Infra

Node.js
Express
GraphQL
Apollo
REST APIs
WebSocket
MQTT
PostgreSQL
Prisma
Redis
AWS S3
Stripe

Tools & Platforms

Docker
AWS
Firebase
Datadog RUM
Amplitude
GitHub Actions
NGINX
Postman
Figma
Jira

About Me

Full-stack engineer who cares about what happens after the code ships.

I'm a full-stack engineer at Ecco in Irvine, where I work across the streaming app's React web client, React Native mobile app, and Go backend — plus an in-flight entertainment build that runs on airline seat-back hardware at 30,000 feet.

The work I'm proudest of started with instrumentation: I built the analytics event pipeline, saw in the data that almost nobody was finding AI Search, and moved it into a permanent navigation tab — repeat engagement more than doubled and held after marketing spend went to zero.

Before Ecco, I led frontend at Preps AI, which reached the final round of Y Combinator's S2024 batch; built the AI resume generation flow at ShineResumes; and shipped a React Native crypto portfolio app at Mustadd.

I studied Sociology at UC Santa Barbara with a Technical Management Program certificate, trained at CodeSmith's software engineering immersive, and hold the IBM AI Developer Professional Certificate. Fluent in Korean. Off the clock: golf, pickleball, and a long-running search for the best tacos in Orange County.

Jay Heo

Full-Stack Software Engineer

Get In Touch

Have a role or a project in mind? I'd love to hear from you.

Get in Touch