Regular Notes

A fresh thought, moment, or observation.

I just renamed my two journal websites. Over the weekend, I spent some time thinking carefully about the positioning and goals of the two sites, and eventually made this decision. The English technical site is now Hack at https://hack.zlliang.me, and the Chinese personal site is now Muse at https://muse.zlliang.me.

This change updates the public branding, site names, workspace paths, and shared references from the earlier tech and days naming. I also updated the Vercel domains, and the old tech and days domains now redirect to the new ones. The commit is zlliang/zlliang@cf59692.

After the rename, I feel more confident that the two sites can grow for longer and on steadier footing.

#61 Regular Mar 30, 2026

I just finished a full Git history cleanup for my website monorepo to remove oversized historical image blobs. I used to track full-size images in the repo, which is not sustainable as my blogs grow.

I used sharp with a consistent baseline (size, edge limit, and quality ladder) to optimize images before rewriting history. The result was substantial: the total repo size, including history blobs in .git, dropped from about 500+ MB to 70+ MB (about -86%).

This was a Git history rewrite with git-filter-repo, so all commit hashes changed. I also updated commit references in my existing notes, including links in the zlliang/zlliang@xxxxxxx format and corresponding GitHub commit URLs.

After the migration, I also added a pre-commit hook that automatically optimizes newly added images to the same baseline, so future image growth stays controlled during normal commits. That setup was shipped in zlliang/zlliang@c139c11. At runtime, I still rely on Vercel’s image optimization to serve appropriate image variants for different devices and viewport sizes.

Most of the migration scripting, validation, and cleanup in this round was completed with help from Amp.

#60 Regular Mar 25, 2026

I just added support for post series on both https://tech.zlliang.me and https://days.zlliang.me. There is now a /posts/series index page, each series has its own page, and individual post pages can show the other posts in the same series in the sidebar.

This felt worth adding because some posts are clearly part of a longer thread rather than standalone pieces. On the tech site, Starting a Blog at the End of 2025 and Splitting My Websites and Finalizing My Writing Framework are now grouped under How I Write. On the days site, my January and February monthly posts are now grouped under the Life Monthly series.

The commit is zlliang/zlliang@e858356, which also closed issue #79. Unlike several recent blog infrastructure changes, this one was surprisingly mostly handwritten. I only used a coding agent for a few small parts.

Update Mar 30, 2026: In late March, I renamed my two journal websites. They are now Hack https://hack.zlliang.me and Muse https://muse.zlliang.me. See: Renamed the two journal websites to Hack and Muse.

#58 Regular Mar 23, 2026

I just finished a fairly big notes-navigation refresh for both https://tech.zlliang.me and https://days.zlliang.me. Archive pages by year, month, and day are now fully in place, and the sidebar now has a “Writing journey” heatmap.

This makes the notes feel much easier to browse as a body of work instead of a flat reverse-chronological list. For example, visit /notes/2026 for notes in 2026, /notes/2026/03 for notes in March 2026, and /notes/2026/03/19 for notes on Mar 19, 2026. Each cell in the heatmap takes you to the archive page for that specific day.

The "Writing journey" heatmap in the sidebar, with links to archive pages by year available from the main /notes archive pageThe "Writing journey" heatmap in the sidebar, with links to archive pages by year available from the main /notes archive page

A monthly archive page, where you can switch to other months or jump to a specific day in the current monthA monthly archive page, where you can switch to other months or jump to a specific day in the current month

The work happened in two commits: zlliang/zlliang@9ed325f and zlliang/zlliang@9786f32. Most of the implementation was done with help from the Codex app and Amp.

Update Mar 30, 2026: In late March, I renamed my two journal websites. They are now Hack https://hack.zlliang.me and Muse https://muse.zlliang.me. See: Renamed the two journal websites to Hack and Muse.

#54 Regular Mar 19, 2026

I just removed note tags from both https://tech.zlliang.me and https://days.zlliang.me.

While writing notes, I kept thinking about how tags should be organized. Sometimes I would spend quite a while deciding which tags to use, and that gradually turned them into a writing burden instead of a helpful tool. I found that tags are simply hard to plan well and maintain over the long term. On top of that, after adding search to notes a few days ago, part of the original value of tags was already covered. I would rather leave tags out for now and add them back only after I find a better way to organize notes.

Along the way, I also simplified the sidebar and reworked the /notes/types index page. The sidebar is now flatter and quieter, and the type index uses richer cards with counts and short descriptions.

The refreshed note types pageThe refreshed note types page

The main commit is zlliang/zlliang@8381e33, a cleanup and simplification pass across both sites that removed tags, flattened the sidebar, and improved how note types are presented. Most of the code was written with the help of the Codex app.

Update Mar 22, 2026: Removing tags also removed their old URLs, so I later added middleware handling for those legacy routes. Old tag pages now return 410 Gone while the other migrated note URLs keep working through redirects, which should make the cleanup clearer to search engines.

