
There's no end to creativity, and there's no end to software. Merge them together, and you get a world of infinite possibilities. My belief in this world drives my steadfast fervor for software engineering.
I will never stop learning - about technology, about people, about what makes the world turn. I find great joy in actualizing what I learn into tangible, practical projects, and seeing ideas come to life.
I spend most of my time building products, tools, and systems that make complex workflows feel simpler. I hope to continue building and contributing to products that bring value to people's lives. Working towards something bigger? Count me in.
How to balance product ownership with practical platform engineering.
Still learning. Still building. Still doing.
How to keep complex internal tools fast, legible, and reliable for operational teams.
How to introduce automation carefully in products that support high-stakes decisions.
How to design tools for content teams without making publishing workflows fragile.
How to connect editorial product surfaces with lightweight automation behind the scenes.
I learned a lot. About the subject, about the students, about my teaching style, and about myself.
I detailed some of my learnings in this blog post.
Here's the guide I wrote and used for my students during the semester.
And here's a website I made compiling all their cool projects together!
Some jobs that I took up as a freelance developer.
How to work independently and manage both personal and client expectations.
Organizational skills (for example, managing deadlines and setting up workflows for project management).
A telecommunications company that prides itself as a trailblazer in digital services.
Web architecture - static site generation versus server side rendering, headless model, microservices.
How different areas (i.e., SEO, UI/UX, web security, etc.) all mesh together.
Effective communication with different stakeholders (e.g., InfoSec, engineers, architects, external agencies, etc.).
Working coherently and efficiently with my team members and cross-functional stakeholders.
How to measurably assess and review different solutions to a problem.
An independent comics publisher based in Singapore.
Most of the styles were written in plain, vanilla CSS. I learned how to work with it.
Figuring out interface solutions together with the designer.
Command Pattern and how it can be used to implement undo/redo functions on the canvas.
SenseUs was a simple, fun-to-use question-and-answer platform that encouraged self-reflection and discussion about social issues in Singapore by illuminating differences in our opinions and lived experiences.
I oversaw the entire technical process and built both the backend and the frontend.
As a PWA launched on both the Play Store and the App Store, SenseUs grew to 1,000+ active users at its peak.

Whispers Singapore was an anonymous space where people could safely and freely express themselves without fear of judgement.
It was built around authentic sharing and discovering more about the community through people's stories.
This project came out of a desire to create a safer space for people to air their thoughts.
A lot of time went into learning new technologies and refining the user experience and design.
I handled both the frontend engineering and UX design.
Ultimately, the hard work paid off and we attained first place at 19th STePS, acquiring thousands of daily active users.

Glyph was a collaborative trip-planning document that let users highlight a messy section, mention @glyph, and get back evidence-backed suggestions as a reviewable patch instead of a chatbot-style answer.
I built it as a scoped agent workflow on top of a shared doc surface, with a monorepo split across the web app, editor, shared contracts, and agent orchestration.
It combined Next.js, Tiptap, OpenAI, TinyFish, and streamed thread updates to make AI assistance feel more like collaborative editing than chat.

A bunch of my Telegram experiments live here. Most of the older bots are now deprecated, but they taught me a lot about conversational UX, retrieval, and automation.
1. Tinkergram - A Telegram-driven coding workflow for local repos. You send prompts from Telegram, a local Codex runner edits the repo, and a Mini App streams live job progress, logs, and follow-up actions in real time.
Under the hood, it uses Node.js, Express, React, Vite, and the Telegram Bot + Mini App stack to handle auth, queueing, job artifacts, and repo-scoped runs.
2. Yahoo Fantasy Agent - An n8n-based fantasy basketball assistant that pulled Yahoo league data, rosters, waivers, matchup stats, and schedule context, then used OpenAI to recommend moves and send concise Telegram updates.
3. Easy GPT (deprecated) - An AI chatbot for Telegram that could read PDFs, generate images from prompts, and browse the web for relevant information.
4. Summarize This (deprecated) - A Telegram bot that summarized articles, YouTube videos, PDFs, and Reddit threads.

A Learning Management System (LMS) for education.
This was one of my first attempts at full-stack development.
Having previously built LMS-style products with WordPress plugins, I wanted to see if I could develop one myself from scratch.
It turned out to be much more complicated than I initially expected, but it taught me a lot about the flexibility and freedom that come with building something entirely on your own.
You can find the feature specification here.

ToGather was a product design project for a NUS meetup app, where students could find others on campus to make friends and enjoy activities together.
Through this, my team and I experienced the end-to-end design process, from ugly wireframing to hi-fi prototyping.
I discovered that UX design is really about empathy and understanding what the user needs. It was also extremely important to talk to users,
because there will always be a mismatch of expectations and intuition between you (as the builder) and them (as the consumer).
The URL below takes you to our landing page.

© 2026 Jeremiah Yee