In the first entry I wrote about reworking six sites in a single evening. That was only possible because the sites live in one repository (a monorepo) and share one common package. This entry draws that structure as a map. In the figure above, tap a site node to expand the groups it uses, or open “view as list” to read the same content as text.
What it is made of
The repository holds one shared package, @site30cut/ads, and six sites. Four are run by me: Gyesan Moa, Geuljasu, Hyuil Moa and site30cut (this site). The other two are a cafe client site and a mobile car-polishing client site. The only workspace dependency of all six sites is this one package, and no site imports code from another site.
The package exposes 33 exports, which I split into six groups.
- Menu, 7: top bar, drawer menu, icons
- Ads, 4: ad slot, AdSense meta, Coupang links
- Search and sharing, 4: OG image, RSS, analytics, share buttons
- PWA and effects, 2: install manifest hookup, seasonal effects
- Forms and calculation, 9: input checks, calculator state, comparison, charts
- Common screens, 7: contact, privacy, 404, language switch, config
Why put it in one package
The reason is simple. If each site has its own menu, ad slot and PWA setup, every fix has to be made six times, and one or two sites are always missed. With one shared package a single fix changes all six sites, which is how I could touch six sites in one evening. The flip side is that one mistake can spread to all six, so changing the shared package means building all six sites as a matter of course.
Result: as of the 2026-10-19 build
scripts/arch-tree.mjs reads the package exports and each site’s imports. The figure and the numbers below come from the same data.
- Exports in the shared package: 33
- Exports used by all six sites: 12
- Exports no site uses directly, only used inside the package: 7
- Exports used per site: Gyesan Moa 22, Geuljasu 18, Hyuil Moa 19, site30cut 16, cafe client site 15, car-polishing client site 16
- Sites that use the form and calculation kit: Gyesan Moa, Geuljasu and Hyuil Moa, the three tool-type sites only
The shared package (packages/site-ads) has 29 commits, counted on 2026-10-19 with git log --oneline -- packages/site-ads.
What comes next
There is one limitation. The figure is generated when site30cut is built, and if another site changes only its imports, site30cut is not redeployed. The figure then updates at the next site30cut deploy, which is why it carries a build date. Redeploying on every commit to another site would cost more than it is worth.
The other open question is versioning of the shared package. Today every site sees the latest version, but as sites multiply, one may need to stay on an older one. I will write about the approach when that actually becomes necessary. You can also read how sites get built on the process page.