
Projects
2489 words / 14 min
GitHub Contributions
1481 commits in last year
The label I put on myself is TypeScript full-stack developer. But I am honestly not very confident about that title, which is why I added the tiny note saying "questionable" after it. I know very well that my current ability and experience are not enough to fully support the word "full-stack."
Development Path
Among all the projects I have worked on, almost 90% live in the TypeScript ecosystem. I have also used Python, Java, and even Rust, but more than 90% of that code was written by Agents anyway, usually just to finish specific one-off tasks such as coursework, competitions, or similar work. So I do not count those as languages I truly master. The first area I touched was front end, which I also mention on my GitHub profile, around 2022.
As for back end, at that time I only understood some basic concepts and had written a few simple demos. I touched PHP and Node.js in 2023. It was not until 2024 that I wrote my first TS project with Nest. From 2024 onward, I also started touching fields beyond front end, such as DevOps. In 2025, while helping a teacher with some work, I got a taste of RuoYi. My biggest takeaway was that Java feels extremely bloated, so I never went down the Spring Boot route.
On the other hand, I got into site building and operations relatively early, probably around 2020, because there was no real barrier to entry there. Back then I used Typecho and WordPress to build a site related to school, and that was more or less what opened the door to computing for me. Thanks to that, learning Web knowledge later on did not feel too stressful. I suspect there are not many people who got into Web by first doing site building and only then working backward into the rest of the field, but that is basically what happened to me. Anyway, if you forced me to name the language I am best at, it might actually be CSS.
Also, when I first touched front end in early 2023, LLMs were still almost incapable of independently writing front-end code, so CSS had to be adjusted entirely by hand. Even with today's Agents, it is still difficult to generate a genuinely beautiful UI design from just one sentence. That said, the pace of LLM development is genuinely shocking. Things change every month. About three months after GPT-3.5 came out, roughly January 2023, I first touched GPT. I only used it at the time to deal with a VB final exam. What shocked me was that GPT-3.5's answers could actually run. It felt completely unbelievable. Before that, I had almost no impression of AI at all. I did not understand YOLO or CNN, and I basically treated it like XiaoAi or Siri, the kind of assistant that was nearly unusable. Before I learned anything about machine learning, I even thought it was just some simple IF-ELSE state machine.
In 2023 I even shared a rented GPT Plus account. Starting in 2025 I subscribed to my own account and have kept doing so until now. Even though I was shocked, I had basically no sense of crisis for a long time. At that stage I mostly treated AI as a tutor and used it to ask questions. Once project complexity got higher, it still could not really handle things. In fact, I did not feel much real pressure until the first half of 2025 had already passed. It was only after the Vibe Coding idea started spreading and Claude 4 plus GPT 5 appeared that I developed even a slight sense of crisis. At that point, telling myself things like "humans still need to do architecture design" was basically self-deception.
I have heard that sentence in many places, but the people saying it are not necessarily excellent at architecture themselves. Real architectural trade-offs, implementation details, and performance issues still need to be polished out step by step. The more Agents take over, the more uneasy I feel. But I still have to use them, and I have completely surrendered to the reign of AI. From the release of GPT-3.5 until now, only four short years have passed, though four years is not exactly that short.
Should I switch over to embedded systems or hardware development?
A senior from junior college once casually told me, "If I switch into embedded, other people are full-stack, but I am someone who can do everything." A few months ago I really was wondering whether I should seriously think about that route, so I deliberately chose a graduation project that included an embedded implementation. But after finishing the project, reality told me very clearly that I cannot do that. Switching to a new track from scratch requires far more time to build up. Maybe all I would end up doing is having the Agent write firmware while I just click a button and flash it onto the board.
Embedded work requires more than code. It also demands the ability to solve electrical or physical problems in the real world. Is the wire inserted firmly? Is the air too humid? Is static electricity causing trouble? Why is the light not turning on? Why is data not coming through the serial port? Did I connect the GPIO pins backward? These were all real problems I ran into during the graduation project, and building that kind of experience from scratch feels exhausting.
Because of that, I truly do not know what else my core ability is supposed to be. So I can only pin the "full-stack" tag onto myself. GPT comforted me by saying that "being able to handle the last mile well is also a kind of ability." Hopefully that is true. If I can pass the civil service exam or get into graduate school in the future, that would naturally be even better. Lately I sometimes also imagine what I would look like in some completely different industry. Salesman Lemon? Electrician Lemon?
Milestones
Let me list a few projects that feel milestone-like to me, though there are not many. I can probably count them on one hand. Small tools or projects with little meaning are left out.
- The wiki and portal site for my own Minecraft server (2022). At the time, my MC server needed MediaWiki maintenance, so as the server owner I designed many versions of the homepage UI. During that process I got exposed to HTML, CSS, JavaScript, and PHP through MediaWiki.
Two years later, in July 2024, I first touched Vue while designing the server portal site. My first choice was actually Vue 2. With Vue, I made the first standard front-end project in my front-end learning history, meaning one that actually used a package manager. That project never launched because the functionality was a bit chaotic, and I kept telling myself I would spend time cleaning it up later, but that later never arrived.
In any case, designing things for my own MC server forced me to learn and touch a lot of knowledge, including not just front end but also website operations and general site-building knowledge. - The exam practice system I wrote for my classmates and myself during vocational school (2024), a front-end/back-end separated Web project based on Nest + Vue + TS. The very first version actually used a traditional JavaScript plus PHP mini back end. The Nest stack only came later during the summer 2024 refactor.
The site kept being updated until mid-2025 because the younger students still needed it, though eventually there was no next cohort after them, so updates stopped. It is now Public Archive.
Still, this was the first time I used a serious back-end framework to write a proper standard back-end project. I also went through the whole chain from implementation to deployment to testing to user feedback, meaning feedback from classmates and younger students. Looking back now, parts of it do feel like black history. - The CSS overrides I wrote for Wiki.js (2024), a pure SCSS project, and also the repository with my highest GitHub star count. There is not much technically worth pulling out and talking about here. I keep it mainly as a memorial. Maybe it is also my best-known project. Quite a few coders added me because of it, and some others came to ask about Wiki.js or MediaWiki deployment issues. Maybe you are reading this page because of that project too.
- My own intro site (2024), which is this site. It was the project I wrote after first touching the Nuxt full-stack framework. Beyond that there is not anything overwhelmingly dazzling about it. Well, actually there is: my unbelievably genius UI design. Seriously. I am quite satisfied with it. Do not say it was written by Agents. Agents only handle the parts I have already thought through. Every piece of UI on this site was tuned bit by bit by me. If you want to insult me, just call me stupid directly, but do not trash my project. Thank you.
- The portal site for my own Minecraft server (2026), a Nuxt-based Web project. There was actually a failed predecessor project before it. Once I finish it properly later, I will come back and add a fuller description. Treat this as a placeholder for now.
Learning Paradigm
Even after doing all those projects, I only feel more pessimistic. I used to assume, almost subconsciously, that as long as I mastered the basics of syntax, most difficult problems would naturally become solvable. Reality told me otherwise. So-called "mastering knowledge" is not just memorizing one set of API rules, or becoming fluent enough to recite advanced TypeScript type gymnastics and design patterns. I really used to believe, almost automatically, that if I understood Vue's reactivity or Node.js's event loop, I could bulldoze everything in engineering. I even bought courses on those topics. I also naively believed that with algorithms and data structures, it was enough to know the rough principles. After all, that kind of thing makes decent conversation material if you want to show technical ability in social settings.
Reality teaches people in one blow. The moment you enter a real scenario, the disguise falls apart. For example, building a full front-end/back-end separated architecture from scratch, handling CI/CD workflows, or even just migrating a project from SQLite to PostgreSQL during a refactor. Only then did I slowly realize that syntax is just a wrench. The real core ability is control over the entire system, or what I now call "engineering intuition." Even now, I still cannot understand why I used to follow such a logically broken learning paradigm. Once I actually push on it, it feels deeply unreasonable. Maybe only now do I finally have enough time and energy to summarize and review it properly. I also used to enjoy looking down on other people's projects in a very annoying way. When I was arrogant, everything looked easy and I felt like I could do it too. Thankfully, I have already hidden all those embarrassing comments and mini-essays.
Only when I started studying advanced mathematics did I realize that I need to sort out every condition and carefully analyze all possible cases. In essence, that is not very different from project development. People do instinctively beautify and hide their own behavior. When problems appear, it is easy to wave them away and move on. Maybe the root of many of these problems is that I never developed good study habits or good review habits while growing up. The world may be one giant chaotic system. Learning is tiring by nature. It requires ongoing investment and a huge amount of energy. But whether you truly "can" or "cannot" do something is known only to yourself.
Sadly, I only realized recently that learning must produce output. If I do not review, recall, and summarize things myself, how could I possibly improve quickly? What I call "project experience" may simply be experience accumulated unconsciously over years of running websites. When I later revisit the related knowledge points, understanding them just feels like a natural consequence. But learning only through practice and never summarizing is far too slow. If I want to improve, I have to take action. The deeper I look, the smaller I feel. In fact, I am still someone who has to ask an LLM even for i18n, and Nuxt packaging or HMR update issues can still cost me a huge amount of time. Every stage and every detail needs to be considered, even in a development ecosystem that is already highly abstracted.
Even though one of my tags says DevOps, the DevOps field is so broad and complicated that I can spend an entire day just getting one workflow barely configured. And when something unexpected happens in the middle, it can take a very long time to handle. I know that is part of the learning path. Still, when I call myself DevOps, I do feel a strong sense of guilt, because I am labeling myself. The same is true for Web and TypeScript. These labels are, in part, signs of insecurity. Engineer is a word with heavy responsibility attached to it.
Handling details and boundary conditions elegantly is hard. From that angle, I am just a humble code stitcher. From another angle, are humans not a kind of large language model too?
Technical Breadth
Anyway, that was a tangent. I have also touched a few languages and fields outside TypeScript and Web, at least to some degree. After all, the first language I systematically studied was C in 2021, even if I do not know it very deeply. Let me just list a few languages I have used.
- I have written some Minecraft Mods and Plugins in Java, with Agent assistance.
- I wrote a competition Web project in Rust, also with Agent assistance, and it later won national third prize.
- I have written some Python scripts for Excel processing, automatic sign-ins, and ML training, partly with Agent assistance. Also, because Python was part of the transfer-exam major courses, I spent one or two months reviewing the basics of Python syntax.
- I did my graduation project in C on top of an ESP32S3.
If I had to make a rough proficiency table, it would look like this:
- T0 (most familiar): HTML, CSS, TypeScript, including JavaScript.
- T1 (fairly familiar): Java, Python.
- T2 (looks familiar): Android development, since I took related classes and built a few course projects, plus Rust, C, and C++.
The top share on my GitHub is probably Vue and TypeScript. Sometimes after working all day, I open my profile and just seeing that whole wall of green dots already makes me feel a strong sense of achievement. Ha.
Updated 6/30/2026, 01:42
2489 words / 14 min