same number. now with words.
Last step you added a picture. This step you write what it is about. On your site, a story is a short piece of writing that belongs to one cover, and the two share a number: cover-052 goes with story-052. You write it in a plain text file, flip one word to publish it, and run one command so your site can find it.
| File | Where it lives | What it does |
|---|---|---|
| cover-052.jpg | public/covers/ | The picture (last step) |
| story-052.md | public/covers/stories/ | The words (this step) |
| storiesManifest.json | src/data/ | Your site's list of published stories and their addresses |

✓ Success: your story has its own page.
this is a work in progress
1️⃣ Start the File
Your copy can make an empty story for every cover that does not have one yet. In the terminal, inside your copy:
# Create a blank story for each cover without one
npm run generate-placeholder-storiesOpen public/covers/stories/story-052.md in your editor (use your own number). It already holds a draft that says "coming soon". Everything between the two --- lines is the story's details. Everything below them is the story itself.
2️⃣ Write It
Replace the details at the top with yours. Keep the --- lines, keep each detail on its own line, and keep the quote marks:
---
title: "Where It Started"
subtitle: "The first picture I added to my own site."
description: "One sentence for search engines and link previews."
author: "Your Name"
cover: "cover-052"
date: "2026-09-29"
category: "STORIES"
published: false
---| Detail | What it is for |
|---|---|
| title | The headline, and the words your story's address is made from |
| subtitle | One line under the headline |
| description | What Google and link previews show |
| author | Your name, shown as the byline |
| cover | Your cover's name, shown across the top. Leave it out and the page has no picture |
| published | false keeps it hidden; true puts it on your site |
Now delete the "coming soon" text below the second --- and write. The file uses Markdown, a few symbols that format plain text:
# A big heading
A paragraph is just lines of text.
Leave an empty line between paragraphs.
**Two stars** make text bold.
- A dash starts a list item
- Like this
[Words to click](https://example.com) make a link.3️⃣ Publish It
When you are happy with it, change published: false to published: true and save. Then run the one command that tells your site the story exists:
# Update your site's list of published stories
npm run get-storiesLook at your story file again. The command added a line at the top: slug: where-it-started. That is your story's address, made from its title. It stays even if you change the title later, so links people share keep working.
Start your site with npm run dev and check:
- localhost:3000/story/where-it-started (your own slug) shows your story, with your cover
- localhost:3000/story/cover-052 takes you to the same page. Numbers work too
- localhost:3000/covers: click your cover, and its preview offers Read More. This is how visitors find it
In GitHub Desktop, the Changes list should hold your story file and storiesManifest.json. Write a summary like "Publish my first story", click Commit to main, then Push origin.
“A picture and the words for it, at an address that is yours.”
— unparty-app
⚠️ The Command You Cannot Skip
- No npm run get-stories, no story — your site finds stories through storiesManifest.json, and publishing on Vercel does not rebuild that list. Forget the command and your live story says 404. Run it every time you publish a story or take one down
- Taking a story down works the same way — set published: false, run the command, and push
- Changing the address — edit the slug line yourself, then run the command. The old address stops working, so do it before you share the link
- Do not edit storiesManifest.json by hand — the command rewrites it every time
🧯 If It Says 404
- It is published: false — drafts are hidden on purpose. Change it to true and run npm run get-stories again
- get-stories did not list your slug — check that published: true is spelled exactly, with no quote marks around true, and that the file is named story- plus your cover's number
- It works on your computer but not live — storiesManifest.json was not in your commit. Run the command, then commit and push again
- The title still says "Story 052" — the file was not saved, or the details lost a --- line
🤖 Ask Your LLM
Here is a rough story I wrote for my website: [paste it].
Tighten it without changing my voice, and suggest a title,
a one-line subtitle, and a one-sentence description.
(In Claude Code, inside your copy)
Publish public/covers/stories/story-052.md: set published to
true, run npm run get-stories, and tell me the address it got.✅ You Are Done When
- story-052.md has your details, your words, and published: true
- npm run get-stories listed your slug, and the file now has a slug line
- Your story opens at /story/your-slug on your computer and on your live site
- Clicking your cover at /covers offers Read More
Stories are short and pinned to a picture. Next is Your first article: longer writing, with sections, like the one you are reading now.
“Write it plain. Publish it with one word.”
— unparty-app