built from blocks. read as one.
A story is one page of words under a picture. An article is longer, and it is built from sections: a headline, paragraphs, headings, lists, quotes, tables, code. This page is one. Every setup step you have read was written the way you are about to write yours, in a file that lists its sections in order.
| File | What it holds |
|---|---|
| articles/my-first-article.ts | Your article: its details and its sections |
| registry.ts | The list of articles your site shows. The command adds yours |
| index.ts | A line the command adds for you. Leave it alone |

✓ Success: your article has its own page.
this is a work in progress
1️⃣ Create the File
Your copy has a small program that asks you a few questions, writes the article file, and adds it to your site's list of articles. On a Mac, run it in Terminal inside your copy. On Windows, open Git Bash from the Start menu (it came with git), move into your copy with cd, and run it there:
# Answer the questions it asks, then press Enter
./create-article| It asks | Answer with | Why |
|---|---|---|
| Slug | my-first-article | Your article's address. Lowercase words joined by dashes |
| Export const name | Press Enter | The name your code uses for it. The suggestion is right |
| Title | Your headline | Shown at the top and in search results |
| Description | One sentence | What Google and link previews show |
| Category | A short label, like NOTES. | Groups your articles |
| Published? | y | n keeps it hidden as a draft |
| Author | Your name | The byline |
It finishes by printing the file it made and a Registered: line with a name in capitals, like MY_FIRST_ARTICLE. That line means your site will show the article once you write it.
2️⃣ Write It
Open src/app/constants/editorial-articles/articles/my-first-article.ts. At the top are your answers. Below them, under sections, is a hero (your big opening line) and a long menu of other section types, each switched off with // at the start of the line. Change the hero, then switch sections on by deleting the // and filling in the ...:
coverImage: '/covers/cover-052.jpg', // your cover, across the top
sections: [
{
id: 'hero',
type: 'hero',
content: 'WHY I STARTED.',
metadata: { size: 'large', emphasis: true }
},
{ id: 'intro', type: 'paragraph', content: 'Every section needs its own id.', metadata: { dropCap: true } },
{ id: 'heading-1', type: 'heading', content: 'What Changed' },
{ id: 'list-1', type: 'list', content: 'First thing|Second thing|Third thing' },
{ id: 'quote-1', type: 'quote', content: 'Say the true thing.', metadata: { style: 'highlight' } },✍️ Five Rules for Section Text
- Apostrophes need a backslash — the text sits between single quotes, so it's must be typed as it\'s. Or write around it: it is
- Every id is different — intro, heading-1, heading-2. Two sections with the same id confuse the page
- List items are split by the pipe character — the tall straight line (Shift + backslash on most keyboards). An item itself can never contain one
- Bold and links work in paragraphs and lists — two stars for bold, and words for a link
- A drop cap takes the first letter — so start that paragraph with a plain letter, not a symbol or a star
3️⃣ Check It and Publish
Let your copy check your work. This reads every file and reports anything that does not fit together: a missing comma, an unescaped apostrophe, a name typed two ways:
# Check the whole project (takes about a minute)
npx tsc --noEmitIf it prints errors, each one starts with a file name and two numbers: the line and the column. Open that file, go to that line, and fix what it describes. Then run it again until it prints nothing.
Start your site with npm run dev and check:
- localhost:3000/article/my-first-article shows your article, with your cover and every section you switched on
- localhost:3000/article lists it near the top. Newest articles come first, and search articles finds it by title
In GitHub Desktop, the Changes list should hold three files: your article, registry.ts and index.ts. Write a summary like "Publish my first article", click Commit to main, then Push origin.
“Headline, sections, done. The same way this page was made.”
— unparty-app
🧯 If Something Is Off
- The page says 404 — published is false, or the command could not register it: it says so when it finishes, and prints what to add to registry.ts yourself
- tsc says "Cannot find name" — you renamed the name in capitals in your article file. Change it back, or change it in registry.ts to match
- The command says the name is already used — another article has that name in capitals. Run it again and type a different one when it asks for the export name
- tsc says "Unterminated string literal" — an apostrophe ended your text early. Add a backslash before it
- ./create-article says "Permission denied" — run bash create-article instead
- Windows says ./create-article is not recognized — you are in PowerShell. Use Git Bash for this one command
🤖 Ask Your LLM
Here is a draft I wrote: [paste it]. Tighten it without changing
my voice, and split it into a headline, short paragraphs, two or
three headings, and one list.
(In Claude Code, inside your copy)
Turn my draft into sections in
src/app/constants/editorial-articles/articles/my-first-article.ts
and run npx tsc --noEmit until it prints nothing. Do not change
my words.✅ You Are Done When
- Your article file has your headline and at least a paragraph, a heading and a list
- The command printed a Registered line, and npx tsc --noEmit prints nothing
- /article/my-first-article shows it on your computer and on your live site
- It is near the top of /article
Stories and articles are what you publish. Next is Your first project page: a page of its own for something you are building, the way unparty has one for each of its projects.
“One section at a time. That is how every page here was built.”
— unparty-app