blog.git

blog

~ Personal research notes. blog.sqzer.com
git clone https://github.com/debuman/blog.git

content/_template.md (3065B)

      1 ---
      2 title: ""
      3 titleKo: ""
      4 date:
      5 deck: ""
      6 type:
      7 tags: []
      8 draft:
      9 ---
     10 
     11 Copy this file to `content/writing/<slug>.md`, fill the front matter in from the top, and
     12 replace everything below with the post. Keep it out of `content/writing/` while it is a
     13 template: the collection loads every `.md` in that directory, and a blank has no date.
     14 
     15 The filename is the address. A file named `tso.md` dated 2026-03-04 is published at
     16 `/writing/2026/tso/`, so the slug is worth choosing before the first save and is awkward
     17 to change afterwards — the old URL does not redirect.
     18 
     19 Leave any line you have nothing to say on exactly as it ships. Blank does not mean an
     20 empty element on the page: a blank field parses to nothing at all, and every page tests
     21 for a value before it draws anything, so a blank `deck:` produces no deck paragraph
     22 rather than an empty one. Only `title` and `date` have to be filled in.
     23 
     24 **title** — required, and the string the post is known by everywhere: the heading, the
     25 entry on /writing/, the browser tab, the feed item, the search result. Quoted because a
     26 title containing `:` or opening with `#` breaks an unquoted YAML value.
     27 
     28 **titleKo** — the original Korean title of a post that now carries an English one. No page
     29 prints it today; it is kept so a rename does not lose the first title. Blank: nothing.
     30 
     31 **date** — required, `YYYY-MM-DD`. It orders the whole site and supplies the year segment
     32 of the URL, so changing it later moves the post's address. It ships blank on purpose: a
     33 date inherited from a template is the day the template was written, and that wrong date
     34 would be baked into the URL. Blank stops the build with `date is not YYYY-MM-DD: (none)`.
     35 
     36 **deck** — the line under the title, set in the display face, saying what the post is. It
     37 is also the page's `<meta name="description">` and the post's description in the RSS feed.
     38 Blank: no deck is drawn, and the description falls back to the opening sentence of the
     39 post itself.
     40 
     41 **type** — `essay` or `research`, and nothing else; any other word stops the build. It is
     42 published as a `data-type` attribute on the entry in /writing/, which is what a later
     43 split into sub-views would key on. Blank: the attribute is omitted and the post is
     44 untyped, which is what every post on the site is today.
     45 
     46 **tags** — a list, written `tags: ["dns", "network"]`. The brackets ship filled in because
     47 they are the shape: a bare word after the colon is a string, not a list, and is rejected.
     48 Nothing on the site renders tags yet, so they are for the archive rather than the page.
     49 Blank or `[]`: no tag list, and the content gate prints a warning naming the post.
     50 
     51 **draft** — `true` withholds the post: it is dropped from /writing/ and from the feed, and
     52 no page is generated for it, so its URL 404s. `false` publishes, and so does a blank line;
     53 `yes` and `no` are words here, not booleans, and stop the build.
     54 It ships blank rather than `true` because a template that hides whatever is written from
     55 it produces a post that reads as finished, builds clean, and is nowhere on the site.