Update Mar 30, 2026: In late March, I renamed my two journal websites. They are now Hack https://hack.zlliang.me and Muse https://muse.zlliang.me. See: Renamed the two journal websites to Hack and Muse.

#53 Regular Mar 18, 2026

I have removed the world map from my landing page for now.

When I added it in February, I liked the idea: a compact visual trace of the places I have been, with links to travel posts when I had written one. But after living with it for a while, I kept feeling that the interaction was not good enough. It looked more interesting than it actually felt to use.

So I decided to simplify the page again. I would rather leave something out than keep a feature that feels half-finished. If I come up with a better concept and can polish it properly, I may bring it back in another form.

#52 Regular Mar 18, 2026

These days I’ve been working on new features and larger overhauls for my websites. It feels like I’m gradually preparing for the next step of their development. My three sites still share a lot of duplicated logic, including routing, components, and content categorization. Inspired by Starlight, I want to turn the theme into a reusable Astro integration. I created issue #80 to track the plan. This would not only help keep my codebase cleaner, but also make it easier for others to start writing with a minimal but opinionated framework.

#50 Regular Mar 17, 2026

I just added a search page for notes on both https://tech.zlliang.me and https://days.zlliang.me. There is now a search button in the header, plus a small search form in the sidebar on larger screens and on the home page on mobile. The search indexes note titles and bodies, and for post notes it also includes the full content of the related post. The implementation uses MiniSearch.

Enjoy the search feature!Enjoy the search feature!

While doing this, I also reworked note pagination across both sites. Instead of URLs like /notes/2, note archive pages now use query parameters such as /notes?page=2 and /notes/types/link?page=2. I wanted the pagination model to be simpler and closer to common blog conventions, especially after reading Google’s documentation on pagination.

The commit is zlliang/zlliang@5388c6d, which also closed issue #72.

Update Mar 22, 2026: This pagination change also changed note archive URLs, but I later added middleware-based redirects so legacy paths such as /notes/2 still resolve to the new query-parameter URLs. That should also make it easier for search engines to consolidate the old pagination routes.

Update Mar 30, 2026: In late March, I renamed my two journal websites. They are now Hack https://hack.zlliang.me and Muse https://muse.zlliang.me. See: Renamed the two journal websites to Hack and Muse.

#48 Regular Mar 16, 2026

Today I learned that Armin Ronacher also keeps two blogs: his well-known tech blog https://lucumr.pocoo.org, and a non-tech one https://dark.ronacher.eu. It made me feel that my approach to splitting writing across two blogs is a reasonable one, not just a personal quirk.

#47 Regular Mar 16, 2026

I added support for pinned posts on both https://tech.zlliang.me and https://days.zlliang.me in zlliang/zlliang@c283182, which also closed issue #77. There still are no real pinned posts on either site yet. I added the feature in advance for a post draft I am currently writing.

Over the past few days, I have been doing a series of minor blogging overhauls: reworking tags, adjusting parts of the UI, and cleaning up the agent skills and authoring references that support my blogging workflow. The more I work on both sites, the more I want to extract their highly similar logic into an Astro theme, something like my own small blog system in the spirit of Starlight.

One thing has become increasingly clear as I look back over my recent notes: I am doing noticeably better on the Chinese days site than on the English tech site. Part of that is simple fluency. But a more important part is that my technical notes still do not contain enough of my own thinking. Too often, they are just a pile of things I saw, rather than writing that helps me think or build a narrative of my own.

I want to keep that in mind and keep improving through writing.

Update Mar 30, 2026: In late March, I renamed my two journal websites. They are now Hack https://hack.zlliang.me and Muse https://muse.zlliang.me. See: Renamed the two journal websites to Hack and Muse.

#45 Regular Mar 14, 2026

I reverted the note number prefixes on both https://tech.zlliang.me and https://days.zlliang.me. Notes are now shown as #44 again instead of #tech44 or #days44.

I made the opposite change earlier this year because I thought the prefixes would make the two spaces clearer. After using them for a while, though, I found that they mostly added visual noise and mental overhead. The note number only needs to be unique within each site, so the extra prefix was solving a problem I don’t really have.

Update Mar 30, 2026: In late March, I renamed my two journal websites. They are now Hack https://hack.zlliang.me and Muse https://muse.zlliang.me. See: Renamed the two journal websites to Hack and Muse.

#44 Regular Mar 13, 2026

I just finished another round of cleanup on my https://tech.zlliang.me and https://days.zlliang.me websites. This time I reworked the note tags across both sites, aiming for a smaller and more durable taxonomy that better reflects long-term themes instead of one-off entities.

At the same time, I renamed the note category field to type for both websites. The canonical page is now /notes/types. This is a small breaking change, but I think the new naming is clearer.

