Includes multilingual etymology fields, seed data for starter names, and CI-ready Python project layout.
5.1 KiB
Writing READMEs and guides
House style for Markdown in Levkin repos. Goal: docs that read like a competent human wrote them for another engineer, not like a product page or a chatbot reply.
Agents: also follow ~/.cursor/rules/docs-writing.mdc and the humanizer
skill when rewriting prose.
What belongs where
| Doc | Job |
|---|---|
README.md |
What it is, how to run it, where config and deeper docs live |
docs/guides/*.md |
How-to for one task (deploy, upgrade, recover) |
docs/reference/*.md |
Stable facts (URLs, ports, schema, CLI flags) |
AGENTS.md / .cursorrules |
Short orientation for agents, not a second README |
CHANGELOG.md |
What changed, by version |
Scratch (*_PLAN, *_SUMMARY, FIX_*, HANDOFF, PROGRESS_*) |
Temporary. Archive or delete when done; do not polish as product docs |
Do not paste the same wall of text into README and three guides. Link once.
README checklist
Every repo README should answer these, in roughly this order:
- What — one or two plain sentences. Name the audience if it is not obvious.
- Status — active, beta, archived, research-only. Put archived status in a blockquote at the top.
- Run it — install or
makeentrypoint and one command that works. - Config —
.env.example, Infisical path (/apps/<repo>), or vault keys. Never real secrets. - Pointers — links to guides; do not duplicate them.
- License — or say the repo is private / personal.
Add when useful: short architecture sketch, known limits, deploy note ("ops runbooks live in the ansible repo").
Skip in READMEs: emoji decoration, marketing feature walls, welcome blurbs, kanban ceremony, and change-narration ("this was added to replace…").
Guide checklist
A how-to guide should:
- State the goal in the first sentence ("Deploy X on LXC Y").
- List prerequisites (access, packages, secrets location).
- Give ordered steps with copy-pasteable commands.
- End with a verify step and what "done" looks like.
- Link related runbooks instead of restating them.
One job per guide. Split if you need more than one primary verb.
Voice and formatting
Do
- Write in sentence case for headings:
## Getting started, not## Getting Started. - Prefer short paragraphs and concrete nouns (paths, hosts, commands).
- Use tables for env vars, ports, and host inventories.
- Use fenced code blocks with a language tag when it helps.
- Prefer
is/has/runsoverserves as/boasts/features. - Keep bold for rare emphasis (a warning, a path). Not for every label.
Do not
- Decorate headings or bullets with emoji (
🚀,✅,💡, …). If a CLI prints emoji, quote that output in a code block; do not restyle the doc around it. - Use bold-colon list items as fake headings:
- **Web-Based**: Modern React frontend…→ write a normal sentence or table. - Stuff feature lists with adjectives: state-of-the-art, seamless, robust, powerful, comprehensive, cutting-edge, production-ready, unlock, leverage, delve, landscape, tapestry, testament.
- Open with chatbot filler: "Welcome to…", "Here's what you need to know", "Let's dive in", "It is important to note that…".
- Overuse em dashes. Prefer a period, comma, colon, or parentheses.
- Title-Case Every Heading Like A Brochure.
- Invent facts, URLs, version numbers, or "experts say" attributions while editing.
Examples
Bad:
# 🚀 PunimTag
**Modern Photo Management and Facial Recognition System**
A fast, simple, and modern web application using state-of-the-art DeepFace AI.
## Key Features
- **Web-Based**: Modern React frontend with FastAPI backend
- **Privacy-First**: All data stored locally, no cloud dependencies
Good:
# PunimTag
Local photo library with face recognition (DeepFace / ArcFace). Admin UI
(React) and viewer (Next.js) share one monorepo and a PostgreSQL backend.
## Features
- Face detect and match with RetinaFace + ArcFace (or other listed models)
- Search by person, date, tag, or folder
- Runs on your machine; no cloud dependency for core data
Public vs private repos
Public READMEs and guides:
- No LAN IPs, no
10.0.10.x, no root SSH one-liners. - No absolute home paths (
/Users/…). - No other people's PII.
Private homelab docs (ansible, hermes, levkin) may name hosts and IPs. Still skip emoji and marketing tone.
Repos under Gitilia/* are push mirrors from Gitea. After merging a release or
public README/docs change, sync and verify from the ansible repo:
make github-mirror-sync then make github-mirror-health (see
ansible/docs/guides/github-mirrors.md).
When rewriting existing docs
- Preserve every real fact (commands, paths, versions, URLs).
- Cut fluff; keep the procedure.
- Fix formatting to match this guide in the same pass.
- Leave code blocks, frontmatter, and link targets intact unless the link is wrong.
- Scratch/status files: delete or move under
docs/archive/rather than "humanizing" a dead plan.
Related
- Project skeleton: this repo's root
README.md - Hard gates (CI, secrets, LICENSE):
~/.cursor/rules/new-project-standards.mdc - Tone scrub: Cursor skill
humanizer