type: decision
status: active
timestamp: 2026-06-21
tags: [naming, repo, branding, best-practices, github, seo]

GitHub repo naming best practices — consolidated rules for the family

Single source for all naming rules v5+v6+best practices

GitHub repo naming best practices

Checklist before gh repo create

Every new repo slug must pass ALL of these checks:

#RulePattern
1lowercase kebab-casepdf-tools-app ? PdfToolsApp ? PDF_Tools_App ?
2No special charsletters + digits + hyphens only. No ., _, /, @.
3No version numbers in slugoriz-pdf-tools-app ? oriz-pdf-tools-app-v2 ? — version lives in tags
4Brand prefixoriz- for family repos (per v6). Exceptions: workspace, agents-md, setup, envpact-*, astro-*-npm-pkg, forks.
5Category in slug for SEOtool apps keep “tools” (oriz-pdf-tools-app); games drop category (oriz-2048-game); content apps name the function (oriz-blog-app).
6Role/runtime suffixfrom the locked v5 matrix: -app, -game, -kids-game, -api, -npm-pkg, -py-pkg, -rs-crate, -go-mod, -npm-cli, -py-cli, -rs-cli, -browser-ext, -vsc-ext, -mcp-server, -worker, -fn, -data, -skill, -rules, -dotfiles, -gh-action.
7Max 60 charsGitHub allows 100; UI truncates ~60. Keep under 60 for clean listings.
8Descriptive — not cuteRecruiter / future-me / agents must understand the role from the slug.
9No abbreviation past 2 lettersoriz-img-tools-app ? oriz-image-tools-app ? (exception: well-known acronyms like pdf, qr, fii, dii, mmi).
10Description ALWAYS setEvery gh repo create includes --description "..." naming the tech + role + positioning.
11Topics (5-10) ALWAYS setgh repo edit --add-topic ... for discoverability. Family-wide topics: oriz, chirag127, plus per-repo techs (astro, react, typescript, firebase, cloudflare-pages).
12Homepage URL set when deployed--homepage "https://<subdomain>.oriz.in"

Format

[brand-]<category>-<suffix>

Examples by category (see naming-policy-v6.md for the full matrix):

TypePatternExample
Tool apporiz-<category>-tools-apporiz-pdf-tools-app
Content apporiz-<function>-apporiz-blog-app
Game (adult)oriz-<game-name>-gameoriz-2048-game
Game (kids)oriz-<game-name>-kids-gameoriz-counting-1-10-kids-game
Static JSON APIoriz-<dataset>-apioriz-mmi-tracker-api
npm packageoriz-<role>-npm-pkgoriz-share-npm-pkg (future)
Astro npm packageastro-<role>-npm-pkgastro-shell-npm-pkg (Astro framework family convention)
npm CLIoriz-<name>-npm-clioriz-deploy-npm-cli (future)
Python CLIoriz-<name>-py-clioriz-scrape-py-cli (future)
Browser extensionoriz-<name>-browser-extoriz-bookmarks-browser-ext (future)
VS Code extensionoriz-<name>-vsc-extoriz-snippets-vsc-ext (future)
MCP serveroriz-<name>-mcp-serveroriz-knowledge-mcp-server (future)
CF Workeroriz-<name>-workeroriz-api-worker (future)
Cloud Functionoriz-<name>-fnoriz-og-image-fn (future)
Data repooriz-<name>-dataoriz-redirects-data (future)
Agent skill<name>-skillgrill-me-skill (no oriz- prefix — skills aren’t oriz-family products)
Agent rules<name>-rulesfamily-rules (no oriz- prefix)
Dotfiles<name>-dotfiles or bare setupsetup (vendor convention)
GH Action<name>-gh-actionenvpact-gh-action

Description format

Long, recruiter-readable, contains:

  1. What the repo is in plain English
  2. Tech stack explicitly named (e.g. “Astro 6 + React 19 islands + Tailwind v4”)
  3. Deploy target when relevant (e.g. “static, Cloudflare Pages”)
  4. Positioning when it differs from the obvious (e.g. “free, no card-on-file”)

GitHub renders the full string. Long descriptions ARE encouraged. Short vague descriptions (“PDF tools”) are a rule violation.

Topics

Required topics per repo (5-10):

TierTopicsAlways-on
Familyoriz, chirag127YES
Stackastro, react, typescript, tailwindcss-v4, firebase, cloudflare-pagesone or more per repo
Domainpdf-tools, image-tools, finance, kids-game, cli, mcp-serverper-repo
Category badgestatic-site, pwa, monorepo, ossper-repo

Set via gh repo edit chirag127/<repo> --add-topic oriz --add-topic chirag127 --add-topic <stack> ....

Anti-patterns to reject

Cross-refs


Edit on GitHub · Back to index