In a previous article, I explained how I migrated from microCMS + Next.js + React to EmDash + Astro + React. But as I kept developing the website, I got tired of declaring only:client="react" every single time I used React, so I decided to erase React too. A destroyer god, basically.
React Islands
When you use React in Astro, React components become islands.
The mechanism is reasonable because you can ship JavaScript only where it is needed. But this site had originally been Next.js + React, and I had forcibly migrated it to Astro + React, so the number of islands became ridiculous. Having to care about SSR and CSR every time also became annoying.
Does this site really need React that badly? Conclusion: no.
So I migrated.
Liquid Glass Is Too Annoying
The biggest problem in removing React was how to migrate Liquid Glass. I had been using a React library, so if I removed React, I had to implement it entirely myself.
Apparently Codex is not good at implementing Liquid Glass.
It tried to fake it with semi-transparent panels, thought blur was working when it was not, and left strange stain-like artifacts behind. In short, it was useless for implementing Liquid Glass.
In the end I had to read the original library code myself, understand how it worked, and then explain it to Codex.
I explained which layers were being composited, told it to use SVG filters, and instructed it to rebuild from scratch so weird parts from the existing implementation would not follow along. Only then did it finally work.
Nice
Once Liquid Glass was handled, the rest was mine. I moved the custom blog-related pages closer to EmDash page behavior so OGP and EmDash editing features could be used.
As a result, both blog posts and work entries now use EmDash data directly, with Astro adjusting the presentation.
React Is Actually Still Here
I thought I was finally done with React and removed the npm packages. Then the site stopped working. Apparently the EmDash admin pages are built with React. What is this.
In the end, I could not completely say goodbye to React, but at least React is gone from the user-facing parts of the site. Happy ending.
