Alpha: Ships on npm at 7.0.0-alpha.07.0.0-alpha.0
post
One post: a back link, a dateline, the body and share links.
Theme
SideworkPublication
vaultlineown4 sections
VanrosterSaaS
callboardown3 sections
DiffkeelDeveloper tool
certificateown3 sections
4 pages in 4 Businesses name post in this build.
Use post for one dated piece: a blog post, a release note, an issue of a letter. The article carries the back link to its blog page, the dateline, the body in the article Markdown subset, and share links where the Business wants them.
Sections in order
Vanroster /changelog/route-swaps, Diffkeel /changelog/0-9, Harbor tides /blog/tide-windows
Fields that matter
| Section type | Field | Type | Bounds | Refused as |
|---|---|---|---|---|
| article | head.title | string ≤80 | 1–80 | article.head.title |
| article | head.dek ? | string ≤360 | 1–360 | article.head.dek |
| article | head.back.label | string ≤16 | 1–16 | article.head.back.label |
| article | body | string ≤12000 | 1–12000 | article.body |
| article | share.on | 1–5 × "reddit" | "x" | "linkedin" | "bluesky" | "hackernews" | 1–5 | article.share.on |
Every field of article
| Field | Type | Req | Bounds | Refusal |
|---|---|---|---|---|
head | object | — | ||
head.back | object | — | ||
head.back.href | string ≤160 | yes | 1–160 | article.head.back.href |
head.back.label | string ≤16 | yes | 1–16 | article.head.back.label |
head.tag | string ≤20 | 1–20 | article.head.tag | |
head.dateline | object | — | ||
head.dateline.date | string (pattern) | yes | — | |
head.dateline.read | object | — | ||
head.title | string ≤80 | yes | 1–80 | article.head.title |
head.dek | string ≤360 | 1–360 | article.head.dek | |
share | object | — | ||
share.url | string ≤160 | yes | 1–160 | article.share.url |
share.title | string ≤80 | yes | 1–80 | article.share.title |
share.label | string ≤16 | yes | 1–16 | article.share.label |
share.on | 1–5 × "reddit" | "x" | "linkedin" | "bluesky" | "hackernews" | yes | 1–5 | article.share.on |
body | string ≤12000 | yes | 1–12000 | article.body |
copy | boolean | — |
Starter record
pages/sidework/issues/the-first-invoice.json4.3 KB post.json{
"$schema": "https://next.mdxui.dev/schema.json",
"theme": "vaultline",
"frame": "none",
"template": "post",
"title": "The first invoice · Sidework",
"description": "What goes on a first invoice, when to send it, and the one line that gets it paid on time.",
"meta": {"type":"article"},
"sections": [
{
"kind": "nav",
"shell": {"inset":"bleed","density":"none","surface":"glass","sticky":true},
"block": {
"type": "nav",
"menu": "overlay",
"collapse": 820,
"brand": {"href":"/","text":"Sidework","mark":"file-text"},
"links": [["/archive","Archive"],["/about","About"]],
"cta": {"href":"/subscribe","label":"Subscribe"}
}
},
{
"kind": "article",
"shell": {"inset":"article","density":"article"},
"block": {
"type": "article",
"head": {
"back": {"href":"/archive","label":"Archive"},
"tag": "Money",
"dateline": {"date":"2026-05-12","read":{"minutes":6,"unit":"min read"}},
"title": "The first invoice",
"dek": "What goes on it, when to send it, and the one line that gets it paid on time."
},
"share": {
"url": "https://sidework.example/issues/the-first-invoice",
"title": "The first invoice",
"label": "Share",
"on": ["linkedin","bluesky","x","reddit","hackernews"]
},
"copy": true,
"body": "The first invoice is where a side project becomes a business. It is also where most people undercharge, send late and wait.\n\n## Send it the day the work lands\n\nAn invoice sent with the work reads as part of the work. One sent a week later reads as a request. Attach it to the delivery email.\n\n## Seven lines, no more\n\n1. Your name or business name, and how to reach you.\n2. The client and the person who approves payment.\n3. An invoice number. Start at 1001; nobody needs to know it is your first.\n4. The date sent and the date due.\n5. One line per piece of work, each with its price.\n6. The total, and any tax on it.\n7. How to pay: one method, written out in full.\n\n## The line that gets it paid\n\n> Due 14 days from today, on 26 May.\n\nName the date, not the terms. \"Net 14\" asks the client to count. A date goes straight into a calendar.\n\n## The template\n\n```text\nINVOICE 1001 Sent 12 May 2026\n Due 26 May 2026\nFrom Your Name, you@mail.example\nTo The Client, accounts@client.example\n\nLogo design, three rounds 600.00\nBusiness letterhead 150.00\n Total 750.00\n\nPay by bank transfer to the account below.\n```\n\n## When it is late\n\nSend one short reminder the day after the due date. Issue 9 holds the three reminders that follow it."
}
},
{
"kind": "closing",
"shell": {"inset":"contained","density":"closing","surface":"tint"},
"block": {
"type": "closing",
"layout": "stack",
"head": {
"eyebrow": "Issue 2 is next",
"title": "Get the next 23.",
"lede": "Every Tuesday, one task done in full. The paid letter opens every back issue."
},
"actions": [
{"href":"/subscribe","label":"Subscribe","kind":"solid"},
{"href":"/archive","label":"The archive","kind":"ghost"}
]
}
},
{
"kind": "footer",
"shell": {"inset":"contained","density":"footer"},
"block": {
"type": "footer",
"layout": "row",
"brand": {"href":"/","text":"Sidework","mark":"file-text"},
"blurb": "One letter a week for people running a business beside a job.",
"columns": [
{"title":"Read","links":[["/archive","Archive"],["/issues/the-first-invoice","Issue 1"]]},
{"title":"Sidework","links":[["/about","About"],["/subscribe","Subscribe"],["/terms","Terms"]]}
],
"form": {
"action": "/subscribe/sent",
"label": "The Tuesday letter",
"placeholder": "you@mail.example",
"submit": "Subscribe"
},
"note": [
"Sidework is a worked example on mdxui.dev, not a customer.",
"Rendered by @mdxui/site. Forms here do not send."
]
}
}
]
}