Handles ALL NestJS and @lenne.tech/nest-server development tasks including module creation, service implementation, controller/resolver development, model definition, and debugging. Activates when working with src/server/ files, NestJS modules, services, controllers, resolvers, models, DTOs, guards, decorators, or REST/GraphQL endpoints. Supports monorepos (projects/api/, packages/api/). Covers lt server commands, @Roles/@Restricted security, CrudService patterns, and API tests. NOT for nest-server version updates (use nest-server-updating). NOT for TDD workflow orchestration (use building-stories-with-tdd).
Resources
13Install
npx skillscat add lennetech/claude-code/generating-nest-servers Install via the SkillsCat registry.
NestJS Server Development Expert
Ecosystem Context
Developers typically work in a Lerna fullstack monorepo created via lt fullstack init:
project/
├── projects/
│ ├── api/ ← nest-server-starter (depends on @lenne.tech/nest-server)
│ └── app/ ← nuxt-base-starter (depends on @lenne.tech/nuxt-extensions)
├── lerna.json
└── package.json (workspaces: ["projects/*"])Package relationships:
- nest-server-starter (template) → depends on @lenne.tech/nest-server (core package)
- nuxt-base-starter (template) → depends on @lenne.tech/nuxt-extensions → aligned with nest-server
- This skill covers
projects/api/and any code depending on@lenne.tech/nest-server
When to Use This Skill
- Creating/modifying NestJS modules, services, controllers, resolvers, models
- Running/debugging the NestJS server (
npm start,npm run dev,npm test) - Using
lt server module,lt server object,lt server addProp,lt server create - Creating API tests for controllers/resolvers
- Analyzing existing NestJS code, architecture, relationships
- Answering NestJS/@lenne.tech/nest-server questions
Rule: If it involves NestJS or @lenne.tech/nest-server in ANY way, use this skill!
Skill Boundaries
| User Intent | Correct Skill |
|---|---|
| "Create a NestJS module" | THIS SKILL |
| "Debug a service error" | THIS SKILL |
| "Add a REST endpoint" | THIS SKILL |
| "Update nest-server to v14" | nest-server-updating |
| "Write tests first, then implement" | building-stories-with-tdd |
| "Update npm packages" | maintaining-npm-packages |
| "Build a Vue component" | developing-lt-frontend |
| "Run lt fullstack init" | using-lt-cli |
Related Skills
developing-lt-frontend- For ALL Nuxt/Vue frontend development (projects/app/)building-stories-with-tdd- For TDD workflow (tests first, then implementation)using-lt-cli- For Git operations and Fullstack initializationnest-server-updating- For updating @lenne.tech/nest-server versions
In monorepo projects:
projects/api/orpackages/api/→ This skillprojects/app/orpackages/app/→developing-lt-frontend
CRITICAL RULES
Security (NON-NEGOTIABLE)
- NEVER remove/weaken
@Restricted()or@Roles()decorators - NEVER modify
securityCheck()to bypass security - ALWAYS analyze permissions BEFORE writing tests
- ALWAYS test with the LEAST privileged authorized user
- VERIFY decorator coverage with
lt server permissionsafter creating modules
Complete security rules: security-rules.md | OWASP checklist: owasp-checklist.md
Never Use declare Keyword
// WRONG - Decorator won't work!
declare name: string;
// CORRECT
@UnifiedField({ description: 'Product name' })
name: string;Details: declare-keyword-warning.md
Description Management
Apply descriptions consistently to EVERY component (Model, CreateInput, UpdateInput, Objects, Class-level decorators). Format: 'English text' or 'English (Deutsch)' for German input.
Complete guide: description-management.md
Quick Command Reference
# Create module (REST is default!)
lt server module --name Product --controller Rest
# Create SubObject
lt server object --name Address
# Add properties
lt server addProp --type Module --element User
# New project
lt server create <server-name>
# Permissions report (audit @Roles, @Restricted, securityCheck)
lt server permissions --format html --open
lt server permissions --format json --output permissions.json
lt server permissions --failOnWarnings # CI/CD modeAPI Style: REST is default. Use --controller GraphQL only when explicitly requested.
Complete configuration & property flags: configuration.md
TDD Recommendation
1. Write API tests FIRST (REST/GraphQL endpoint tests)
2. Implement backend code until tests pass
3. Iterate until all tests green
4. Then proceed to frontend (E2E tests first)For full TDD workflow orchestration, use building-stories-with-tdd skill.
Test Cleanup (CRITICAL)
afterAll(async () => {
await db.collection('entities').deleteMany({ createdBy: testUserId });
await db.collection('users').deleteMany({ email: /@test\.com$/ });
});Use separate test database: app-test instead of app-dev
Framework Essentials
- Read CrudService before modifying any Service (
node_modules/@lenne.tech/nest-server/src/core/common/services/crud.service.ts) - NEVER blindly pass all serviceOptions to other Services (only pass
currentUser) - Check if CrudService already provides needed functionality
Complete framework guide: framework-guide.md
Workflow (7 Phases)
- Analysis & Planning - Parse spec, create todo list
- SubObject Creation - Create in dependency order
- Module Creation - Create with all properties
- Inheritance Handling - Update extends, CreateInput must include parent fields
- Description Management - Extract from comments, apply everywhere
- Enum File Creation - Manual creation in
src/server/common/enums/ - API Test Creation - Analyze permissions first, use least privileged user
Complete workflow: workflow-process.md
Property Ordering
ALL properties must be in alphabetical order in Model, Input, and Output files.
Permissions Report
The @lenne.tech/nest-server includes a built-in permissions scanner that audits @Roles, @Restricted, and securityCheck() usage across all modules.
- CLI:
lt server permissions(generates MD/JSON/HTML report via AST scan — preferred) - Runtime: Enable
permissions: trueinconfig.env.tsfor a live dashboard atGET /permissions
The scanner detects: missing class-level @Restricted, endpoints without @Roles, models without securityCheck(), unrestricted fields, and unrestricted methods. Use after creating new modules to verify decorator coverage.
Verification Checklist
- All components created with descriptions (Model + CreateInput + UpdateInput)
- Properties in alphabetical order
- Permission analysis BEFORE writing tests
- Least privileged user used in tests
- Security validation tests (401/403 failures)
- Permissions report shows no new warnings (
lt server permissions --failOnWarnings) - All tests pass
Complete checklist: verification-checklist.md
Reference Files
| Topic | File |
|---|---|
| Permissions Report | Built-in: lt server permissions / GET /permissions |
| Service Health Check | service-health-check.md |
| Framework Guide | framework-guide.md |
| Configuration & Commands | configuration.md |
| Specification Format | reference.md |
| Examples | examples.md |
| Workflow Process | workflow-process.md |
| Description Management | description-management.md |
| Security Rules | security-rules.md |
| OWASP Checklist | owasp-checklist.md |
| Declare Keyword Warning | declare-keyword-warning.md |
| Quality Review | quality-review.md |
| Verification Checklist | verification-checklist.md |
| TypeScript Conventions | typescript-conventions.md |
TypeScript Language Server (Recommended)
| Operation | Use Case |
|---|---|
goToDefinition |
Find where a class/function/type is defined |
findReferences |
Find all usages of a symbol |
hover |
Get type info and documentation |
documentSymbol |
List all symbols in a file |
workspaceSymbol |
Search symbols across the project |
goToImplementation |
Find implementations of interfaces |
incomingCalls / outgoingCalls |
Analyze call dependencies |