surfaces · session-level1:portfolio· ws 1:home2:thought-sandboxes*· reading: testing-the-p…2 surfaces[ / ] cycle
index (esc)~/thought-sandboxes/Testing the pipes — a formatting tour of thought sandboxes.md

Testing the pipes — a formatting tour of thought sandboxes

A kitchen-sink walk through everything this renderer can do — headings, code, tables, task lists, Obsidian embeds — doubling as the first post that ever left the vault.

This is the first post to flip hide: false and leave the vault, so it has one job: exercise every pipe between an Obsidian note and the page you're reading. Everything below is written in plain markdown in my vault, pushed to a private repo, and rebuilt into this site in about a minute — the same machinery described in the site's source.

If you're reading this in dark mode you're in the book; press t and the same document relights as paper. That's not two designs — it's one sheet under different light.

Text, the basic food groups

Emphasis comes in italic, bold, and both at once; struck-through regrets survive the trip too. Inline code like getPosts() and hide: false sinks back to the terminal ground, which is the one place the mux is allowed to bleed through the prose.

Links follow the site's rules: a link whose text names its destination, like harness.nz, opens directly in a new tab — but an ambiguous one, like the lab that taught me humility, asks before it takes you anywhere.

Blockquotes get the accent rule. Good for the sentence you want to argue with later — past me writes them, future me collects them.

Lists of every temperament

Unordered, with nesting:

  • the portfolio surface — five workspaces, one session
  • the sandbox surface — this one
    • drafts stay in the vault (hide: true)
    • published posts get rebuilt into static HTML
  • attachments ride along only when their post is published

Ordered, for when sequence is the point:

  1. write in Obsidian
  2. flip hide: false
  3. git push
  4. wait roughly one deploy

And the task list, straight from GFM:

  • headings feeding the outline in the sidebar
  • code blocks on the terminal ground
  • an image embedded with Obsidian wikilink syntax
  • a reader who made it to the end

Code keeps its accent

// the entire draft contract, more or less
export function getPosts(includeDrafts = process.env.SHOW_DRAFTS === "1") {
  return readVault("posts")
    .filter((p) => includeDrafts || !p.hide)
    .sort((a, b) => b.date.localeCompare(a.date));
}

Tables speak mono

pipe source verdict
frontmatter YAML block up top parsed
wikilinks ![[file.png]] resolved from attachments/
task lists GFM rendered
drafts hide: true never leave the vault

Images cross over from the vault

The embed below is Obsidian syntax — ![[wikilinks]] with a caption — resolving against the vault's attachments folder. This one is a render from my NASA MODIS wildfire visualization work, plotted onto a globe in Maya:

MODIS fire detections for one week, rendered onto a globe — from the 3D wildfires project
MODIS fire detections for one week, rendered onto a globe — from the 3D wildfires project

And when a wikilink points at something that never got pasted into the vault, the renderer refuses to pretend — this broken reference is here on purpose:

![[a screenshot i never took.png]]attachment not found in thoughts/attachments

That's the tour. The pipes hold. Everything after this post is just writing.

-- ibraheem amin · 518 words --