commit d46b54b96b178b04a2e0f1818e2424de0d719b23 Author: Zhongwei Li Date: Sun Nov 30 08:43:08 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..e921da7 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "tech-stack", + "description": "Commands for setup or update of CLAUDE.md file with best practices for specific language or framework.", + "version": "1.0.0", + "author": { + "name": "Vlad Goncharov", + "email": "vlad.goncharov@neolab.finance" + }, + "commands": [ + "./commands" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7450861 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# tech-stack + +Commands for setup or update of CLAUDE.md file with best practices for specific language or framework. diff --git a/commands/add-typescript-best-practices.md b/commands/add-typescript-best-practices.md new file mode 100644 index 0000000..e7a816f --- /dev/null +++ b/commands/add-typescript-best-practices.md @@ -0,0 +1,42 @@ +--- +description: Setup TypeScript best practices and code style rules in CLAUDE.md +argument-hint: None required - creates standardized TypeScript guidelines +--- + +# Setup TypeScript Best Practices + +Create or update CLAUDE.md in with following content, write it strictly as it is, do not summaraise or introduce and new additional information: + +```markdown +## Code Style Rules + +### General Principles + +- **TypeScript**: All code must be strictly typed, leverage TypeScript's type safety features + +### Code style rules + +- Interfaces over types - use interfaces for object types +- Use enum for constant values, prefer them over string literals +- Export all types by default +- Use type guards instead of type assertions + +### Best Practices + +#### Library-First Approach + +- Common areas where libraries should be preferred: + - Date/time manipulation → date-fns, dayjs + - Form validation → joi, yup, zod + - HTTP requests → axios, got + - State management → Redux, MobX, Zustand + - Utility functions → lodash, ramda + +#### Code Quality + +- Use destructuring of objects where possible: + - Instead of `const name = user.name` use `const { name } = user` + - Instead of `const result = await getUser(userId)` use `const { data: user } = await getUser(userId)` + - Instead of `const parseData = (data) => data.name` use `const parseData = ({ name }) => name` +- Use `ms` package for time related configuration and environment variables, instead of multiplying numbers by 1000 +``` diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..0fa774d --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,45 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:NeoLabHQ/context-engineering-kit:plugins/tech-stack", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "ee8b1da67f83c4d87169862d6801573d0d038b78", + "treeHash": "f9fe666a57e7888b33a0b564f98df88721fbadf55fdad7737fb2df1b554537ce", + "generatedAt": "2025-11-28T10:12:12.072226Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "tech-stack", + "description": "Commands for setup or update of CLAUDE.md file with best practices for specific language or framework.", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "61c78678eab54c84ac6ca3edfcd724a81297ce474e59a4faa2e6a725c148e7fd" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "69f8672a97c449c2da5bfd90b3f6c840e29bb40c68509b2fa8ab6131df0c0e98" + }, + { + "path": "commands/add-typescript-best-practices.md", + "sha256": "69f81e829cdb3b0a731d4e7471e7ea1025f45be035ad8ee385c0b059034d18fe" + } + ], + "dirSha256": "f9fe666a57e7888b33a0b564f98df88721fbadf55fdad7737fb2df1b554537ce" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file