more prep.
This commit is contained in:
1 parent
c53f40e604
commit
20d5ea092d
10 files changed
+104
-44
No files matched your search
@@ -12,12 +12,15 @@ Open **this repo root** as the Obsidian vault. Quartz is only the publisher; it
|
|||||||
|
|
||||||
```
|
```
|
||||||
archive/ # public — primary sources
|
archive/ # public — primary sources
|
||||||
threads/ # Twitter/X and similar
|
threads/<handle>/<YYYY-MM-DD-slug>/
|
||||||
|
# one thread: index.md is the author's chain
|
||||||
sources/ # talks, pages, other records
|
sources/ # talks, pages, other records
|
||||||
canvases/ # public — .canvas maps
|
canvases/ # public — .canvas maps
|
||||||
notes/ # public — authored / distilled writing
|
notes/ # public — authored / distilled writing
|
||||||
templates/ # not published
|
templates/ # not published
|
||||||
meta/ # not published — conventions, local attachments
|
meta/ # not published — conventions
|
||||||
|
assets/ # not published, gitignored — working media
|
||||||
|
secrets/ # not published, gitignored — cookies, host keys
|
||||||
private/ # not published, not pushed
|
private/ # not published, not pushed
|
||||||
publish/ # tracked overlay: quartz.config.yaml
|
publish/ # tracked overlay: quartz.config.yaml
|
||||||
site/ # local Quartz clone (gitignored; own remotes)
|
site/ # local Quartz clone (gitignored; own remotes)
|
||||||
@@ -34,7 +37,9 @@ site/ # local Quartz clone (gitignored; own remotes)
|
|||||||
| `type` | `archive` \| `canvas` \| `note` |
|
| `type` | `archive` \| `canvas` \| `note` |
|
||||||
| `source` | `twitter` \| `youtube` \| `odysee` \| `article` \| `original` \| `other` |
|
| `source` | `twitter` \| `youtube` \| `odysee` \| `article` \| `original` \| `other` |
|
||||||
| `source_url` | original URL |
|
| `source_url` | original URL |
|
||||||
| `author` | original author |
|
| `author` | original display name |
|
||||||
|
| `handle` | username without `@` |
|
||||||
|
| `post_id` | Twitter status id |
|
||||||
| `date` | original date `YYYY-MM-DD` |
|
| `date` | original date `YYYY-MM-DD` |
|
||||||
| `archived` | capture date |
|
| `archived` | capture date |
|
||||||
| `status` | `draft` \| `review` \| `published` |
|
| `status` | `draft` \| `review` \| `published` |
|
||||||
@@ -50,9 +55,11 @@ Templates: `templates/archive-source.md`, `templates/authored-note.md` (Template
|
|||||||
Images: absolute HTTPS URLs on your image host. Do not commit local binaries for published notes.
|
Images: absolute HTTPS URLs on your image host. Do not commit local binaries for published notes.
|
||||||
|
|
||||||
```md
|
```md
|
||||||

|

|
||||||
```
|
```
|
||||||
|
|
||||||
|
Keep local copies in `assets/` (not committed). Do not point notes at `assets/` or `./media/`.
|
||||||
|
|
||||||
YouTube and tweets (Quartz Obsidian-flavored Markdown):
|
YouTube and tweets (Quartz Obsidian-flavored Markdown):
|
||||||
|
|
||||||
```md
|
```md
|
||||||
@@ -108,12 +115,12 @@ Open http://localhost:8080
|
|||||||
|
|
||||||
## Add content and republish
|
## Add content and republish
|
||||||
|
|
||||||
1. New thread: Templater → `archive-source` → save under `archive/threads/`
|
1. New thread: create `archive/threads/<handle>/<YYYY-MM-DD-slug>/`. Templater → `archive-source` → save as `index.md` (the author's chain). Off-spine replies get their own notes in that folder. See `notes/How threads are organized.md`.
|
||||||
2. Transcribe posts in order. Host images. Optional YouTube/Odysee/tweet embeds.
|
2. Transcribe posts in order. Upload images to the image host; paste HTTPS URLs. Optional YouTube/Odysee/tweet embeds.
|
||||||
3. Distill in `notes/` with `authored-note`. Wikilink the archive record.
|
3. Distill in `notes/` with `authored-note`. Wikilink the archive record.
|
||||||
4. Set `draft: false` and `status: published`
|
4. Set `draft: false` and `status: published` when the capture has been reviewed.
|
||||||
5. Preview: `cd site; npx quartz build -d .. --serve`
|
5. Preview: `cd site; npx quartz build -d .. --serve`
|
||||||
6. Commit and push `main` (vault + `publish/`, never `site/`)
|
6. Commit and push `main` (vault + `publish/`, never `site/`, never `assets/` or `secrets/`)
|
||||||
|
|
||||||
Threadwell remotes: `origin` → https://github.com/Ed94/Threadwell.git only.
|
Threadwell remotes: `origin` → https://github.com/Ed94/Threadwell.git only.
|
||||||
Quartz remotes live in `site/` (`cd site; git pull`). After a Quartz pull, re-copy `publish/quartz.config.yaml`.
|
Quartz remotes live in `site/` (`cd site; git pull`). After a Quartz pull, re-copy `publish/quartz.config.yaml`.
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ type: archive
|
|||||||
source: twitter
|
source: twitter
|
||||||
source_url: https://x.com/
|
source_url: https://x.com/
|
||||||
author: ""
|
author: ""
|
||||||
|
handle: ""
|
||||||
|
post_id: ""
|
||||||
date: 2026-08-22
|
date: 2026-08-22
|
||||||
archived: 2026-08-22
|
archived: 2026-08-22
|
||||||
status: published
|
status: published
|
||||||
@@ -12,13 +14,14 @@ tags:
|
|||||||
- archive
|
- archive
|
||||||
- twitter
|
- twitter
|
||||||
- how-to
|
- how-to
|
||||||
description: Worked example of an archived thread note. Replace this when real threads land.
|
description: Worked example of a spine note. Real threads use a folder per thread.
|
||||||
aliases:
|
aliases:
|
||||||
- example-thread
|
- example-thread
|
||||||
|
in_reply_to: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
> [!info] Provenance
|
> [!info] Provenance
|
||||||
> Replace this file with a real thread. The shape is what matters: frontmatter, then posts in order, then optional media.
|
> Stub for the note shape. A real thread is a folder: `archive/threads/<handle>/<YYYY-MM-DD-slug>/index.md` plus optional branch notes. See [[How threads are organized]].
|
||||||
|
|
||||||
## Source
|
## Source
|
||||||
|
|
||||||
@@ -36,13 +39,13 @@ aliases:
|
|||||||
|
|
||||||
## Media
|
## Media
|
||||||
|
|
||||||
Images use absolute URLs on the image host:
|
Images use absolute HTTPS URLs:
|
||||||
|
|
||||||
```md
|
```md
|
||||||

|

|
||||||
```
|
```
|
||||||
|
|
||||||
Optional live tweet (not a substitute for the transcript):
|
A live tweet embed is optional and is not the archive:
|
||||||
|
|
||||||
```md
|
```md
|
||||||

|

|
||||||
@@ -50,4 +53,5 @@ Optional live tweet (not a substitute for the transcript):
|
|||||||
|
|
||||||
## Related
|
## Related
|
||||||
|
|
||||||
|
- How folders work: [[How threads are organized]]
|
||||||
- Distilled note: [[What this archive is for]]
|
- Distilled note: [[What this archive is for]]
|
||||||
@@ -8,6 +8,8 @@ tags:
|
|||||||
- archive
|
- archive
|
||||||
---
|
---
|
||||||
|
|
||||||
One note per thread. Transcribe the posts in order. Do not rely on a live embed as the only copy.
|
Threads are filed by author handle, then by date and title. The main note in each folder is that author's own chain. Replies live beside it.
|
||||||
|
|
||||||
Example: [[How to archive a thread]]
|
How to read a folder: [[How threads are organized]].
|
||||||
|
|
||||||
|
Example of the note shape (single spine, no branches): [[How to archive a thread]]
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
{"id":"canvases","type":"file","file":"canvases/index.md","x":400,"y":-80,"width":280,"height":80},
|
{"id":"canvases","type":"file","file":"canvases/index.md","x":400,"y":-80,"width":280,"height":80},
|
||||||
{"id":"notes","type":"file","file":"notes/index.md","x":400,"y":80,"width":280,"height":100},
|
{"id":"notes","type":"file","file":"notes/index.md","x":400,"y":80,"width":280,"height":100},
|
||||||
{"id":"example-thread","type":"file","file":"archive/threads/How to archive a thread.md","x":760,"y":-40,"width":300,"height":80},
|
{"id":"example-thread","type":"file","file":"archive/threads/How to archive a thread.md","x":760,"y":-40,"width":300,"height":80},
|
||||||
|
{"id":"how-organized","type":"file","file":"notes/How threads are organized.md","x":1100,"y":-40,"width":320,"height":80},
|
||||||
{"id":"example-note","type":"file","file":"notes/What this archive is for.md","x":760,"y":80,"width":300,"height":80}
|
{"id":"example-note","type":"file","file":"notes/What this archive is for.md","x":760,"y":80,"width":300,"height":80}
|
||||||
],
|
],
|
||||||
"edges":[
|
"edges":[
|
||||||
@@ -19,6 +20,7 @@
|
|||||||
{"id":"e6","fromNode":"archive","fromSide":"right","toNode":"sources","toSide":"left"},
|
{"id":"e6","fromNode":"archive","fromSide":"right","toNode":"sources","toSide":"left"},
|
||||||
{"id":"e7","fromNode":"threads","fromSide":"bottom","toNode":"example-thread","toSide":"top"},
|
{"id":"e7","fromNode":"threads","fromSide":"bottom","toNode":"example-thread","toSide":"top"},
|
||||||
{"id":"e8","fromNode":"notes","fromSide":"right","toNode":"example-note","toSide":"left"},
|
{"id":"e8","fromNode":"notes","fromSide":"right","toNode":"example-note","toSide":"left"},
|
||||||
{"id":"e9","fromNode":"example-thread","fromSide":"bottom","toNode":"example-note","toSide":"top","label":"distills"}
|
{"id":"e9","fromNode":"example-thread","fromSide":"bottom","toNode":"example-note","toSide":"top","label":"distills"},
|
||||||
|
{"id":"e10","fromNode":"example-thread","fromSide":"right","toNode":"how-organized","toSide":"left","label":"folder shape"}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -12,5 +12,6 @@ An archive of material that is not reliably web-indexed: Twitter/X threads, talk
|
|||||||
- [[archive/index|Archive]] — objective records of threads and other sources
|
- [[archive/index|Archive]] — objective records of threads and other sources
|
||||||
- [[canvases/index|Canvases]] — maps and relationship diagrams
|
- [[canvases/index|Canvases]] — maps and relationship diagrams
|
||||||
- [[notes/index|Notes]] — authored essays and syntheses
|
- [[notes/index|Notes]] — authored essays and syntheses
|
||||||
|
- [[How threads are organized]] — how a thread folder is laid out
|
||||||
|
|
||||||
Start a new record from the templates in `templates/`. Public folders publish by default; set `draft: true` to keep a note off the site.
|
Start a new record from the templates in `templates/`. Public folders publish by default; set `draft: true` to keep a note off the site.
|
||||||
+15
-8
@@ -10,16 +10,20 @@ draft: true
|
|||||||
| Field | Values | Notes |
|
| Field | Values | Notes |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `type` | `archive` \| `canvas` \| `note` | Required |
|
| `type` | `archive` \| `canvas` \| `note` | Required |
|
||||||
| `source` | `twitter` \| `youtube` \| `odysee` \| `article` \| `original` \| `other` | Archive + media notes |
|
| `source` | `twitter` \| `discord` \| `youtube` \| `odysee` \| `article` \| `original` \| `other` | Archive + media notes |
|
||||||
| `source_url` | URL | Canonical original |
|
| `source_url` | URL | This note's post, not always the thread root |
|
||||||
| `author` | string | Original author, not you |
|
| `author` | string | Display name |
|
||||||
|
| `handle` | string | Username without `@` |
|
||||||
|
| `post_id` | string | Twitter status id (spine root or branch root) |
|
||||||
| `date` | `YYYY-MM-DD` | Original publication date |
|
| `date` | `YYYY-MM-DD` | Original publication date |
|
||||||
| `archived` | `YYYY-MM-DD` | When you captured it |
|
| `archived` | `YYYY-MM-DD` | When you captured it |
|
||||||
| `status` | `draft` \| `review` \| `published` | Human workflow |
|
| `status` | `draft` \| `review` \| `published` | Human workflow |
|
||||||
| `draft` | `true` \| `false` | Quartz omit-from-site flag |
|
| `draft` | `true` \| `false` | Quartz omit-from-site flag |
|
||||||
| `tags` | list | Prefer `archive`, `twitter`, `note`, topic slugs |
|
| `tags` | list | Ingest: `archive`, `twitter`, handle. Topics by hand |
|
||||||
| `description` | string | Search / OG preview |
|
| `description` | string | Search / OG preview |
|
||||||
| `aliases` | list | Extra names |
|
| `aliases` | list | Extra names |
|
||||||
|
| `in_reply_to` | string | Foreign parent of a spine, if any |
|
||||||
|
| `parent_post_id` | string | Branch notes only: post this branch replies to |
|
||||||
|
|
||||||
`draft: true` hides the page from the built site. It does **not** hide the file from a public GitHub repo. Truly private material goes in `private/` (gitignored).
|
`draft: true` hides the page from the built site. It does **not** hide the file from a public GitHub repo. Truly private material goes in `private/` (gitignored).
|
||||||
|
|
||||||
@@ -28,24 +32,27 @@ draft: true
|
|||||||
| Path | Published | Role |
|
| Path | Published | Role |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `archive/` | yes | Primary sources |
|
| `archive/` | yes | Primary sources |
|
||||||
|
| `archive/threads/<handle>/<YYYY-MM-DD-slug>/` | yes | One Twitter thread. `index.md` is the author's chain |
|
||||||
| `canvases/` | yes | `.canvas` maps |
|
| `canvases/` | yes | `.canvas` maps |
|
||||||
| `notes/` | yes | Authored writing |
|
| `notes/` | yes | Authored writing |
|
||||||
| `templates/` | no | Templater / core templates |
|
| `templates/` | no | Templater / core templates |
|
||||||
| `meta/` | no | Vault rules, local attachments |
|
| `meta/` | no | Vault rules, local attachments |
|
||||||
|
| `assets/` | no, gitignored | Working media before upload |
|
||||||
|
| `secrets/` | no, gitignored | Cookies and image-host credentials |
|
||||||
| `private/` | no, gitignored | Never publish, never push |
|
| `private/` | no, gitignored | Never publish, never push |
|
||||||
| `site/` | no, gitignored | Local Quartz clone (own remotes) |
|
| `site/` | no, gitignored | Local Quartz clone (own remotes) |
|
||||||
| `publish/` | no | Tracked Quartz overlay |
|
| `publish/` | no | Tracked Quartz overlay |
|
||||||
|
|
||||||
|
A thread folder holds `index.md` (spine) and one markdown file per off-spine reply tree. Reading guide: `notes/How threads are organized.md`.
|
||||||
|
|
||||||
# Images
|
# Images
|
||||||
|
|
||||||
Always absolute HTTPS URLs on the image host. Do not commit local binaries for published notes.
|
Always absolute HTTPS URLs on the image host (catbox after upload). Do not commit local binaries for published notes. Working files sit in `assets/` (gitignored), not in `meta/attachments/` except unrelated Obsidian drops.
|
||||||
|
|
||||||
```md
|
```md
|
||||||

|

|
||||||
```
|
```
|
||||||
|
|
||||||
Scratch files may sit in `meta/attachments/` (gitignored).
|
|
||||||
|
|
||||||
# Video
|
# Video
|
||||||
|
|
||||||
YouTube / tweet (Quartz OFM):
|
YouTube / tweet (Quartz OFM):
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
title: How threads are organized
|
||||||
|
type: note
|
||||||
|
source: original
|
||||||
|
date: 2026-08-23
|
||||||
|
status: published
|
||||||
|
draft: false
|
||||||
|
tags:
|
||||||
|
- note
|
||||||
|
- how-to
|
||||||
|
description: How archived Twitter/X threads are filed and read.
|
||||||
|
---
|
||||||
|
|
||||||
|
Threads are grouped by **author handle**, then by **date and a short title**.
|
||||||
|
|
||||||
|
```
|
||||||
|
archive/threads/<handle>/<YYYY-MM-DD-slug>/
|
||||||
|
index.md ← the author's own chain (the spine)
|
||||||
|
YYYY-MM-DD-who-slug.md ← one file per reply that left that chain
|
||||||
|
```
|
||||||
|
|
||||||
|
## Spine
|
||||||
|
|
||||||
|
`index.md` is only what the author posted as a single chain: each post replies to the previous one of theirs. Posts are numbered **1/** **2/** in that order. Other people do not appear in this numbering.
|
||||||
|
|
||||||
|
If the first post is a reply to someone else, that other tweet is quoted at the top as context. It is not numbered as part of the spine.
|
||||||
|
|
||||||
|
## Branches
|
||||||
|
|
||||||
|
A reply from someone else, or a second chain the author started from an earlier post, is its own note in the same folder. Follow-ups on that reply stay in that note, including if the original author answers there.
|
||||||
|
|
||||||
|
The spine links out under the post that grew the branch. Each branch note links back to `index`.
|
||||||
|
|
||||||
|
## Tags
|
||||||
|
|
||||||
|
Every imported thread starts with `archive`, `twitter`, and the author's handle. Topic tags (`vulkan`, `crt`, `alsa`, …) are added by hand when the thread is reviewed.
|
||||||
|
|
||||||
|
## Images
|
||||||
|
|
||||||
|
Pictures on the site are ordinary HTTPS URLs. Working copies of files live outside what GitHub Pages serves. A note that is still being prepared is marked `draft: true` and does not appear on the site.
|
||||||
|
|
||||||
|
## Reading
|
||||||
|
|
||||||
|
Start at [[archive/threads/index|Threads]], pick a handle, then a date. The spine is the essay. Branch files are the conversation around it.
|
||||||
@@ -21,6 +21,8 @@ Threadwell holds material that search engines and platform pages do not keep rel
|
|||||||
| `notes/` | Your writing. What it means. |
|
| `notes/` | Your writing. What it means. |
|
||||||
| `canvases/` | Spatial maps between the two. |
|
| `canvases/` | Spatial maps between the two. |
|
||||||
|
|
||||||
An authored note should [[How to archive a thread|link the archive record]] instead of pasting the thread again.
|
How a thread is filed: [[How threads are organized]].
|
||||||
|
|
||||||
|
An authored note should wikilink the archive record instead of pasting the thread again.
|
||||||
|
|
||||||
Set `draft: true` until a note is ready. `archive/`, `canvases/`, and `notes/` publish otherwise.
|
Set `draft: true` until a note is ready. `archive/`, `canvases/`, and `notes/` publish otherwise.
|
||||||
@@ -10,3 +10,5 @@ tags: []
|
|||||||
Essays and syntheses. Link back to [[archive/index|archive]] records instead of restating the primary source.
|
Essays and syntheses. Link back to [[archive/index|archive]] records instead of restating the primary source.
|
||||||
|
|
||||||
Use the `authored-note` template. Example: [[What this archive is for]]
|
Use the `authored-note` template. Example: [[What this archive is for]]
|
||||||
|
|
||||||
|
Convention: [[How threads are organized]]
|
||||||
@@ -4,14 +4,19 @@ type: archive
|
|||||||
source: twitter
|
source: twitter
|
||||||
source_url:
|
source_url:
|
||||||
author:
|
author:
|
||||||
|
handle:
|
||||||
|
post_id: ""
|
||||||
date: <% tp.date.now("YYYY-MM-DD") %>
|
date: <% tp.date.now("YYYY-MM-DD") %>
|
||||||
archived: <% tp.date.now("YYYY-MM-DD") %>
|
archived: <% tp.date.now("YYYY-MM-DD") %>
|
||||||
status: draft
|
status: draft
|
||||||
draft: true
|
draft: true
|
||||||
tags:
|
tags:
|
||||||
- archive
|
- archive
|
||||||
|
- twitter
|
||||||
description:
|
description:
|
||||||
aliases: []
|
aliases: []
|
||||||
|
in_reply_to: ""
|
||||||
|
parent_post_id: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
> [!info] Provenance
|
> [!info] Provenance
|
||||||
@@ -23,26 +28,10 @@ aliases: []
|
|||||||
- Author:
|
- Author:
|
||||||
- Posted:
|
- Posted:
|
||||||
|
|
||||||
## Record
|
## Thread
|
||||||
|
|
||||||
**1/**
|
**1/**
|
||||||
|
|
||||||
## Media
|
|
||||||
|
|
||||||
```md
|
|
||||||

|
|
||||||
```
|
|
||||||
|
|
||||||
YouTube:
|
|
||||||
|
|
||||||
```md
|
|
||||||

|
|
||||||
```
|
|
||||||
|
|
||||||
Odysee:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<iframe width="560" height="315" src="https://odysee.com/$/embed/SLUG/CLAIM" allowfullscreen></iframe>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Related
|
## Related
|
||||||
|
|
||||||
|
- Spine: [[index]]
|
||||||
Reference in new issue
Block a user