About me
Hello! I am Iha Shin.
I always have loved to code, so I became a software engineer.
I enjoy working with the Web, especially in the frontend area.
I am always looking for new things to learn, study, and try.
Techs I use & love
Experiences
Additional information is displayed when you click on each item.
Work Experiences
- DX Engineer @ PortOne
2022.10 ~PortOne is a SaaS company that provides various payment services.
As a DX engineer focused on the frontend, I was responsible for, but not limited to,
improving both internal and external developer experience.•JavaScript SDK Rework
- TypeScript
- Node.js
- SWC
- esbuild
Reworked the JavaScript SDK to improve performance, maintainability, and usability.
Previously, the PortOne JavaScript SDK was a single fat script, with jQuery dependency,
which resulted in poor loading performance and unnecessary overhead.I reworked the whole architecture with several priorities in mind like removing jQuery dependency
and lazy loading support per each functionality of the SDK, while following business requirements like IE11 support.To achieve this, I constructed a custom module system that works without any ESM support.
And I also configured a build system to transpile and bundle the core SDK and each functionality module,
utilizing modern tools like SWC and esbuild.•PortOne Analytics
- TypeScript
- React
- UnoCSS
- Framer Motion
- Relay
Involved in the development of a new analytics dashboard service for PortOne.
I contributed to several parts of the product like creating custom chart components with SVG and Framer Motion,
and integrating@defer
support for Relay to utilize concurrent features of React 18.The chart components are made to match with high-quality standards that our team requires,
focused on features like responsive design, animated transitions, and sticky axis labels.•Payment Bridge
- TypeScript
- SolidStart
- UnoCSS
Created a custom checkout UI that gets embedded in customers' websites.
Payment Bridge is a custom checkout UI that replaces the default checkout UI provided by payment gateways.
To prevent customers from refusing to purchase due to poor experience,
it is built with SolidStart to provide the best performance and UX.By utilizing features like streaming SSR and server RPC, it was possible to provide
a smooth checkout experience that handles about 300,000 requests per month.
- Backend Developer @ NutritionCourt
2021.10 ~ 2022.10NutritionCourt is an AI healthcare startup that creates a personalized meal plan based on a user's health data.
After previously leaving the company, I rejoined the team as a backend developer
to fill the gap left by the departure of the previous backend developer.Despite being a backend developer, I also took on the role of maintaining the mobile app
and onboarding new frontend developers, essentially working as a full-stack engineer.•API Backend for Welcoach Shop
- Node.js
- Fastify
- Envelop
- GraphQL
- Schema Stitching
- Terraform
- AWS EKS, RDS, SQS, etc.
Created an MSA backend for providing additional features to a Shopify store.
Utilizing the Schema Stitching feature of GraphQL Tools, I created a single supergraph API
that merges multiple microservices into a single API that can be used by the frontend conveniently.By integrating with the API provided by SBN, I created a service flow that allows customers to purchase
a blood test appointment from the shop, take the test, and receive a report that is created with our own algorithm.•Frontend Development Assistance for Welcoach Shop
- Shopify Liquid
- React
- Svelte
- Relay
- Vite
- WindiCSS
- Astro
Supported various frontend work that are required when building a Shopify store.
On a web store built with Shopify, I did various customizations using vanilla JS and Liquid templates.
I also created various custom components with Svelte to add dynamic functionalities.Moreover, to create pages for receiving questionnaires and displaying the reports,
I utilized the Vilay framework, which I created as a side project to utilize React and Relay in SSR.Most of the development was done by collaborating with my teammates,
and I also participated as a lead to help junior developers.
- Frontend Developer @ NutritionCourt
2020.09 ~ 2021.07NutritionCourt is an AI healthcare startup that creates a personalized meal plan based on a user's health data.
Due to the nature of a small startup, I also worked in various fields other than frontend.
•Rewrite Angular Project to Vue
- TypeScript
- Vue.js 2
- Bootstrap 4
- SCSS
- Google App Engine
Rewrote a MVP healthcare product from Angular 2 to Vue 2.
I worked on an healthcare app that receives blood test results and displays report UI including meal plans.
Responsive design was applied to the UI using Bootstrap 4 and SCSS.
•Rewrite Angular Project to Nuxt
- TypeScript
- Nuxt.js
- Bootstrap 4
- SCSS
- Python
- Falcon
- Google App Engine
Rewrote a B2B product from Angular 2 to Nuxt 2.
I worked on a B2B product for hospitals that includes a desktop Web UI for doctors and a mobile Web app for patients.
The app provided end-to-end features like scheduling appointments, writing reports, scheduling blood tests,
receiving questionnaires, displaying reports, sending dosage reminders, etc.To perform SSR smoothly, optimization techniques like prefetching were applied.
Also, I worked on the API backend a little bit, written in Python and Falcon. I mostly fixed bugs and added some minor features.
•Welcoach Mobile App
- Flutter
- GetX
- Node.js
- GraphQL
- Mercurius
- Prisma
- Elasticsearch
Created a mobile app that provides a health management solution based on blood test results.
The app provides personalized meal plans and supplement recommendations by analyzing the blood test results
that are retrieved using APIs provided by the National Health Insurance Service of Korea.I almost have worked on the app solely except for some infrastructure work,
released the app to the Play Store, and downloaded more than 1000 times.
Personal Projects
- TypeScript
- Vite
- vite-plugin-ssr
- React
- Relay
- UnoCSS
A framework that facilitates the development of Relay-based SSR apps using Vite and vite-plugin-ssr.
It supports Suspense-based Streaming SSR with React 18 and Relay,
and is configured to support Render-as-you-fetch by specifying GraphQL queries per page.While looking for a suitable SSR framework to use in production at my company,
I couldn’t find an optimal framework for use with Relay, so I decided to create one myself.
It is currently being used in the development of new products at my company.It works well in edge runtime environments such as Cloudflare Workers,
and advanced SSR techniques like Selective Hydration are planned to be applied in the future.Although I previously received inquiries and open source contributions related to collaboration and usage from various channels,
the framework has now been archived as we are no longer working on projects that use it.- ReScript
- React
- Tailwind CSS
- Cloudflare Workers, R2, KV
- PWA
- Workbox
A web app for language therapy featuring a photo and audio slideshow.
Written entirely in ReScript except for the service worker, implemented a resource management system using Cloudflare Workers infrastructure,
and applied caching for offline use with a Workbox-based service worker.- Rust
- async-graphql
- actix-web
- PostgreSQL
- Redis
A project aimed at creating web versions of games from the series <The Genius>.
Currently, only a very incomplete Relay-compatible GraphQL API server exists,
with implemented features such as account and JWT-based authentication systems and direct messaging (DM).By writing various macros using Rust’s Procedural Macro system,
issues like implementing Global Object Identification with minimal code were resolved.Future plans include implementing a game system using Server-Driven UI and GraphQL Subscription.
- ReScript
- React
- WindiCSS
- Firebase Functions
- Firestore
A project created for personal voting on hair color for dyeing.
All code was written in ReScript, implementing a voting system using Firebase Functions and Firestore,
and applying real-time data updates using Firestore.
Additionally, issues such as implementing smooth transitions between gradients were resolved.- TypeScript
- Vue.js 3
- Electron
- html2canvas
- Pinia
- WindiCSS
A program that automatically generates subtitle images from text and graphic templates.
This was a graduation project conducted at Full Sail University.
Implemented dynamic rendering of subtitle images using Vue.js and html2canvas.
Resolved type safety issues in the template component system, Pinia Store, and Electron IPC system
by leveraging TypeScript’s type utilities.- C#
- WinUI 3
- teVirtualMIDI
A program that allows pen tablets like Wacom to be used as MIDI controllers.
This project was conducted as part of a portfolio class at Full Sail University.
It operates by using the teVirtualMIDI driver, which creates a virtual MIDI device,
and converts the XY coordinates and pressure values received from the pen tablet into MIDI signals,
allowing the pen tablet to be used like an instrument when connected to a DAW.I attempted to directly read tablet information through WinTab API integration,
but failed due to a lack of knowledge regarding C/C++ API integration, which remains the most regrettable part of this project.- Moim
2019.12 ~ 2020.02- Flutter
- Redux
- JavaScript
- Firebase Functions
- Firestore
- FCM
- Stripe
A carpool app with a payment system created for use within a school.
Created while learning Dart, Flutter, and Android development, this project was instrumental in learning how to compose UIs using various widgets.
Implemented matching API using Firebase Functions, integrated Google Maps to display the current location of each carpool member,
and integrated Stripe for carpool fare payments.The app was not put into actual operation due to legal issues related to Stripe integration (foreign nationals).
- TypeScript
- C++
- node-addon-api
- CMake.js
- TagLib
Node.js binding for the C++ music file tag management library TagLib.
I created a type-safe binding using TypeScript,
set up the build system using CMake.js, including adding the TagLib dependency,
and successfully published it on NPM.Although I planned to add many features such as a Promise-based API, the project is currently on hold due to a lack of personal interest.
- JavaScript
- Vue.js 2
- Bootstrap 4
- Firebase Functions
- Firestore
A collection of utilities such as a strategy editor that can be useful in a gaming community.
When the League of Legends board was newly established on Ruliweb, the various utilities (item DB, strategy system, etc.)
used in the existing community (LoL Inven) were very lacking, and this project was developed to address that issue.I integrated Riot Games’ League of Legends API and implemented a system for uploading strategies using Firebase.
Open Source Contributions
- Rust
- swc
This is an swc port of a Babel plugin for SolidJS's compile-time JSX transform.
SolidJS’s JSX transform converts JSX into DOM element creation and state change subscriptions.
Since this transform only supported Babel, a community effort was started to port it to swc,
but the progress had been slow.First, I added a significant amount of logic for handling the use of components within JSX,
improving the plugin to support not only general DOM elements but also components within JSX. (#1)Later, I implemented additional features such as optimizations for handling constant values
and support for framework built-in components (e.g., For, Show), enhancing the completeness of the plugin.- TypeScript
- GraphQL Yoga
This is a simple GraphQL API example server created for the purpose of testing GraphQL clients.
The updates for this project had stopped since 2020, and it did not support the latest specs such as @defer and @stream.
To facilitate related testing, I updated the entire project.I replaced the previously used Apollo Server with GraphQL Yoga 2.0,
and modified the mocking data layer to support Promises,
configuring resolvers to support @defer and @stream. (#15)Subsequently, at the maintainer’s request, I developed the envelop-plugin-relay-defer
to support the unofficial @defer/stream style used by Relay, and completed a PR to apply the plugin. (#16)- TypeScript
- Atomic CSS
This is an Atomic CSS library similar to Tailwind CSS, but it works on an on-demand basis.
UnoCSS provides various features through multiple presets.
Among them, the Attributify preset allows you to specify Atomic CSS classes as if they were regular properties,
and it further offers a feature called Valueless Attributify, which applies styles when the attribute name is written directly on the tag.However, an issue was reported that this feature does not work in SolidJS (#878).
To resolve this issue, I added an option that makes slight modifications to the CSS generated by UnoCSS to ensure compatibility with SolidJS. (#899)- TypeScript
- Yarn 2
- Yarn PnP
- ReScript
This is a plugin that helps ReScript work properly in Yarn 2's PnP environment.
Yarn PnP replaces the traditional module system that uses the node_modules directory.
ReScript’s dependency system, however, only works with a node_modules-based module system,
so generally, Yarn PnP cannot be used with ReScript.The role of this plugin is to circumvent this issue by using a node_modules-based module system
only for dependencies referenced by ReScript.I improved the plugin to resolve issues where dependencies of workspace members could not be fetched
and where one member depended on another member in a Monorepo environment. (#5)- Rust
- GraphQL
- Rocket
async-graphql is a server-side GraphQL framework for Rust.
async-graphql generally works with other backend frameworks,
providing integration packages for popular backend frameworks.
Among these, the integration package for the Rocket framework did not support the latest RC Release,
so I added support for it. (#545)- Rust
- GraphQL
- Rocket
juniper is a server-side GraphQL framework for Rust.
juniper generally works with other backend frameworks,
providing integration packages for popular backend frameworks.
Among these, the integration package for the Rocket framework
did not support the version of the latest master branch that includes async support,
so I added support for it. (#905)- TypeScript
- Vue.js 2
- Jest
- Vue Test Utils
vee-validate is a leading input validation library for Vue.js.
vee-validate wraps input elements to be validated with the ValidationProvider component,
automatically detecting elements with the v-model attribute to validate field values.While it also provides a way to manually call the validate function for cases where v-model is not used or in other scenarios,
there was an issue where elements with the v-model attribute were always designated as the target elements for validation.I improved this behavior by adding the detectInput attribute to enable or disable this feature,
and added test code using Jest. (#2980)
Education
- Software Development B.S. @ Full Sail University
2019 ~ 2021Graduated as valedictorian with a GPA of 3.77/4.0 through a 20-month accelerated program.
In 2019, I attended in-person classes in the US with local students,
and from early 2020, I took online classes from Korea due to COVID-19.The program helped solidify my knowledge in various CS fields, including operating systems, data structures, concurrent programming, and MIPS assembly.
- LBOT Christian Innovation School
2014 ~ 2018Graduated from an integrated middle and high school program at a reading-focused Christian alternative school.
The curriculum, centered around reading and analyzing social issues to establish values and self-directed learning, provided ample time for self-development, greatly contributing to my growth both personally and as a programmer.
Additionally, I organized small coding study groups to teach basic coding to students,
acted as a teaching assistant in official coding classes to help students who were falling behind,
and gained valuable experience in coding education.
This has proven to be significantly helpful in communicating development-related matters with non-developers.Since non-accredited alternative schools are not officially recognized as middle or high schools,
I obtained my academic qualifications for both levels through the GED exams.