Daeseon Yoo
Back to project
·Tech retro·2 min

Why I split content into post / note / knowledge / log

One bucket for everything fails three different audiences. Four content types with different visibility defaults each.

A single "Post" entity, like most blogs ship with, breaks down the moment the site is also a Notion replacement and a RAG index.

Three different audiences

A single bucket can't serve all three. The blog frontmatter becomes a status: draft | published | private-note | reference-card | … and ends up worse than a real type system.

The four types

TypeDefault visibilityDefault surfaceUsed for
postpublic/posts, sitemap, RSSPolished writeups for readers
noteprivatenone (admin only)Working memory, Notion-style
knowledgeunlisteddirect URL only, RAGAtomic factual reference cards
logpublic (per-kind)/projects/<slug> timelineProject journal (this entry)

Each type lives in its own directory:

/content/posts/{en,ko}/...
/content/notes/{en,ko}/...
/content/knowledge/{en,ko}/...
/content/logs/<project>/...

Why visibility defaults differ

What the RAG manifest sees

All four types. Visibility doesn't gate the manifest — RAG is for me, not the public. The visibility field is metadata the retrieval layer can filter on.

Trade-off

Four buckets is more cognitive surface than one. The admin editor has to support type selection and show different default visibility per type. Worth it because the alternative — one bucket with a tangled status field — is the same complexity hidden in a worse place.