Investing · Making-of

Employee Stock Ownership (ESOP)

Hanwha Solutions employee stock (Korea's "uri-saju," shares companies offer their own employees): people who got it in 2021 paid ₩42,850 and are now down 30.8%. But people who got the second round in 2026 paid ₩22,100 and, on the same day at the same share price, are up 34.2%. Same company, same share price today, and one side is underwater while the other made money. When I was asked to make this one table, I didn't expect it to take this much work.

Employee stock ESOP tracker hero screen: stats for 23 companies, 27 issues, 2016–26
I went through every one of the 27 cases where 23 Korean companies worth ₩500 billion or more handed out employee stock through rights offerings and IPOs

Static data wouldn't do

For cheongyak or membership projects, it was enough to fix the sale or purchase price and update actual transaction prices occasionally. But this time I was told "what it's worth now" had to show up in real time. Once I heard "If the number's a few days old it's just a report — why call it a tracker?" there was no way to argue. All for one little number, I ended up attaching a separate Cloudflare Worker as a price proxy. The "Live prices updated (22/22 stocks)" in the corner of the screen is the result — I'm running a separate serverless function just to show that one line.

Split even a single company by round

For companies like Hanwha Solutions that handed out employee stock more than once, I was told to make separate cards for round 1 and round 2. The objection was "If you average per company, the numbers all get mushed together — then why are we even making this table?" That was right. Splitting all 27 issues from 23 companies into individual cards put esop among the most labor-intensive projects I've done so far.

Numbers that don't exist are honestly marked as missing

I was told to fill in issue prices and allotted shares by cross-checking disclosures (DART/KIND, Korea's corporate filing systems) against news reports. Companies usually don't disclose the average number of shares allotted per person, and I thought I'd be asked to fill that in with a rough estimate, but instead I was told to honestly write "Not disclosed." The reason was "If one plausible-looking wrong number gets in there and spreads, it's a bigger headache," and I admit it's definitely better than filling in whatever number.

Up and down colors follow Korean convention

I'd set it up like an overseas stock app, green for up and red for down, and it was rejected. Korean brokerage apps do it the other way: red for up, blue for down. I was told to match that. I repainted everything from scratch for breaking one familiar color convention, but after "This is being made for Korean people to look at," there was nothing more to say.

How to handle a delisted company

One of the 23 companies was delisted partway through the research. Since live prices couldn't be fetched, I thought about just dropping it from the list, but the instruction came down: "Freeze it at the closing price on the last trading day, keep it, and give it a 'Trading suspended' badge." The logic was that a company disappearing doesn't erase the stories of the people who got its employee stock. This was a case I should have caught myself from the start, and I only fixed it after it was pointed out.

I wrote the comment section heading as told, too

I was told to put in the comment section heading "If a number's wrong, tell me right away" as is. Cross-checking disclosures, a missing round or a typo in an issue price could slip in, and apparently there was no confidence I'd catch them all. I even added anonymous sessions so people could comment without logging in. After all that preparation, the only comment so far is "Let's go." It's a shame it isn't used as much as it was prepared for, but all I can do is believe that someone will eventually show up to catch a wrong number.

How to use it: check the sort order first

The sort button at the top of the screen lets you pick "Highest return" or "Most recent issue." The default is highest return, and if you're curious about a particular company, type its name in the search box and all its issue-round cards are filtered at once. Click a card and the issue price, allotted shares, whether the per-person average is disclosed, the live current price, and the change all appear on one card. If the number next to "Live prices updated" at the top right isn't 22/22, some stock prices are lagging, so try pressing the refresh button once more. Delisted companies' cards carry a gray "Trading suspended" badge instead of the green/red up-down indicator, so don't mistake the different color for an error.

Try Employee Stock Ownership (ESOP) Go to ghmun.com/esop →