Article Field Manual
Every block a project page can be built from, set on the workshop bench.
Contents
Navigation#
The rail on a wide screen lists every section and the headings under it. The same list sits in a disclosure when the column is narrow. A brass mark tracks how far the page has moved.
Contents rail#
Scroll the page and the active row follows the heading nearest the top. The number on the row matches the number above the section.
Heading anchors#
Each section heading keeps a quiet # at the end of the line. It appears on hover or when the link is focused, and it points at that heading.
Section pager#
The pager closes a section with the previous page, the next page, or both.
Inline elements#
A sentence can hold tallyVotes() for a name, Ctrl + K for a shortcut, a single marked phrase, an API with its expansion, and a link such as the archive. A note stays out of the line.[1]
Status badges#
Mark the state of a feature inline: Stable Beta Deprecated
Callouts#
Four rails. Note is the default. Tip keeps a patina edge. Warning uses copper on the left edge only. Danger frames the whole block in copper.
Code snippets#
Fenced code still renders. The blocks below are the same well, with a file name, a language, and a copy control.
Basic block#
export const config = {
name: "field-manual",
draft: false,
}Line numbers and highlights#
import queue def work(jobs): while not jobs.empty(): item = jobs.get() handle(item) jobs.task_done()Tabbed snippets#
const res = await fetch("/api/items?limit=10");
const data = await res.json();import requests
res = requests.get("/api/items", params={"limit": 10})
data = res.json()curl -s "/api/items?limit=10"Diff#
function handler(req) {- return req.body;+ return req.body ?? {}; }Terminal#
The copy control keeps the commands and drops the prompt and the replies.
$ npm run typecheckdone$ npm run build1 warning: unused export "draft"Code with explanation#
1. The function receives a list and a test.
2. It returns the first item that passes, or null.
function find(list, test) {
for (const item of list) {
if (test(item)) return item;
}
return null;
}Graph containers#
Pictures in this section are drawn in the page. The other tab holds a plain reading of the same edges. No diagram host is called.
Flowchart#
Page -> Check
Check -> StoreSequence#
Page -> Store: read
Store -> Page: rowState#
Idle -> Run
Run -> DoneClass diagram#
Article
+-- Section
+-- FigureTree containers#
Collapsible file tree#
Folders open and close. A wash marks the entry file. Added and removed files keep their own tone.
components/mdx/
- CodeBlock.tsxentry
media/
- Figure.tsx
- Gallery.tsx
- Contents.tsxnew
- Plate.tsx
- package.json
Plain text tree#
components/mdx +-- CodeBlock.tsx +-- Contents.tsx | +-- rail +-- Figure.tsx
Media#
Figure#
Image gallery#
Open a plate, then move with the buttons or the arrow keys.
Before and after#
Video#
Data#
Table#
| Option | Type | Default | Description |
|---|---|---|---|
name | string | none | Name on the card. required |
retries | number | 3 | How many times a failed write is tried again. |
timeout | number | 5000 | How long a call may wait, in milliseconds. |
verbose | boolean | false | Extra logs on the bench. Deprecated |
Comparison#
| Feature | Plate | Rail | List |
|---|---|---|---|
| Uses the page width | No | Yes | Partial |
| Separates sections | Partial | Yes | Yes |
| Shows where you are | No | Yes | Partial |
Bar chart#
Key figures#
Explaining functionality#
Steps#
- Install the package
The lockfile stays in the repo. Install from that file.
terminalbash$ npm install - Write the config
One file, next to the pages, with the name the card will show.
- Run the check
Typecheck, then build, before the page is called done.
API endpoint#
Creates one item and returns its id.
| Parameter | Type | Description |
|---|---|---|
namerequired | string | Display name of the item. |
tags | string[] | Optional list of tags. |
{
"name": "Field manual",
"tags": ["reference", "mdx"]
}{
"id": "itm_42",
"name": "Field manual"
}{
"error": "name is required"
}Content tabs#
sudo apt install field-manual.Keyboard shortcuts#
Pros and cons#
Pros
- The column keeps the page width
- Each block has its own frame
- The rail shows the active section
Cons
- A wide table still scrolls
- Diagrams are drawn by hand
- A poster is not a recording
Checklist#
- Read the header before the body
- Confirm the rail matches the headings
- Open the notes only when a sentence points there
Definition list#
- Rail
- The contents column. It lists sections and follows the one in view.
- Well
- A recessed frame for code, with a file name and a copy control.
- Plate
- One image with a caption. It can span the column or sit narrow.
Timeline#
- v1.2.0Rail addedSections and subheadings share one list, with a progress mark.
- v1.1.0Plate removedThe page is no longer one filled container.
- v1.0.0First benchHeader, callouts, code, and figures.
Formula#
Ttotal = n * (tread + twrite) + c
(1)Collapsible notes#
Where do the blocks live?
Each block is a component under the article folder, and the page registers it before the MDX runs.
What stays Markdown?
Paragraphs, lists, tables, links, and inline marks. Reach for a component when the paragraph cannot hold the block.
What happens with no recording?
The video block shows its poster and a play plate until a file is passed in.
Quotes and references#
Blockquote#
A project page is still a web page. Give each block a frame, and leave air between the sections.
Workshop notes, 2026
Pull quote#
The page is the width of the site. The blocks are what change.
Link card#
Project archive/archive/projectsDivider#
The note stays at the end of the page. back