Running a blog for years requires more than a pleasant editor. Creating files, organizing images, reviewing the real site, and publishing safely all need to feel dependable. This project began by treating hoonjung.dev and its local writing tool as two parts of one publishing system.

Why build both products together

The site and writing tool are separate products, but they share one blog format. Keeping them in separate repositories would make every content-rule change a coordination problem. The Astro site, Electron-based Publishing Studio, and shared schemas therefore live in one pnpm monorepo.

apps/site       public static site
apps/writer     local Publishing Studio
packages/       shared content rules

Keeping Markdown as the source

The only source of truth for a blog post is its Markdown file in the site repository. The writing app can disappear and the posts will still be readable, buildable, and recoverable through Git. I cover that choice in more detail in Keeping Markdown as the source of truth.

Separating publishing from saving

Autosave updates local files only. Changing public status and pushing to Git require the operator to inspect and approve the diff. Where mistakes are costly, explicit boundaries matter more than shaving off one click.

flowchart LR
  A[Write] --> B[Local save]
  B --> C[Preview]
  C --> D[Validate]
  D --> E[Approve]
  E --> F[Publish]

The first milestone is a site that renders and validates content correctly. The authoring experience and publishing safeguards can then grow on top of that stable foundation.