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.10

    NutritionCourt 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.07

    NutritionCourt 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

  • - Vilay

    2022.01 ~ 2022.08
    • 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.

  • - Lang-Helper

    2020.12, 2022.07~
    • 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.

  • - Webgame Collection

    2021 ~ WIP
    • 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.

  • - Vote 2021: Choose XiNiHa's Hair Color

    2021.09
    • 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.

  • - Raspberry Rice Wine

    2021.03 ~
    • 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.

  • - Penstrument

    2020.06
    • 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).

  • - taglib-node-binding

    2019.09
    • 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.

  • - League of Legends Related Utilities

    2018.07 ~ 2018.09
    • 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

  • - modderme123 / swc-plugin-jsx-dom-expressions

    2023
    • 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.

  • - zth / graphql-client-example-server

    2022 ~
    • 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)

  • - unocss / unocss

    2022 ~
    • 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)

  • - reason-seoul / yarn-plugin-rescript

    2021
    • 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)

  • - async-graphql / async-graphql

    2021.06
    • 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)

  • - graphql-rust / juniper

    2021.03
    • 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)

  • - logaretm / vee-validate

    2020.10
    • 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 ~ 2021

    Graduated 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 ~ 2018

    Graduated 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.

Contact