type: decision
timestamp: 2026-06-20
tags: [naming, repo, npm, subdomain, family, branding]

Family-wide naming policy — repo, npm, subdomain

GitHub slug = npm name. Subdomains shorter. Suffix every repo

Naming policy across the family

The three name spaces

LayerConventionExample
GitHub repo slug<role-name>-<suffix> (lowercase, kebab-case)chirag127/pdf-tools-site
npm package name@chirag127/<same-as-repo-slug> (when published)@chirag127/firebase-init
SubdomainShortest single word possiblepdf.oriz.in

Rule of identity (when both exist): GitHub repo slug == npm package name (modulo the @chirag127/ scope). No divergence. If the package needs a different display name, that goes in package.json#name for the import path (which equals the repo slug) and package.json#publishConfig or README for the prose.

Rule of brevity for subdomains: Subdomains are typed by users every day. Optimize for typing speed. pdf.oriz.in not pdf-tools.oriz.in.

The role-suffix matrix (hybrid)

Sites and npm packages drop the suffix; everything else keeps it.

CategorySuffixExample
Static site(none)pages, lore, tabs
Astro / JS / TS npm package(none)astro-shell, firebase-init
Browser extension-extkagi-summarizer-ext
VS Code extension-vsc-extsnippets-vsc-ext
CLI tool-clideploy-cli
Cloudflare Worker-workerapi-worker
Cloudflare Function-fnog-image-fn
Model Context Protocol server-mcpknowledge-mcp
Static data repo-dataredirects-data

Sites + scoped npm packages drop the suffix because:

Other categories keep the suffix because the brand alone doesn’t tell you the runtime, and the suffix is the cheapest possible way to communicate it.

What goes in the suffix vs. inside the slug

The suffix names the runtime category — what kind of thing this is, where it deploys. The slug body names the function — what it does.

Brand prefix posture

Cross-platform identity

The same project may exist as a repo, an npm package, a subdomain, and a binary. Names align like this:

ProjectReponpmSubdomainBinary
PDF tools sitepdf-tools-site(not published)pdf.oriz.in(none)
Astro shell pkgastro-shell@chirag127/astro-shell(none)(none)
Deploy CLIoriz-deploy-cli@chirag127/oriz-deploy-cli(none)oriz-deploy
Knowledge MCPoriz-knowledge-mcp@chirag127/oriz-knowledge-mcp(none)(stdio)

The CLI binary name CAN be shorter than the package — oriz-deploy binary from @chirag127/oriz-deploy-cli is fine, since the binary is typed daily but the package is referenced rarely.

(Decided 2026-06-20.)


Edit on GitHub · Back to index