{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreia6ujtv2pr4ssdujbjwdfzcxf4svsi6fry2afsnawphtrq5xmqc6m",
    "uri": "at://did:plc:iwhtsj2wcuijngl4p4rfbz3m/app.bsky.feed.post/3lasd6jlpgpq2"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreih3dpsz7jt7zx3k242d5pnbwgm7pmqhm4vaqvcm3fte4qivfj73se"
    },
    "mimeType": "image/png",
    "size": 578974
  },
  "path": "/blog/2022/12/2022-in-review/",
  "publishedAt": "2026-05-25T04:21:05.024Z",
  "site": "https://cheeaun.com",
  "tags": [
    "Scraped",
    "misbrands",
    "Experimented",
    "Made a repo",
    "free mask",
    "one of my (very) old projects",
    "Light to night",
    "CSS Speedrun™️",
    "my own variant of Wordle",
    "3D model of Wordle results with Spline",
    "night walk",
    "2️⃣2️⃣0️⃣2️⃣2️⃣0️⃣2️⃣2️⃣",
    "a Cloudflare worker",
    "a bug",
    "fixed",
    "Face ID unlock with a mask",
    "a sneak peek",
    "interviewed",
    "got linked from Slate",
    "Night walk",
    "Afternoon walk",
    "link-in-bio",
    "2 big changes",
    "a new Telegram chat group",
    "cool font",
    "Gastric week",
    "ladders",
    "again",
    "MRT/LRT stickers",
    "Apple Store on different maps",
    "Sponsored",
    "Subscribed to MDN Plus 5",
    "pretty cool updates",
    "SEO for Chengyu Wordle",
    "5 coffees",
    "joke",
    "mentioned in /r/programmerhumor",
    "globe projection on my cheeaun.earth",
    "my projects page",
    "Tough week(s)",
    "Uncle Roger mentioned on HN",
    "a free .dev domain",
    "iOS 16 beta",
    "Spiral Emoji Wallpaper Generator",
    "Hackerweb for iOS v2.1.0",
    "1-week staycation",
    "Mentioned",
    "Ordered",
    "Got it",
    "stickers",
    "some cool wallpapers",
    "Attended",
    "Co-organized",
    "Made",
    "TikTok",
    "map viz for Singapore Night Festival",
    "new stickers!",
    "Uncle Raymond",
    "TikTok sensation",
    "a lot of stickers",
    "Sold",
    "scammed",
    "Airpods Pro 2nd generation",
    "3 meetups",
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "Lock Screen wallpaper",
    "ViteConf",
    "Designed",
    "3D mascot",
    "Upgraded",
    "TEL3 sunshade pouch",
    "iOS16 Live Activities from CityMapper",
    "3D models from Monument Valley level 1",
    "Geekcamp",
    "a 3D hand",
    "a new YouTube handle",
    "a 3D emoji",
    "UIlicious's logo in 3D",
    "a 3D golf game",
    "Spline's Conditional Logic",
    "all 11 new stations in Thomson-East Coast line",
    "walk",
    "RailRouter.SG",
    "bus stop 66271",
    "a little with Mapbox Tiling Service",
    "building something",
    "100-day streak",
    "Soft-launched",
    "Set up a Mastodon bot account",
    "GitHub Unwrapped",
    "access",
    "tweeted",
    "this on Hacker News",
    "Ask HN: Where are all the senior front end engineers?",
    "reposted",
    "tech layoffs",
    "got mentioned by the Prime Minister",
    "quote-tweeted by @hrdbacot",
    "soft-launched a new Mastodon web client called Phanpy",
    "mentioned by Tobias Bernard",
    "13 years ago",
    "Spline",
    "Geekcamp logo back in 2017",
    "TraceTogether's",
    "oTTer",
    "mascot",
    "mind",
    "Reddit /r/singapore",
    "TikTok video",
    "LinkedIn post",
    "try another simple mascot",
    "Bun is a fast all-in-one JavaScript runtime",
    "Monument Valley",
    "re-draw the whole Level 1 of Monument Valley game",
    "full 5-min time-lapse video of remaking the 3D models from Monument Valley on YouTube",
    "got pretty close",
    "Microsoft's",
    "open-source 3D Fluent Emoji",
    "designed",
    "didn't really share",
    "took up",
    "a 11-minute time-lapse tutorial video on YouTube",
    "UI-licious",
    "why not",
    "a 6-minute time-lapse video",
    "Spline added physics",
    "an interactive golf game",
    "tee",
    "Spline introduced Conditional Logic",
    "made some sort of disk trying to make sure the ball doesn't fall over",
    "6-min time-lapse video",
    "Ask HN: Has anyone here turned around their life in their 40s?"
  ],
  "textContent": "Wow, another year has passed. And now another review.\n\nIt's time for _the_ list, that I usually compile monthly for my newsletter.\n\n**January**\n\n  * Scraped a bunch of taxi stands 🚕\n  * Ordered & printed misbrands stickers 👾\n  * Experimented with a 3D globe 🌏\n  * Made a repo that scrapes what's happening in SG 🇸🇬\n  * Got another free mask from vending machine 😷\n  * Revived one of my (very) old projects 🏔️\n  * Light to night festival 🌝\n  * Did a CSS Speedrun™️ 🏃‍♂️\n  * Launched my own variant of Wordle! 🚀\n\n\n\n**February**\n\n  * Made a 3D model of Wordle results with Spline 📦\n  * Blogged: Chengyu Wordle Is Not a Love Story 📝\n  * Had a night walk 🚶\n  * 2️⃣2️⃣0️⃣2️⃣2️⃣0️⃣2️⃣2️⃣\n  * Built a Cloudflare worker 👷‍♀️\n\n\n\n**March**\n\n  * Reported a bug to MDN and it got fixed. 🌓\n  * Another night walk 🚶\n  * Tested iOS 15.4's Face ID unlock with a mask 😷\n  * Showed a sneak peek of my new map web app designed for walking. 🗺️\n  * Got interviewed. 🗣️\n  * My blog post got linked from Slate.\n\n\n\n**April**\n\n  * 🚶 Night walk.\n  * 🚶 Afternoon walk.\n  * 🔗 Got another link-in-bio page.\n  * ✌️ Made 2 big changes to checkweather.sg.\n  * 💬 Started a new Telegram chat group.\n  * ©️ Found a cool font.\n  * 🤢 Gastric week.\n  * 🪜 Ranted about ladders.\n  * 🚶 Night walk again.\n  * 👾 Bought MRT/LRT stickers from a Redditor!\n  * 🍎 Ranted about Apple Store on different maps.\n  * 💰 Sponsored devs on GitHub Sponsors.\n  * 💸 Subscribed to MDN Plus 5.\n\n\n\n**May**\n\n  * 🆒 Made pretty cool updates to my HackerWeb iOS app.\n  * 🔎 Discovered that SEO for Chengyu Wordle became really weird\n  * ☕ Received 5 coffees.\n  * 🃏 Made a joke.\n  * 🔊 Got mentioned in /r/programmerhumor\n  * 🌏 Finally using globe projection on my cheeaun.earth\n  * 💅 Spruced up my projects page\n  * ➕ Tough week(s)\n  * 🍛 First time saw Uncle Roger mentioned on HN\n  * 🆓 Got a free .dev domain and made a Cloudflare worker\n\n\n\n**June**\n\n  * 📲 Trying out iOS 16 beta.\n  * 🤔 Made a Spiral Emoji Wallpaper Generator ← this went viral!\n  * 🚀 Released Hackerweb for iOS v2.1.0.\n  * 🏨 Had 1-week staycation.\n\n\n\n**July**\n\n  * 🗣 Mentioned some realities of front-end.\n  * 💻 Ordered Macbook Air M2. Got it.\n  * 👾 Restocked stickers.\n  * 📲 Tested some cool wallpapers on iOS 16 beta.\n  * 👯 Attended an in-person conference.\n  * 🥘 Co-organized Geek Brunch SG.\n\n\n\n**August**\n\n  * 📹 Made a viral TikTok.\n  * 🗺️ Made a new map viz for Singapore Night Festival.\n  * 👾 Got new stickers!\n\n\n\n**September**\n\n  * 👀 Saw Uncle Raymond, a TikTok sensation.\n  * 💸 Bought a lot of stickers.\n  * 🤑 Sold my Macbook Air (M1) because I got the new M2 now.\n  * 💰 Almost got scammed.\n  * 🎧 Got my new Airpods Pro 2nd generation.\n  * 🥺 Finally 3 meetups in one day (like pre-covid times).\n\n\n\n**October**\n\n  * 📦 Made a few 3D logos… 1 2 3 4 5 6 7\n  * 📱 Started using a new pretty nice Lock Screen wallpaper.\n  * 🎟️ Attended ViteConf online.\n  * 🦦 Designed another 3D mascot.\n  * 🎨 Designed yet another 3D mascot.\n  * 🆙 Upgraded to macOS Ventura and iOS 16.1.\n  * 🌞 Got a free TEL3 sunshade pouch.\n  * 🤩 Tested the new iOS16 Live Activities from CityMapper.\n  * ⛰️ Remade 3D models from Monument Valley level 1.\n  * 🎟️ Attended Geekcamp.\n  * 🤚 Designed a 3D hand.\n\n\n\n**November**\n\n  * 📺 Got a new YouTube handle.\n  * 😀 Designed a 3D emoji.\n  * 🍰 Designed UIlicious's logo in 3D.\n  * ⛳ Made a 3D golf game.\n  * 🐘 Start using Mastodon again.\n  * ✨ Played with Spline's Conditional Logic.\n  * 🚄 Visited all 11 new stations in Thomson-East Coast line.\n  * 🚶 Had a walk.\n  * 🚂 Updated RailRouter.SG.\n  * 🚏 Made some UI updates for bus stop 66271.\n  * 🗺️ Played a little with Mapbox Tiling Service.\n  * 🏗️ Started building something.\n\n\n\n**December**\n\n  * 💯 Hit 100-day streak on Product Hunt.\n  * 🚀 Soft-launched an alpha version of my Mastodon web client.\n  * 🌧️ Set up a Mastodon bot account for checkweather.sg.\n  * 🎁 GitHub Unwrapped.\n  * 🦾 Got access to Notion AI.\n\n\n\n## Work and unemployment\n\nAfter working for almost 3 years with work-from-home and sometimes-work-from-office arrangement, it gets pretty tiring. The first year (2020) was cool as everyone starts to learn how to juggle things around. The second year became pretty distressing for me, especially when I got hospitalised (not due to that disease).\n\nThis year is supposedly better in many ways as it's almost \"post-pandemic\" with lesser restrictions, but the tiredness start to kick in for me. A lot of things happen, a lot of problems to be solved, a lot of uncertainties. Despite seeing other folks moving on with new plans ahead, I felt like I'm stuck. In this pandemic or post-pandemic sense, I feel like I'm still in 2020. In the career side of things, I feel like I've been stuck for more than 10 years.\n\nOn April, I tweeted:\n\n> Been working for 16 years (first web dev job, excluding my part-time freelance work while schooling) Seems like my career ladder has been flat for the past 10 years. Maybe my approach has been wrong all the while.\n\nThere's a few good replies, though sadly some were like \"me too\" answers 😢.\n\nOn July, I posted this on Hacker News, answering the question for \"Ask HN: Where are all the senior front end engineers?\":\n\n> I'm a senior FE engineer in Singapore, been doing FE since 2000, here's what I think:\n>\n>   1. Job descriptions and interviews now are skewed towards \"full-stack\" or backend. Most interviews are lacking or outdated due to the fast and volatile nature of FE.\n>   2. Literally no career progression if you're specialised in FE. Most BE or \"full-stack\" devs will be given a chance to become principal engineers, tech leads, engineering managers, CTOs, etc. I've seen folks with \"FE Team Lead\" titles but never goes beyond that.\n>   3. FE is a subconsciously looked-down field. Neither a designer nor an engineer. Product/design team won't involve you in meetings (but will treat you like a code monkey). BE/\"full-stack\"/API engineers will think your job is easy and keep throwing business logic stuff to FE.\n>\n\n\nThis got reposted on LinkedIn and gained quite a few reactions.\n\nOverall, I'm not really looking for an answer. These are just rants. It may not apply to all other companies and of course, there are many other factors besides these areas. I can complain all day long but life goes on and I'll still need to do what I need to do. These feelings probably have escalated due to anxiety and recent incidents all over the world.\n\nI needed a break.\n\nSo I quit my job and became unemployed since July. It took quite a long while for this feeling of unemployment to kick in, after all these years of working from home. When I have a job, I work from home. Now that I don't have a job, I'm still… at home 😂. I guess it became very obvious that my work and personal life are not properly separated.\n\nI've talked with a few people and there are two kinds:\n\n  1. People who also felt like quitting and asking me how I manage to quit without any plans, regarding my career and my budget to sustain 😅.\n  2. People who told me they've done it before, and it was liberating for them 😇.\n\n\n\nThis isn't the first time I have a career break. My first time was in 2015. I personally describe it as \"school holidays for working adults\". At that time, I travelled to Tokyo and San Francisco. This time, I chose not to travel anywhere. I get asked why a lot of times and I mention that travelling is actually _more_ tiring. I mean, it's tiring in a good and enjoyable way, but I don't need that now.\n\nBeing unemployed is a double-edge sword. It feels great not to think about work, but at the same time, it feels bad because _everything_ needs money and it gets worse with the recent wake of mass tech layoffs. I personally know how this feels, not very affected by them, and have learned to prioritise my own mental health. I don't have the capacity to save others if I don't save myself first.\n\nIt's been 6 months of unemployment. I don't have plans yet but I'll just do what I can do.\n\n## Projects\n\nThis year started **great** for my side projects.\n\nOn January, **Wordle** became popular, so I made my own variant of Wordle called **Chengyu Wordle** and it got mentioned by the Prime Minister 😱!\n\nI was thinking of printing this screenshot and hang it on the wall or something 😂.\n\nOn June, I made a Spiral Emoji Wallpaper Generator. It got quote-tweeted by @hrdbacot, a Twitter user account with 800K+ followers 😱.\n\nThis was super fun and hilarious, as I could see how others were playing around with the wallpaper generator.\n\nOn December, I soft-launched a new Mastodon web client called Phanpy. It was also mentioned by Tobias Bernard which gave it a lot more attention. 😱\n\nI spent quite a good chunk of time on this, typically enjoying the process as it reminded me of the time when I was building my own Twitter client 13 years ago.\n\nAs always, I learn a lot whenever I work on new side projects. Many more to come.\n\n## 3D Designs\n\nLast year, I made quite a bunch of 3D-based maps. I'm especially proud of my Apple-Maps-like 3D trees work 🤩.\n\nThis year, I went **all in** 🏋️‍♂️, using a cool 3D design tool called Spline.\n\n### Geekcamp logo\n\nI designed the Geekcamp logo back in 2017 and has been wondering if it would look cool in 3D. So, here goes…\n\nAt this point, I thought to myself, why not a 3D Pac-Man? 🙈\n\n### TraceTogether otter\n\nI wanted to draw a 3D model of a cute animal and somehow TraceTogether's oTTer mascot came into mind 🦦. It's a conversion of 2D art to 3D art.\n\nIt's also animated! 🤩\n\nThis sort of \"went viral\" on Reddit /r/singapore (2K+ upvotes), my TikTok video (34K+ plays) and my LinkedIn post (600+ reactions, 43K+ impressions) 😱.\n\n### Bun's mascot\n\nAfter designing the otter, I wanted to try another simple mascot to further spruce up my skills. Bun is a fast all-in-one JavaScript runtime and this is the mascot:\n\nCute.\n\n### Monument Valley level 1\n\nI wanted to try something isometrical, especially ever since my attempt at designing the artwork for RedDotRubyConf in 2016. Monument Valley (game) is definitely something I _really, really, really_ want to try replicating 🤤.\n\nThis is a tad more challenging but I manage to re-draw the whole Level 1 of Monument Valley game 🤩.\n\nOkay, these probably look like screenshots from the game, right? **Wrong.** The cross handle is clickable to rotate the path!\n\nRotatable too.\n\nI've uploaded a full 5-min time-lapse video of remaking the 3D models from Monument Valley on YouTube, to prove that I actually made them from scratch. 📹\n\n### My hand\n\nOkay, this is not a logo or a mascot. Just my hand because I wanted to draw something more complicated. I didn't quite finish this one because there's just too many details 😩. I got pretty close though. 🤚\n\nLook ma, one hand!\n\n### Microsoft Windows' 3D Fluent Emoji\n\nI reverse-engineered (reverse-designed?) Microsoft's open-source 3D Fluent Emoji. They designed it in 3D but didn't really share the actual 3D files, possibly made in Maxon's Cinema 4D.\n\nI took up the challenge to recreate them in 3D, by referencing the 2D artwork, starting with the most basic \"😀\" emoji.\n\nThe shadows look like freckles there. Subtle yet refined 🧐.\n\nI made a 11-minute time-lapse tutorial video on YouTube.\n\n### UI-licious logo\n\nBack to another logo and this time it's UI-licious, a local startup working on a low-code tool for automating UI testing for your websites across browsers (This is not sponsored 😆).\n\nTheir logo looks easy for me to test other things out, so why not?\n\nShiny! 💅✨\n\nAgain, I made a 6-minute time-lapse video.\n\n### Golf game\n\nOn September, Spline added physics and I really got to try it out! I made an interactive golf game with a weird slope to prevent the golf ball from falling off the edge.\n\nI accidentally learned how to name parts of a golf club like shaft, clubhead and grip. Even the thing that holds the the golf ball is called a tee.\n\nYes, I name my layers properly 😉.\n\n### Conditional Logic\n\nOn October, Spline introduced Conditional Logic, which feels like programming but for 3D objects! 🤩 I played around with it and made some sort of disk trying to make sure the ball doesn't fall over.\n\nI made a 6-min time-lapse video, basically just trying to keep the ball from falling over 😆.\n\nI probably should've written _another_ blog post dedicated to my 3D designs, but I had so much fun that I don't even feel like writing anything. 🤣\n\n## Looking back\n\nInstead of just this year, I start to look back further. I've been thinking about my whole career, my personal life, relationships, friendships and my passions.\n\nI'll be hitting the big four-oh in 3 years (well, actually 2).\n\nIt feels kind of scary.\n\nAs others have moved on, getting promoted, trying out new roles, gained more responsibilities, moved out from their parents' house, got married, had kids, migrated to other countries, bought a new house, joined another company or found a new one, I feel… stuck.\n\nIt's hard to resist the urge to compare with other people's lives, even though I've always been doing things at my own pace.\n\nIt was quite timely when I saw this post on Hacker News: \"Ask HN: Has anyone here turned around their life in their 40s?\". Some responses mentioned that we're not alone as everyone else are also having same thoughts in varying difficult situations. Some people had worse, managed to turn things around and having a better life now in their 50s.\n\nThis career break is like pressing the pause button for me to think about what to do now and what I want to do in the future. Honestly speaking, _nothing_ comes into mind, as I'm slowly re-adapting and maybe _undoing_ all the things that has changed in my life thanks to the pandemic. They are not really big changes, but small ones add up.\n\nI do know that no matter what happens, I need to do _something_. Nothing will change if I don't take any actions. In fact, things around me are constantly changing while I'm doing _nothing_ , and these things will ultimately force or influence me to do _something_.\n\nOh well, looking forward to more uncertainties ahead.",
  "title": "2022 in review",
  "updatedAt": "2022-12-31T00:00:00.000Z"
}