Service Architecture Conventions

SkillAI & models

Service structure conventions for this codebase: routing, layering, and where code lives. Use whenever writing or modifying a service's server entry, route definitions, handlers, or adapters. Loads inline so it shapes structure as code is written.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Service Architecture Conventions skill

What this skill tells your AI

The instructions your AI receives, as published by thedecipherist/claude-code-mastery-project-starter-kit in .claude/skills/api-conventions/SKILL.md and read by ahel’s review.

Every service is three layers, one direction: server.tshandlers/adapters/. Apply while writing, not after.

Versioning

  • All routes live under /api/v1/. New endpoints are versioned from the first line. No unversioned routes "for now."

server.ts is thin

  • server.ts defines routes and delegates. Nothing else.
  • No business logic in server.ts or in a route definition. A route wires the request to a handler and returns its result.

handlers/ hold the logic

  • Business logic lives in handlers/, one file per domain.
  • A handler owns its domain's rules and orchestration. It calls adapters for anything external. It does not reach outside the process itself.

adapters/ wrap everything external

  • Database, external APIs, queues, anything outside the process goes through an adapter in adapters/. Handlers never touch them directly.
  • The database adapter uses StrictDB when it's installed, otherwise the native driver. Never Mongoose. A handler that imports a driver or calls an external API inline is wrong, that belongs in an adapter. The data adapter is the one place driver code lives, which is also where the mongodb-rules apply.

Service (package) separation

  • A service owns its domain and is reached through its interface. A package does not reach into another package's internals or its data. Call the owning service.
  • Code two services both need is hoisted to a shared layer, never imported sideways from a sibling.

The test: routes in server.ts read request-in, handler-call, response-out. Logic sits in handlers/. Anything that leaves the process goes through adapters/, and the data adapter uses StrictDB if installed, the native driver otherwise.

Signals

GitHub stars
338
Forks
40
Last commit
Jun 2026
Advanced
Catalog kind
skill
Gateway key
api-conventions-thedecipherist
Source
github.com/thedecipherist/claude-code-mastery-project-starter-kit