Recently, I’ve started using Codex and GPT-5.4 heavily. They did an excellent job helping me complete this work and saved me a lot of time. Here are the commits: zlliang/zlliang@1e0c72b and zlliang/zlliang@97fb17a.

Update Mar 22, 2026: This introduced URL-level breaking changes, but I later added middleware-based redirects so old /notes/categories/... URLs continue to work. That should also help search engines consolidate signals more cleanly toward the new /notes/types/... routes.

Update Mar 30, 2026: In late March, I renamed my two journal websites. They are now Hack https://hack.zlliang.me and Muse https://muse.zlliang.me. See: Renamed the two journal websites to Hack and Muse.

#43 Regular Mar 13, 2026

Today, Astro 6.0 was released, and I upgraded all my personal websites. I also adopted its new Fonts API. I tried the Codex app for this upgrade, and it handled everything smoothly.

All the upgrade work was done by the Codex appAll the upgrade work was done by the Codex app

#41 Regular Mar 11, 2026

I just received the VS Code 1.111 release notes, and it looks like it may have shifted from a monthly release cycle to a weekly one. Many recent releases seem focused on Copilot, which I’ve completely turned off. If this weekly cadence continues, it might get annoying.

#40 Regular Mar 10, 2026

I just added a world map to my landing page, showing where I’ve been. Have a look! I’m looking forward to exploring more of this world!

Screenshot of the world mapScreenshot of the world map

Update Mar 18, 2026: I have removed this world map from my landing page for now. The interaction did not feel good enough, and I would rather keep the page simpler until I have a better, more polished idea. I wrote a short follow-up note about this change: Removed the world map from my landing page.

#33 Regular Feb 10, 2026

Here’s what I missed in the AI field this week — I was on holiday in Tokyo.

Two new models dropped within about 15 minutes of each other: Claude Opus 4.6 and GPT-5.3-Codex. Amp immediately adopted Opus 4.6 for its smart mode, but GPT-5.3-Codex is only available in their Codex app, not yet via the API. I believe Amp will adopt it for its deep mode once it’s generally available.

Amp is sunsetting the editor extension next month. It hasn’t been officially announced yet, but the team mentioned it in their latest Raising An Agent podcast episode. I use Amp exclusively through the editor extension, so unfortunately I’ll have to switch to the TUI version and get used to it.

Ghostty’s author Mitchell Hashimoto has been busy lately:

  • Ghostty’s updated AI usage policy for contributions. More and more open source projects are drowning in AI-generated issues and PRs submitted without human review — the slop. He proposed a new policy for dealing with this trend. It’s not against AI, but makes every AI-generated contribution accountable to a human.
  • Vouch, a community trust management system. A tool that puts the policy above into practice. To mitigate the slop burden, open source projects should build a network to identify trustworthy contributors.
  • My AI Adoption Journey. Mitchell’s reflections on his AI adoption journey. Most of it resonates with me — and probably with every thoughtful developer.
#32 Regular Feb 9, 2026

I just added a new note type called “collection notes”.

Collection notes gather resources on a single topic — books, articles, videos — in one place. Think of them as better-organized bookmark folders. Here’s the commit: zlliang/zlliang@db12925.

I’ve already written one on my Zilong’s Days (Chinese) website: Shinobu Yoshii’s works.

Update Mar 30, 2026: In late March, I renamed my two journal websites. They are now Hack https://hack.zlliang.me and Muse https://muse.zlliang.me. See: Renamed the two journal websites to Hack and Muse.

#27 Regular Jan 22, 2026

Today I spent a day trying to add i18n support to the website. I brainstormed ideas and documented them in a GitHub issue. I also tried to design and implement a translation key system and a new routing system, and wrote a lot of code.

In the end, I realized it makes both the site and my writing workflow more complicated than I’d like. Direct i18n support doesn’t feel like the right move right now — it adds friction and mental overhead, and I want to be able to just start writing when an idea comes up.

Since the website’s structure is entirely under my control, I want to design a content organization that genuinely fits my own writing habits while still being open and readable to different audiences. I don’t want to add structural complexity to the site just to satisfy a sense of “everything must be unified.”

So I’m going to park this issue for now. The site will stay focused on technical writing and public English content. Anything that doesn’t fit yet will live in my private Notion workspace, and I’ll revisit it later when it makes sense.

#21 Regular Jan 5, 2026

I just updated the license of this website. Now it’s dual-licensed: code under MIT, content under CC BY 4.0. Previously I used CC BY-NC-SA 4.0 for content, but decided to go more open — fewer restrictions, more sharing.

Here’s the commit: zlliang/zlliang@af99933.

#19 Regular Jan 4, 2026

I just noticed a gap between what I’m thinking and what I write. Ideally I’d write down everything, but sometimes a voice in my head whispers, “This thought isn’t worth it.” No. Go write it.

#18 Regular Jan 3, 2026
Page 1 / 2