/SKILL.md
# Plaet Server Skill ## Description Specialized instructions for working with the Plaet backend API (Node.js + Express + Prisma). ## Commands ### Essential Commands ```bash cd server npm run dev # Start development server npm run build # TypeScript compilation npm run test # Run all tests npm run test:watch # Watch mode npm run lint # ESLint check npm run prettier # Format code npm run prisma:generate # Generate Prisma client npm run prisma:migrate #
npx skillsauth add nvimer/plaet-server plaet-serverInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Specialized instructions for working with the Plaet backend API (Node.js + Express + Prisma).
cd server
npm run dev # Start development server
npm run build # TypeScript compilation
npm run test # Run all tests
npm run test:watch # Watch mode
npm run lint # ESLint check
npm run prettier # Format code
npm run prisma:generate # Generate Prisma client
npm run prisma:migrate # Run migrations
npm run test -- src/api/users/user.service.test.ts # Single test file
npm run test:integration # Integration tests
src/api/{module}/
├── interfaces/ # Type contracts
├── {module}.controller.ts # Route handlers
├── {module}.service.ts # Business logic
├── {module}.repository.ts # Data access
├── {module}.validator.ts # Zod schemas
├── {module}.route.ts # Express routes
└── __tests__/ # Tests
HTTP Request → Middleware → Controller → Service → Repository → Database
restaurantId extracted from JWT tokenreq.userrouter.patch(
"/:id",
permissionMiddleware("users:update"),
controller.updateUser,
);
Models with tenant isolation: User, MenuCategory, MenuItem, Table, Order, Expense, CashClosure, DailyMenu, Customer, Inventory, PurchaseOrder
export const createItemSchema = z.object({
body: z.object({
name: z.string().min(2).max(100),
price: z.number().positive(),
}),
});
export type CreateItemInput = z.infer<typeof createItemSchema>["body"];
throw new CustomError("Error message", HttpStatus.BAD_REQUEST, "ERROR_CODE");
import { logger } from "../config/logger";
logger.info("User created", { userId });
any or unknowntools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.