Comprehensive developer toolkit providing reusable skills for Java/Spring Boot, TypeScript/NestJS/React/Next.js, Python, PHP, AWS CloudFormation, AI/RAG, DevOps, and more.
89
89%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Risky
Do not use without reviewing
Enforce consistent Data Transfer Object (DTO) patterns that bridge frontend and backend type safety in full-stack TypeScript monorepos.
DTOs in libs/shared/ are the single source of truth for data shapes used by both frontend and backend:
class-validator decorators for input validationDTOs used for input validation (request bodies) MUST be class with class-validator decorators:
// libs/shared/order-dto/src/lib/create-order.dto.ts
import { IsString, IsNumber, IsBoolean, ValidateNested, IsOptional } from 'class-validator';
import { Type } from 'class-transformer';
export class CreateOrderDto {
@IsString()
product_id: string;
@IsNumber()
quantity: number;
@IsBoolean()
is_draft: boolean;
@IsOptional()
@Type(() => ShippingAddressDto)
@ValidateNested()
shipping_address?: ShippingAddressDto;
}DTOs used for response types (read-only) MUST be interface:
// libs/shared/order-dto/src/lib/order.dto.ts
export interface OrderDto {
order_uuid: string;
status: OrderStatus;
total_amount: number;
customer_name: string;
created_at: string;
}Reusable container DTOs use class:
export class PaginatedResponseDto<T> {
count: number;
data: Array<T>;
}Enums use string values (never numeric). Enum values match their domain semantics:
// Status enums
export enum OrderStatus {
pending = 'pending',
processing = 'processing',
shipped = 'shipped',
delivered = 'delivered',
cancelled = 'cancelled',
}
// Role enums — code/acronym values
export enum UserRoleEnum {
superadmin = 'IT',
manager = 'MGR',
operator = 'OPR',
external = 'EXT',
}
// Type enums
export enum OrderType {
standard = 'standard',
express = 'express',
bulk = 'bulk',
}Place DTOs in shared libraries, grouped by domain:
libs/shared/
├── order-dto/
│ └── src/
│ ├── index.ts # Barrel export
│ └── lib/
│ ├── order.dto.ts # Read DTO (interface)
│ ├── create-order.dto.ts # Write DTO (class)
│ ├── update-order.dto.ts # Write DTO (class)
│ └── order-filters.dto.ts # Query params DTO
├── user-dto/
│ └── src/
│ ├── index.ts
│ └── lib/
│ ├── user.dto.ts
│ └── safe-user.dto.ts # Sanitized user (no sensitive fields)
└── global-types/
└── src/
├── index.ts
├── order-status.enum.ts
├── user-role.enum.ts
└── paginated-response.dto.ts| Type | Naming | Example |
|---|---|---|
| Read DTO | {Entity}Dto | OrderDto, UserDto |
| Create DTO | {Entity}CreateDto or Create{Entity}Dto | OrderCreateDto |
| Update DTO | {Entity}UpdateDto or Update{Entity}Dto | OrderUpdateDto |
| Sanitized DTO | Safe{Entity}Dto | SafeUserDto |
| Filter/Query DTO | {Entity}FiltersDto | OrderFiltersDto |
| Paginated response | PaginatedResponseDto<T> | PaginatedResponseDto<OrderDto> |
// Backend controller — uses class DTO for input, interface DTO for output
@Post('/orders')
async createOrder(
@Body() body: CreateOrderDto, // class with class-validator
): Promise<OrderDto> { // interface for response type
return this.orderService.create(body);
}
// Frontend hook — uses interface DTO for type safety
const result = useSwr<PaginatedResponseDto<OrderDto>>(
'/api/orders',
fetcher
);Export shared utility functions alongside role enums:
// libs/shared/role-dto/src/lib/role-utils.ts
export const InternalRoles = [UserRoleEnum.superadmin, UserRoleEnum.manager, UserRoleEnum.operator];
export const ExternalRoles = [UserRoleEnum.external];
export function canCreateOrders(role: UserRoleEnum): boolean {
return InternalRoles.includes(role);
}
export function canViewAllOrders(role: UserRoleEnum): boolean {
return [UserRoleEnum.superadmin, UserRoleEnum.manager].includes(role);
}// Shared enum — same file imported by both FE and BE
export enum OrderStatus {
pending = 'pending',
shipped = 'shipped',
}
// Frontend usage
const { data } = useSwr<OrderDto>(`/api/orders/${id}`, fetcher);
if (data?.status === OrderStatus.shipped) { /* ... */ }
// Backend usage
@UseGuards(AuthGuard)
@Get('/orders/:id')
async getOrder(@Param('id', ParseUUIDPipe) id: string): Promise<OrderDto> {
return this.orderService.findById(id);
}// Duplicating types between FE and BE
// frontend/types/order.ts
interface Order { id: string; status: string; }
// backend/dto/order.dto.ts
class OrderDto { id: string; status: string; }
// These will inevitably drift out of sync!
// Using 'any' instead of shared DTOs
const response = await fetch('/api/orders');
const data: any = await response.json();
// Numeric enum values
export enum OrderStatus {
Pending = 0, // Don't use numbers — use string values
Shipped = 1,
}docs
plugins
developer-kit-ai
developer-kit-aws
agents
docs
skills
aws
aws-cli-beast
aws-cost-optimization
aws-drawio-architecture-diagrams
aws-sam-bootstrap
aws-cloudformation
aws-cloudformation-auto-scaling
aws-cloudformation-bedrock
aws-cloudformation-cloudfront
aws-cloudformation-cloudwatch
aws-cloudformation-dynamodb
aws-cloudformation-ec2
aws-cloudformation-ecs
aws-cloudformation-elasticache
references
aws-cloudformation-iam
references
aws-cloudformation-lambda
aws-cloudformation-rds
aws-cloudformation-s3
aws-cloudformation-security
aws-cloudformation-task-ecs-deploy-gh
aws-cloudformation-vpc
references
developer-kit-core
agents
commands
skills
developer-kit-devops
developer-kit-java
agents
commands
docs
skills
aws-lambda-java-integration
aws-rds-spring-boot-integration
aws-sdk-java-v2-bedrock
aws-sdk-java-v2-core
aws-sdk-java-v2-dynamodb
aws-sdk-java-v2-kms
aws-sdk-java-v2-lambda
aws-sdk-java-v2-messaging
aws-sdk-java-v2-rds
aws-sdk-java-v2-s3
aws-sdk-java-v2-secrets-manager
clean-architecture
graalvm-native-image
langchain4j-ai-services-patterns
references
langchain4j-mcp-server-patterns
references
langchain4j-rag-implementation-patterns
references
langchain4j-spring-boot-integration
langchain4j-testing-strategies
langchain4j-tool-function-calling-patterns
langchain4j-vector-stores-configuration
references
qdrant
references
spring-ai-mcp-server-patterns
spring-boot-actuator
spring-boot-cache
spring-boot-crud-patterns
spring-boot-dependency-injection
spring-boot-event-driven-patterns
spring-boot-openapi-documentation
spring-boot-project-creator
spring-boot-resilience4j
spring-boot-rest-api-standards
spring-boot-saga-pattern
spring-boot-security-jwt
assets
references
scripts
spring-boot-test-patterns
spring-data-jpa
references
spring-data-neo4j
references
unit-test-application-events
unit-test-bean-validation
unit-test-boundary-conditions
unit-test-caching
unit-test-config-properties
references
unit-test-controller-layer
unit-test-exception-handler
references
unit-test-json-serialization
unit-test-mapper-converter
references
unit-test-parameterized
unit-test-scheduled-async
references
unit-test-service-layer
references
unit-test-utility-methods
unit-test-wiremock-rest-api
references
developer-kit-php
developer-kit-project-management
developer-kit-python
developer-kit-specs
commands
docs
hooks
test-templates
tests
skills
developer-kit-tools
developer-kit-typescript
agents
docs
hooks
rules
skills
aws-cdk
aws-lambda-typescript-integration
better-auth
clean-architecture
drizzle-orm-patterns
dynamodb-toolbox-patterns
references
nestjs
nestjs-best-practices
nestjs-code-review
nestjs-drizzle-crud-generator
nextjs-app-router
nextjs-authentication
nextjs-code-review
nextjs-data-fetching
nextjs-deployment
nextjs-performance
nx-monorepo
react-code-review
react-patterns
shadcn-ui
tailwind-css-patterns
tailwind-design-system
references
turborepo-monorepo
typescript-docs
typescript-security-review
zod-validation-utilities
references
github-spec-kit