{"schema":"discover.me/profile.v1","id":"f75e4b59-267b-45a4-8c4d-3cba79c7d558","handle":"jiun","updatedAt":"2026-06-05T18:41:46.505Z","profile":{"id":"f75e4b59-267b-45a4-8c4d-3cba79c7d558","handle":"jiun","name":"Jiun Shin","headline":"Software engineer in London building React Native & Expo developer tooling — open to full-time roles, contract work, and collaboration.","bio":"I'm a software engineer in London working on React Native and Expo tooling — the layer that sits between the app and the device.\n\nAcross five years as a React Native engineer at early-stage startups, I've taken consumer mobile products 0→1 and 1→10: driving one from 1K to 10K DAU (30K MAU), cutting a main-screen load from 3s to 0.5s, and shipping the MVP that helped close a $150K seed round. Most recently I architected a cross-platform health-tracking app as a TypeScript monorepo — 95%+ code reuse across iOS, Android, and web — and led a team of five.\n\nAlongside product work I build developer tooling. My main open-source project is serve-emu: the `npx serve` of Android devices. It spawns scrcpy on a booted emulator or attached phone, pipes H.264 frames over a WebSocket, and decodes them in the browser with WebCodecs, so you can stream and drive a real device from a browser tab — built for agentic mobile QA with tools like Claude, Codex, and Cursor, with REST input APIs, emulator GPS/route control, and logcat-over-SSE.\n\nI also publish React Native libraries (react-native-focus-guide, a dependency-free tooltip and onboarding overlay) and contribute upstream — including merged fixes to Expo's expo-notifications and expo-task-manager R8 packaging, EvanBacon's serve-sim, and Spacedrive's spacebot.\n\nI'm open to full-time roles, contract work, and collaboration on developer tooling.","location":"London, UK","avatarUrl":"https://cdn.discover.me/avatars/6vLS18PuUITNieyXhhuKErqgkWonMqts/8e8e1052-3f99-4798-b82b-36dfc63926d7.png","availability":"Open now to full-time roles, contract/freelance work, and collaboration on React Native / Expo developer tooling. London-based.","status":"listed","visibility":"public","viewCount":180,"uniqueViewCount":66,"listedAt":"2026-06-05T18:41:46.505Z","updatedAt":"2026-06-05T18:41:46.505Z"},"links":[{"id":"c33f1730-9879-4844-aa83-b27b3aeca8c1","label":"GitHub","url":"https://github.com/jiunshinn","sortOrder":0,"verified":true},{"id":"790c9952-8510-44ff-9722-464870842de2","label":"Email","url":"mailto:jiun.shin.uk@gmail.com","sortOrder":1,"verified":false},{"id":"dc2351e2-e576-4c41-930a-019eda50d865","label":"LinkedIn","url":"https://www.linkedin.com/in/jiunshin/","sortOrder":2,"verified":false}],"projects":[{"id":"d1ec98e9-0d1b-4113-a7ad-31bc9aa66989","name":"serve-emu","url":"https://github.com/jiunshinn/serve-emu","description":"The `npx serve` of Android devices. Spawns scrcpy on a booted emulator or attached phone, opens an adb forward tunnel, pipes H.264 frames over a WebSocket, and decodes them in the browser with WebCodecs — so you can stream and drive a real device from a browser tab, locally, over LAN, or tunneled anywhere. Built for agentic mobile QA with tools like Claude, Codex, and Cursor. Exposes agent-friendly REST input APIs (tap/swipe/text/screenshot), emulator GPS + route playback (GPX/GeoJSON/KML), and logcat-over-SSE alongside the live view.","proof":"Published on npm as `serve-emu` — ~410 downloads in the last 30 days. Apache-2.0, written in TypeScript.","status":"v1, actively developed","tags":["TypeScript","scrcpy","WebCodecs","WebSocket","Android","adb","developer-tools","agentic-QA"],"sortOrder":0,"images":[]},{"id":"da47f424-527e-48ac-b4d2-9d64390cf8ac","name":"react-native-focus-guide","url":"https://github.com/jiunshinn/react-native-focus-guide","description":"A React Native library for interactive focus guides and tooltips — highlight any component with a dimmed overlay and anchor a tooltip to it, for onboarding flows and feature walkthroughs. Measures real tooltip size for accurate anchoring, supports 11 anchor positions with automatic on-screen clamping/flipping, is reactive to orientation, split-screen, and web resizing, and is Fabric / new-architecture safe. No native dependencies — pure JS across iOS, Android, and Web (via react-native-web).","proof":"Published on npm as `react-native-focus-guide` v0.2.0 — ~250 downloads in the last 30 days.","status":"v0.2.0, maintained","tags":["React Native","TypeScript","onboarding","tooltip","iOS","Android","Web"],"sortOrder":1,"images":[{"id":"791ea19c-f4ba-4256-9897-0c72b8581429","url":"https://cdn.discover.me/images/6vLS18PuUITNieyXhhuKErqgkWonMqts/025a7ebe-b462-4931-b54a-7459edae4b5a.png","alt":"react-native-focus-guide highlighting a UI element with a dimmed overlay and an anchored tooltip on a mobile screen","sortOrder":0}]},{"id":"e5633ab4-9871-456b-bd1a-030cf91849d2","name":"voice-recognition-react-native","url":"https://github.com/jiunshinn/voice-recognition-react-native","description":"A React Native library that brings native speech recognition to iOS and Android behind a single JS API — start/stop recognition and subscribe to results and errors via listeners. Wraps the platform speech APIs with native modules (Kotlin on Android).","proof":"Published on npm as `voice-recognition-react-native` v0.1.2 — ~25 downloads in the last 30 days.","status":"v0.1.2, published","tags":["React Native","Kotlin","Swift","speech-to-text","iOS","Android"],"sortOrder":2,"images":[]}],"skills":[{"id":"82ce2caf-f5f3-46fa-87e1-31f722846ea9","name":"React Native","category":"Mobile","context":"Publish and maintain RN libraries (react-native-focus-guide, voice-recognition-react-native) and contribute to the RN/Expo ecosystem.","sortOrder":0},{"id":"b1f77587-3eda-4182-86bd-cf51c340a3bc","name":"Expo","category":"Mobile","context":"Merged upstream fixes to expo-notifications and expo-task-manager wiring consumerProguardFiles so bundled R8 keep rules ship to consumers.","sortOrder":1},{"id":"34bfec44-a959-42cf-a8fa-de58a5c99c72","name":"TypeScript","category":"Languages","context":"Primary language for serve-emu and all published RN libraries.","sortOrder":2},{"id":"4d986c1a-e059-4029-8ebb-578bb5524c32","name":"WebCodecs & WebSocket streaming","category":"Web / Media","context":"serve-emu pipes H.264 frames over a WebSocket and decodes them in-browser with WebCodecs, with SPS/PPS replay for mid-stream joiners.","sortOrder":3},{"id":"0723f2fb-7c46-4137-b537-52ef042976d9","name":"Android device tooling (scrcpy / adb)","category":"Mobile","context":"serve-emu drives emulators and real devices through scrcpy's control channel over adb, including AVD lifecycle and emulator geo/route control.","sortOrder":4},{"id":"4a67bf4f-58c3-49ff-9a4e-13bd513e9223","name":"Kotlin","category":"Languages","context":"Native Android modules for RN (voice-recognition-react-native) and Android R8/ProGuard packaging work upstream in Expo.","sortOrder":5},{"id":"ebd179fe-b98f-4ef4-8034-b28882c48b08","name":"Swift","category":"Languages","context":"Native iOS/macOS work across several apps and React Native iOS modules.","sortOrder":6}],"offers":[{"id":"9a58871e-abbc-4970-a04e-0f211af589b4","title":"Full-time engineering roles","description":"Open to full-time software engineering roles — especially in developer tooling, mobile (React Native / Expo), or anything close to the device and runtime layer. London-based and flexible on setup: remote, hybrid, or onsite. Reach me at jiun.shin.uk@gmail.com.","kind":"employment","availability":"open","availableFrom":null,"commitment":"full_time","locationMode":null,"priceLabel":null,"priceCents":null,"pricePeriod":null,"sortOrder":0},{"id":"14eb0249-d80a-4a19-aa30-3ecd341e2f7a","title":"Contract & freelance work","description":"Available for contract and freelance work: React Native / Expo apps and libraries, native iOS (Swift) and Android (Kotlin) modules, and developer-tooling builds like serve-emu. Flexible on location and engagement length — get in touch to scope it.","kind":"contract","availability":"open","availableFrom":null,"commitment":"flexible","locationMode":null,"priceLabel":null,"priceCents":null,"pricePeriod":null,"sortOrder":1},{"id":"bbe7983e-0eb4-4198-8176-dbaf7b4f0531","title":"Open-source collaboration","description":"Happy to collaborate on open-source developer tooling — especially React Native / Expo, device streaming and control, and agentic mobile QA. Open to contributions, co-maintenance, and building new tools in that space.","kind":"collaboration","availability":"open","availableFrom":null,"commitment":null,"locationMode":null,"priceLabel":null,"priceCents":null,"pricePeriod":null,"sortOrder":2}],"posts":[],"press":[],"experience":[{"id":"1b4e684f-58d2-43c4-92dd-1d2ae556dc6f","role":"Senior React Native Engineer","organization":"FutureworkLab","url":null,"description":"Architected a cross-platform health-tracking app (iOS, Android, web) as a TypeScript monorepo — 19 feature modules, 657 source files, 95%+ code reuse. Integrated 6+ native health platforms (Apple Health/HealthKit, Health Connect, Google/Apple Calendar, Pedometer) with background sync for passive data collection. Lead a team of five engineers, setting coding conventions and code-review practices. Based in Seoul, Korea.","startedAt":"2024-11-01T00:00:00.000Z","endedAt":null,"sortOrder":0},{"id":"c6aec894-efba-431f-88e2-a3b6be0f1796","role":"React Native Engineer","organization":"Sneakers","url":null,"description":"Core React Native engineer at an early-stage consumer startup. Drove DAU from 1K to 10K (30K MAU) by owning performance and UX end-to-end — map clustering and location preloading cut main-screen load from 3s to 0.5s and reduced drop-off by 90%. Built a React admin dashboard with automated analytics that cut the Growth team's daily reporting from an hour to five minutes. Seoul, Korea.","startedAt":"2024-01-01T00:00:00.000Z","endedAt":"2024-06-30T00:00:00.000Z","sortOrder":1},{"id":"e04b145f-41dd-4d5e-8577-57139e10b014","role":"Software Engineer","organization":"Gractor","url":null,"description":"Cut the main dashboard's render time from 60s to 3s using clustering in Nuxt.js for performance optimization. Seoul, Korea.","startedAt":"2022-10-01T00:00:00.000Z","endedAt":"2023-04-30T00:00:00.000Z","sortOrder":2},{"id":"ec034c02-d5c5-4325-a018-803105441d49","role":"React Native Engineer","organization":"Lighthouse","url":null,"description":"One of the first mobile engineers — took core app features from concept to production under tight timelines and shipped the MVP that helped close a $150K seed round. Helped scale the engineering team from 4 to 13, mentoring new engineers and establishing best practices. Gyeonggi, Korea.","startedAt":"2021-02-01T00:00:00.000Z","endedAt":"2022-10-31T00:00:00.000Z","sortOrder":3}],"education":[{"id":"c1c9943c-b3b6-42a5-ae8b-c58263636c66","institution":"National Institute for Lifetime Education","credential":"B.Eng. in Computer Engineering (Academic Credit Bank System)","url":null,"description":null,"startedAt":"2021-01-01T00:00:00.000Z","endedAt":"2024-12-31T00:00:00.000Z","sortOrder":0}],"verifications":[{"id":"48af3e92-6164-4da6-b534-dd9422062c74","subjectType":"github","subjectValue":"jiunshinn","sourceUrl":"https://github.com/jiunshinn","verifiedAt":"2026-06-08T02:12:11.854Z"}],"achievements":[{"id":"1ff8518c-e544-477d-b98e-10e569ef312e","kind":"open-source-contribution","source":"github","label":"Merged PR to expo/expo — consumerProguardFiles for expo-notifications","value":"PR #45974","sourceUrl":"https://github.com/expo/expo/pull/45974","badgeImageUrl":null,"occurredAt":"2026-05-19T00:00:00.000Z","verifiedAt":null,"verified":false,"sortOrder":0},{"id":"7f095ba0-c6ab-45af-9b53-8ecda3b1e41c","kind":"open-source-contribution","source":"github","label":"Merged PR to expo/expo — consumerProguardFiles for expo-task-manager","value":"PR #46029","sourceUrl":"https://github.com/expo/expo/pull/46029","badgeImageUrl":null,"occurredAt":"2026-05-21T00:00:00.000Z","verifiedAt":null,"verified":false,"sortOrder":1},{"id":"94fc1475-8f2e-42a5-a063-1aa203464093","kind":"open-source-contribution","source":"github","label":"Merged PR to EvanBacon/serve-sim — fix multiple preview instances","value":"PR #12","sourceUrl":"https://github.com/EvanBacon/serve-sim/pull/12","badgeImageUrl":null,"occurredAt":"2026-05-01T00:00:00.000Z","verifiedAt":null,"verified":false,"sortOrder":2},{"id":"f62e2ac1-5905-4dd2-a420-7a840d4753fc","kind":"open-source-contribution","source":"github","label":"Merged PR to EvanBacon/serve-sim — Node-runnable bin (npm install is enough)","value":"PR #8","sourceUrl":"https://github.com/EvanBacon/serve-sim/pull/8","badgeImageUrl":null,"occurredAt":"2026-05-01T00:00:00.000Z","verifiedAt":null,"verified":false,"sortOrder":3},{"id":"62afaba9-3f6e-4278-97f8-482ff6cc604c","kind":"open-source-contribution","source":"github","label":"Merged PR to spacedriveapp/spacebot — native Z.ai (GLM) provider","value":"PR #1","sourceUrl":"https://github.com/spacedriveapp/spacebot/pull/1","badgeImageUrl":null,"occurredAt":"2026-02-16T00:00:00.000Z","verifiedAt":null,"verified":false,"sortOrder":4},{"id":"583455ac-234e-40ea-8ceb-dd3bba1a663f","kind":"downloads","source":"npm","label":"serve-emu — npm downloads (30d)","value":"412","sourceUrl":"https://www.npmjs.com/package/serve-emu","badgeImageUrl":null,"occurredAt":"2026-06-05T18:35:45.796Z","verifiedAt":"2026-06-05T18:35:45.796Z","verified":true,"sortOrder":5},{"id":"2fdc623b-486e-40a0-886f-488f964e5a3e","kind":"downloads","source":"npm","label":"react-native-focus-guide — npm downloads (30d)","value":"250","sourceUrl":"https://www.npmjs.com/package/react-native-focus-guide","badgeImageUrl":null,"occurredAt":"2026-06-05T18:35:46.495Z","verifiedAt":"2026-06-05T18:35:46.495Z","verified":true,"sortOrder":6},{"id":"a6e81c61-d1d7-4769-983b-0a26f18345dd","kind":"downloads","source":"npm","label":"voice-recognition-react-native — npm downloads (30d)","value":"25","sourceUrl":"https://www.npmjs.com/package/voice-recognition-react-native","badgeImageUrl":null,"occurredAt":"2026-06-05T18:35:47.321Z","verifiedAt":"2026-06-05T18:35:47.321Z","verified":true,"sortOrder":7}]}