@oriro/orirocli 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ATTRIBUTION.md +53 -53
- package/LICENSE +21 -21
- package/README.md +20 -17
- package/dist/cli.js +4425 -2975
- package/package.json +64 -64
- package/skills/1password/SKILL.md +118 -118
- package/skills/1password/references/cli-examples.md +29 -29
- package/skills/1password/references/get-started.md +21 -21
- package/skills/21stdev/SKILL.md +64 -64
- package/skills/algorithmic-art/LICENSE +21 -21
- package/skills/algorithmic-art/SKILL.md +446 -446
- package/skills/algorithmic-art/templates/generator_template.js +223 -223
- package/skills/algorithmic-art/templates/viewer.html +598 -598
- package/skills/apple-notes/SKILL.md +81 -81
- package/skills/apple-reminders/SKILL.md +122 -122
- package/skills/bear-notes/SKILL.md +111 -111
- package/skills/blogwatcher/SKILL.md +73 -73
- package/skills/blucli/SKILL.md +51 -51
- package/skills/brand-guidelines/LICENSE +21 -21
- package/skills/brand-guidelines/SKILL.md +76 -76
- package/skills/business/biz-analysis/LICENSE +21 -21
- package/skills/business/biz-analysis/SKILL.md +103 -103
- package/skills/business/biz-corporate-strategy/LICENSE +21 -21
- package/skills/business/biz-corporate-strategy/SKILL.md +76 -76
- package/skills/business/biz-customer-success/LICENSE +21 -21
- package/skills/business/biz-customer-success/SKILL.md +55 -55
- package/skills/business/biz-entrepreneurship/LICENSE +21 -21
- package/skills/business/biz-entrepreneurship/SKILL.md +72 -72
- package/skills/business/biz-hr/LICENSE +21 -21
- package/skills/business/biz-hr/SKILL.md +67 -67
- package/skills/business/biz-international/LICENSE +21 -21
- package/skills/business/biz-international/SKILL.md +51 -51
- package/skills/business/biz-leadership/LICENSE +21 -21
- package/skills/business/biz-leadership/SKILL.md +106 -106
- package/skills/business/biz-marketing-strategy/LICENSE +21 -21
- package/skills/business/biz-marketing-strategy/SKILL.md +119 -119
- package/skills/business/biz-negotiation/LICENSE +21 -21
- package/skills/business/biz-negotiation/SKILL.md +152 -152
- package/skills/business/biz-operations/LICENSE +21 -21
- package/skills/business/biz-operations/SKILL.md +74 -74
- package/skills/business/biz-project/LICENSE +21 -21
- package/skills/business/biz-project/SKILL.md +203 -203
- package/skills/business/biz-risk/LICENSE +21 -21
- package/skills/business/biz-risk/SKILL.md +85 -85
- package/skills/business/biz-sales/LICENSE +21 -21
- package/skills/business/biz-sales/SKILL.md +92 -92
- package/skills/business/biz-startup-ops/LICENSE +21 -21
- package/skills/business/biz-startup-ops/SKILL.md +70 -70
- package/skills/business/biz-strategy/LICENSE +21 -21
- package/skills/business/biz-strategy/SKILL.md +233 -233
- package/skills/business/biz-supply-chain-advanced/LICENSE +21 -21
- package/skills/business/biz-supply-chain-advanced/SKILL.md +68 -68
- package/skills/business/fin-chartered-exams/LICENSE +21 -21
- package/skills/business/fin-chartered-exams/SKILL.md +69 -69
- package/skills/camsnap/SKILL.md +49 -49
- package/skills/canvas/SKILL.md +82 -82
- package/skills/canvas-design/LICENSE +21 -21
- package/skills/canvas-design/SKILL.md +140 -140
- package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -94
- package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -93
- package/skills/coding-agent/SKILL.md +146 -146
- package/skills/communication/comm-business-writing/LICENSE +21 -21
- package/skills/communication/comm-business-writing/SKILL.md +67 -67
- package/skills/communication/comm-cross-cultural/LICENSE +21 -21
- package/skills/communication/comm-cross-cultural/SKILL.md +88 -88
- package/skills/communication/comm-journalism/LICENSE +21 -21
- package/skills/communication/comm-journalism/SKILL.md +81 -81
- package/skills/communication/comm-linguistics/LICENSE +21 -21
- package/skills/communication/comm-linguistics/SKILL.md +82 -82
- package/skills/communication/comm-negotiation/LICENSE +21 -21
- package/skills/communication/comm-negotiation/SKILL.md +120 -120
- package/skills/communication/comm-presentations/LICENSE +21 -21
- package/skills/communication/comm-presentations/SKILL.md +93 -93
- package/skills/communication/comm-public-speaking/LICENSE +21 -21
- package/skills/communication/comm-public-speaking/SKILL.md +68 -68
- package/skills/communication/comm-writing/LICENSE +21 -21
- package/skills/communication/comm-writing/SKILL.md +69 -69
- package/skills/craft/ai-engineering/LICENSE +21 -21
- package/skills/craft/ai-engineering/SKILL.md +828 -828
- package/skills/craft/app-builder-guide/LICENSE +21 -21
- package/skills/craft/app-builder-guide/SKILL.md +332 -332
- package/skills/craft/become-an-ai-engineer-26/CONTRIBUTING.md +46 -46
- package/skills/craft/become-an-ai-engineer-26/LICENSE +21 -21
- package/skills/craft/become-an-ai-engineer-26/README.md +270 -270
- package/skills/craft/become-an-ai-engineer-26/SKILL.md +667 -667
- package/skills/craft/become-an-ai-engineer-26/community/BUILDS.md +13 -13
- package/skills/craft/become-an-ai-engineer-26/community/DISCUSSIONS.md +8 -8
- package/skills/craft/become-an-ai-engineer-26/phases/phase-0-mental-models/README.md +14 -14
- package/skills/craft/become-an-ai-engineer-26/phases/phase-0-mental-models/project/TEMPLATE.md +33 -33
- package/skills/craft/become-an-ai-engineer-26/phases/phase-1-first-agent/README.md +25 -25
- package/skills/craft/become-an-ai-engineer-26/phases/phase-1-first-agent/code/raw_loop.py +126 -126
- package/skills/craft/become-an-ai-engineer-26/phases/phase-2-architecture/README.md +17 -17
- package/skills/craft/become-an-ai-engineer-26/phases/phase-3-harness/README.md +17 -17
- package/skills/craft/become-an-ai-engineer-26/phases/phase-4-evals/README.md +21 -21
- package/skills/craft/become-an-ai-engineer-26/phases/phase-4-evals/code/.github/workflows/eval.yml +40 -40
- package/skills/craft/become-an-ai-engineer-26/phases/phase-5-production/README.md +16 -16
- package/skills/craft/become-an-ai-engineer-26/projects/1-mobile-app-slm/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/2-self-improving-coder/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/3-video-editor-agent/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/4-personal-life-os/README.md +12 -12
- package/skills/craft/become-an-ai-engineer-26/projects/5-enterprise-workflow/README.md +12 -12
- package/skills/craft/become-an-ai-engineer-26/references/benchmark-numbers.md +41 -41
- package/skills/craft/become-an-ai-engineer-26/references/mhc-stable-training.md +73 -73
- package/skills/craft/become-an-ai-engineer-26/references/stack-decisions.md +37 -37
- package/skills/craft/become-an-ai-engineer-26/references/yarn-context-extension.md +123 -123
- package/skills/craft/codex-result-handling/LICENSE +21 -21
- package/skills/craft/codex-result-handling/SKILL.md +26 -26
- package/skills/craft/debug-and-build-methodology/LICENSE +21 -21
- package/skills/craft/debug-and-build-methodology/SKILL.md +432 -432
- package/skills/craft/design/LICENSE +21 -21
- package/skills/craft/design/SKILL.md +274 -274
- package/skills/craft/dev/LICENSE +21 -21
- package/skills/craft/dev/SKILL.md +12 -12
- package/skills/craft/dev/release.md +85 -85
- package/skills/craft/dev/roll.md +50 -50
- package/skills/craft/doc-coauthoring/LICENSE +21 -21
- package/skills/craft/doc-coauthoring/SKILL.md +397 -397
- package/skills/craft/focus/LICENSE +21 -21
- package/skills/craft/focus/SKILL.md +432 -432
- package/skills/craft/focus/UPSTREAM_README.md +233 -233
- package/skills/craft/gh/LICENSE +21 -21
- package/skills/craft/gh/SKILL.md +84 -84
- package/skills/craft/gh-skill/LICENSE +21 -21
- package/skills/craft/gh-skill/SKILL.md +121 -121
- package/skills/craft/godmode/LICENSE +21 -21
- package/skills/craft/godmode/SKILL.md +87 -87
- package/skills/craft/godmode/references/android-launch.md +680 -680
- package/skills/craft/godmode/references/data-gcp.md +1038 -1038
- package/skills/craft/godmode/references/expo-eas.md +816 -816
- package/skills/craft/godmode/references/ios-launch.md +734 -734
- package/skills/craft/google-ai-latest/LICENSE +21 -21
- package/skills/craft/google-ai-latest/SKILL.md +682 -682
- package/skills/craft/gpt-5-4-prompting/LICENSE +21 -21
- package/skills/craft/gpt-5-4-prompting/SKILL.md +63 -63
- package/skills/craft/gpt-5-4-prompting/references/codex-prompt-antipatterns.md +101 -101
- package/skills/craft/gpt-5-4-prompting/references/codex-prompt-recipes.md +150 -150
- package/skills/craft/gpt-5-4-prompting/references/prompt-blocks.md +172 -172
- package/skills/craft/grill-me/LICENSE +21 -21
- package/skills/craft/grill-me/SKILL.md +13 -13
- package/skills/craft/idea-to-deploy/LICENSE +21 -21
- package/skills/craft/idea-to-deploy/SKILL.md +292 -292
- package/skills/craft/idea-to-deploy/references/auth-playbook.md +195 -195
- package/skills/craft/idea-to-deploy/references/gcp-deployment.md +268 -268
- package/skills/craft/idea-to-deploy/references/stack-selection.md +117 -117
- package/skills/craft/image-generation-engineer/LICENSE +21 -21
- package/skills/craft/image-generation-engineer/SKILL.md +183 -183
- package/skills/craft/image-generation-engineer/references/architectures.md +260 -260
- package/skills/craft/image-generation-engineer/references/foundations.md +107 -107
- package/skills/craft/image-generation-engineer/references/inference-and-serving.md +253 -253
- package/skills/craft/image-generation-engineer/references/training.md +149 -149
- package/skills/craft/marketing/LICENSE +21 -21
- package/skills/craft/marketing/SKILL.md +1954 -1954
- package/skills/craft/master-architect/LICENSE +21 -21
- package/skills/craft/master-architect/SKILL.md +361 -361
- package/skills/craft/master-architect/references/ai-ml.md +317 -317
- package/skills/craft/master-architect/references/architecture.md +268 -268
- package/skills/craft/master-architect/references/auth-playbook.md +195 -195
- package/skills/craft/master-architect/references/cloud.md +323 -323
- package/skills/craft/master-architect/references/cyber.md +839 -839
- package/skills/craft/master-architect/references/data-eng.md +366 -366
- package/skills/craft/master-architect/references/devops.md +550 -550
- package/skills/craft/master-architect/references/gcp-deployment.md +268 -268
- package/skills/craft/master-architect/references/languages.md +748 -748
- package/skills/craft/master-architect/references/legacy.md +240 -240
- package/skills/craft/master-architect/references/mobile.md +447 -447
- package/skills/craft/master-architect/references/patterns.md +451 -451
- package/skills/craft/master-architect/references/saas-patterns.md +379 -379
- package/skills/craft/master-architect/references/sdlc.md +349 -349
- package/skills/craft/master-architect/references/stack-selection.md +117 -117
- package/skills/craft/oriro-ui-2026/LICENSE +21 -21
- package/skills/craft/oriro-ui-2026/SKILL.md +329 -329
- package/skills/craft/playwright-cli/LICENSE +21 -21
- package/skills/craft/playwright-cli/SKILL.md +393 -393
- package/skills/craft/playwright-cli/references/element-attributes.md +23 -23
- package/skills/craft/playwright-cli/references/playwright-tests.md +39 -39
- package/skills/craft/playwright-cli/references/request-mocking.md +87 -87
- package/skills/craft/playwright-cli/references/running-code.md +240 -240
- package/skills/craft/playwright-cli/references/session-management.md +226 -226
- package/skills/craft/playwright-cli/references/spec-driven-testing.md +312 -312
- package/skills/craft/playwright-cli/references/storage-state.md +275 -275
- package/skills/craft/playwright-cli/references/test-generation.md +134 -134
- package/skills/craft/playwright-cli/references/tracing.md +142 -142
- package/skills/craft/playwright-cli/references/video-recording.md +150 -150
- package/skills/craft/remotion-best-practices/LICENSE +21 -21
- package/skills/craft/remotion-best-practices/SKILL.md +345 -345
- package/skills/craft/remotion-best-practices/rules/3d.md +86 -86
- package/skills/craft/remotion-best-practices/rules/assets/charts-bar-chart.tsx +165 -165
- package/skills/craft/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +89 -89
- package/skills/craft/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +101 -101
- package/skills/craft/remotion-best-practices/rules/audio-visualization.md +195 -195
- package/skills/craft/remotion-best-practices/rules/audio.md +167 -167
- package/skills/craft/remotion-best-practices/rules/calculate-metadata.md +118 -118
- package/skills/craft/remotion-best-practices/rules/compositions.md +132 -132
- package/skills/craft/remotion-best-practices/rules/display-captions.md +176 -176
- package/skills/craft/remotion-best-practices/rules/ffmpeg.md +34 -34
- package/skills/craft/remotion-best-practices/rules/get-audio-duration.md +58 -58
- package/skills/craft/remotion-best-practices/rules/get-video-dimensions.md +68 -68
- package/skills/craft/remotion-best-practices/rules/get-video-duration.md +60 -60
- package/skills/craft/remotion-best-practices/rules/gifs.md +135 -135
- package/skills/craft/remotion-best-practices/rules/google-fonts.md +72 -72
- package/skills/craft/remotion-best-practices/rules/html-in-canvas.md +122 -122
- package/skills/craft/remotion-best-practices/rules/images.md +67 -67
- package/skills/craft/remotion-best-practices/rules/import-srt-captions.md +69 -69
- package/skills/craft/remotion-best-practices/rules/light-leaks.md +73 -73
- package/skills/craft/remotion-best-practices/rules/local-fonts.md +65 -65
- package/skills/craft/remotion-best-practices/rules/lottie.md +67 -67
- package/skills/craft/remotion-best-practices/rules/maplibre.md +441 -441
- package/skills/craft/remotion-best-practices/rules/measuring-dom-nodes.md +34 -34
- package/skills/craft/remotion-best-practices/rules/measuring-text.md +140 -140
- package/skills/craft/remotion-best-practices/rules/parameters.md +109 -109
- package/skills/craft/remotion-best-practices/rules/sequencing.md +144 -144
- package/skills/craft/remotion-best-practices/rules/sfx.md +30 -30
- package/skills/craft/remotion-best-practices/rules/silence-detection.md +73 -73
- package/skills/craft/remotion-best-practices/rules/subtitles.md +36 -36
- package/skills/craft/remotion-best-practices/rules/tailwind.md +11 -11
- package/skills/craft/remotion-best-practices/rules/text-animations.md +20 -20
- package/skills/craft/remotion-best-practices/rules/timing.md +130 -130
- package/skills/craft/remotion-best-practices/rules/transcribe-captions.md +70 -70
- package/skills/craft/remotion-best-practices/rules/transitions.md +193 -193
- package/skills/craft/remotion-best-practices/rules/transparent-videos.md +102 -102
- package/skills/craft/remotion-best-practices/rules/trimming.md +51 -51
- package/skills/craft/remotion-best-practices/rules/videos.md +169 -169
- package/skills/craft/remotion-best-practices/rules/voiceover.md +94 -94
- package/skills/craft/supabase-postgres-best-practices/CHANGELOG.md +25 -25
- package/skills/craft/supabase-postgres-best-practices/LICENSE +21 -21
- package/skills/craft/supabase-postgres-best-practices/SKILL.md +69 -69
- package/skills/craft/supabase-postgres-best-practices/references/_contributing.md +166 -166
- package/skills/craft/supabase-postgres-best-practices/references/_sections.md +47 -47
- package/skills/craft/supabase-postgres-best-practices/references/_template.md +34 -34
- package/skills/craft/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -49
- package/skills/craft/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/conn-limits.md +44 -44
- package/skills/craft/supabase-postgres-best-practices/references/conn-pooling.md +41 -41
- package/skills/craft/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -53
- package/skills/craft/supabase-postgres-best-practices/references/data-pagination.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/data-upsert.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/lock-advisory.md +56 -56
- package/skills/craft/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -68
- package/skills/craft/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -45
- package/skills/craft/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -44
- package/skills/craft/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -40
- package/skills/craft/supabase-postgres-best-practices/references/query-index-types.md +48 -48
- package/skills/craft/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -43
- package/skills/craft/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -45
- package/skills/craft/supabase-postgres-best-practices/references/schema-constraints.md +80 -80
- package/skills/craft/supabase-postgres-best-practices/references/schema-data-types.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -59
- package/skills/craft/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/schema-partitioning.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -61
- package/skills/craft/supabase-postgres-best-practices/references/security-privileges.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/security-rls-basics.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/security-rls-performance.md +63 -63
- package/skills/craft/uipm-banner-design/LICENSE +21 -21
- package/skills/craft/uipm-banner-design/SKILL.md +201 -201
- package/skills/craft/uipm-banner-design/references/banner-sizes-and-styles.md +129 -129
- package/skills/craft/uipm-brand/LICENSE +21 -21
- package/skills/craft/uipm-brand/SKILL.md +104 -104
- package/skills/craft/uipm-brand/references/approval-checklist.md +184 -184
- package/skills/craft/uipm-brand/references/asset-organization.md +167 -167
- package/skills/craft/uipm-brand/references/brand-guideline-template.md +161 -161
- package/skills/craft/uipm-brand/references/color-palette-management.md +203 -203
- package/skills/craft/uipm-brand/references/consistency-checklist.md +105 -105
- package/skills/craft/uipm-brand/references/logo-usage-rules.md +204 -204
- package/skills/craft/uipm-brand/references/messaging-framework.md +91 -91
- package/skills/craft/uipm-brand/references/typography-specifications.md +265 -265
- package/skills/craft/uipm-brand/references/update.md +128 -128
- package/skills/craft/uipm-brand/references/visual-identity.md +109 -109
- package/skills/craft/uipm-brand/references/voice-framework.md +99 -99
- package/skills/craft/uipm-brand/scripts/extract-colors.cjs +333 -333
- package/skills/craft/uipm-brand/scripts/inject-brand-context.cjs +324 -324
- package/skills/craft/uipm-brand/scripts/sync-brand-to-tokens.cjs +269 -269
- package/skills/craft/uipm-brand/scripts/validate-asset.cjs +361 -361
- package/skills/craft/uipm-brand/templates/brand-guidelines-starter.md +280 -280
- package/skills/craft/uipm-design/LICENSE +21 -21
- package/skills/craft/uipm-design/SKILL.md +305 -305
- package/skills/craft/uipm-design/data/cip/deliverables.csv +50 -50
- package/skills/craft/uipm-design/data/cip/industries.csv +20 -20
- package/skills/craft/uipm-design/data/cip/mockup-contexts.csv +20 -20
- package/skills/craft/uipm-design/data/cip/styles.csv +20 -20
- package/skills/craft/uipm-design/data/icon/styles.csv +16 -16
- package/skills/craft/uipm-design/data/logo/colors.csv +56 -56
- package/skills/craft/uipm-design/data/logo/industries.csv +56 -56
- package/skills/craft/uipm-design/data/logo/styles.csv +56 -56
- package/skills/craft/uipm-design/references/banner-sizes-and-styles.md +129 -129
- package/skills/craft/uipm-design/references/cip-deliverable-guide.md +111 -111
- package/skills/craft/uipm-design/references/cip-design.md +121 -121
- package/skills/craft/uipm-design/references/cip-prompt-engineering.md +94 -94
- package/skills/craft/uipm-design/references/cip-style-guide.md +76 -76
- package/skills/craft/uipm-design/references/design-routing.md +226 -226
- package/skills/craft/uipm-design/references/icon-design.md +122 -122
- package/skills/craft/uipm-design/references/logo-color-psychology.md +113 -113
- package/skills/craft/uipm-design/references/logo-design.md +92 -92
- package/skills/craft/uipm-design/references/logo-prompt-engineering.md +176 -176
- package/skills/craft/uipm-design/references/logo-style-guide.md +129 -129
- package/skills/craft/uipm-design/references/slides-copywriting-formulas.md +92 -92
- package/skills/craft/uipm-design/references/slides-create.md +5 -5
- package/skills/craft/uipm-design/references/slides-html-template.md +374 -374
- package/skills/craft/uipm-design/references/slides-layout-patterns.md +155 -155
- package/skills/craft/uipm-design/references/slides-strategies.md +97 -97
- package/skills/craft/uipm-design/references/slides.md +42 -42
- package/skills/craft/uipm-design/references/social-photos-design.md +353 -353
- package/skills/craft/uipm-design/scripts/cip/core.py +215 -215
- package/skills/craft/uipm-design/scripts/cip/generate.py +484 -484
- package/skills/craft/uipm-design/scripts/cip/render-html.py +424 -424
- package/skills/craft/uipm-design/scripts/cip/search.py +127 -127
- package/skills/craft/uipm-design/scripts/icon/generate.py +487 -487
- package/skills/craft/uipm-design/scripts/logo/core.py +175 -175
- package/skills/craft/uipm-design/scripts/logo/generate.py +362 -362
- package/skills/craft/uipm-design/scripts/logo/search.py +114 -114
- package/skills/craft/uipm-design-system/LICENSE +21 -21
- package/skills/craft/uipm-design-system/SKILL.md +255 -255
- package/skills/craft/uipm-design-system/data/slide-backgrounds.csv +11 -11
- package/skills/craft/uipm-design-system/data/slide-charts.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-color-logic.csv +14 -14
- package/skills/craft/uipm-design-system/data/slide-copy.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-layout-logic.csv +16 -16
- package/skills/craft/uipm-design-system/data/slide-layouts.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-strategies.csv +16 -16
- package/skills/craft/uipm-design-system/data/slide-typography.csv +15 -15
- package/skills/craft/uipm-design-system/references/component-specs.md +236 -236
- package/skills/craft/uipm-design-system/references/component-tokens.md +214 -214
- package/skills/craft/uipm-design-system/references/primitive-tokens.md +199 -199
- package/skills/craft/uipm-design-system/references/semantic-tokens.md +215 -215
- package/skills/craft/uipm-design-system/references/states-and-variants.md +243 -243
- package/skills/craft/uipm-design-system/references/tailwind-integration.md +257 -257
- package/skills/craft/uipm-design-system/references/token-architecture.md +226 -226
- package/skills/craft/uipm-design-system/scripts/embed-tokens.cjs +97 -97
- package/skills/craft/uipm-design-system/scripts/fetch-background.py +317 -317
- package/skills/craft/uipm-design-system/scripts/generate-slide.py +753 -753
- package/skills/craft/uipm-design-system/scripts/generate-tokens.cjs +213 -213
- package/skills/craft/uipm-design-system/scripts/html-token-validator.py +327 -327
- package/skills/craft/uipm-design-system/scripts/search-slides.py +218 -218
- package/skills/craft/uipm-design-system/scripts/slide-token-validator.py +35 -35
- package/skills/craft/uipm-design-system/scripts/slide_search_core.py +453 -453
- package/skills/craft/uipm-design-system/scripts/validate-tokens.cjs +254 -254
- package/skills/craft/uipm-design-system/templates/design-tokens-starter.json +143 -143
- package/skills/craft/uipm-slides/LICENSE +21 -21
- package/skills/craft/uipm-slides/SKILL.md +45 -45
- package/skills/craft/uipm-slides/references/copywriting-formulas.md +92 -92
- package/skills/craft/uipm-slides/references/create.md +5 -5
- package/skills/craft/uipm-slides/references/html-template.md +374 -374
- package/skills/craft/uipm-slides/references/layout-patterns.md +155 -155
- package/skills/craft/uipm-slides/references/slide-strategies.md +97 -97
- package/skills/craft/uipm-ui-ux-pro-max/LICENSE +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/SKILL.md +678 -678
- package/skills/craft/uipm-ui-ux-pro-max/data/_sync_all.py +414 -414
- package/skills/craft/uipm-ui-ux-pro-max/data/app-interface.csv +30 -30
- package/skills/craft/uipm-ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/craft/uipm-ui-ux-pro-max/data/colors.csv +161 -161
- package/skills/craft/uipm-ui-ux-pro-max/data/design.csv +1775 -1775
- package/skills/craft/uipm-ui-ux-pro-max/data/draft.csv +1778 -1778
- package/skills/craft/uipm-ui-ux-pro-max/data/google-fonts.csv +1924 -1924
- package/skills/craft/uipm-ui-ux-pro-max/data/icons.csv +105 -105
- package/skills/craft/uipm-ui-ux-pro-max/data/landing.csv +35 -35
- package/skills/craft/uipm-ui-ux-pro-max/data/products.csv +162 -162
- package/skills/craft/uipm-ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/angular.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/laravel.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/threejs.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/craft/uipm-ui-ux-pro-max/data/styles.csv +85 -85
- package/skills/craft/uipm-ui-ux-pro-max/data/typography.csv +74 -74
- package/skills/craft/uipm-ui-ux-pro-max/data/ui-reasoning.csv +162 -162
- package/skills/craft/uipm-ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/craft/uipm-ui-ux-pro-max/scripts/core.py +262 -262
- package/skills/craft/uipm-ui-ux-pro-max/scripts/design_system.py +1148 -1148
- package/skills/craft/uipm-ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/craft/uipm-ui-ux-pro-max/templates/base/quick-reference.md +297 -297
- package/skills/craft/uipm-ui-ux-pro-max/templates/base/skill-content.md +375 -375
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/agent.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/augment.json +18 -18
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/claude.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/codebuddy.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/codex.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/continue.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/copilot.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/cursor.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/droid.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/gemini.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/kilocode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/kiro.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/opencode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/qoder.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/roocode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/trae.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/warp.json +18 -18
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/windsurf.json +21 -21
- package/skills/craft/vercel-optimize/AGENTS.md +48 -48
- package/skills/craft/vercel-optimize/CONTRIBUTING.md +41 -41
- package/skills/craft/vercel-optimize/LICENSE +21 -21
- package/skills/craft/vercel-optimize/README.md +91 -91
- package/skills/craft/vercel-optimize/SKILL.md +325 -325
- package/skills/craft/vercel-optimize/lib/auth-route.mjs +23 -23
- package/skills/craft/vercel-optimize/lib/budget-summary.mjs +208 -208
- package/skills/craft/vercel-optimize/lib/citations.mjs +147 -147
- package/skills/craft/vercel-optimize/lib/cost-coverage.mjs +162 -162
- package/skills/craft/vercel-optimize/lib/dedup-recs.mjs +340 -340
- package/skills/craft/vercel-optimize/lib/deep-dive.mjs +371 -371
- package/skills/craft/vercel-optimize/lib/display-labels.mjs +219 -219
- package/skills/craft/vercel-optimize/lib/extract-claims.mjs +640 -640
- package/skills/craft/vercel-optimize/lib/framework-support.mjs +69 -69
- package/skills/craft/vercel-optimize/lib/gates/build-minutes-fanout.mjs +73 -73
- package/skills/craft/vercel-optimize/lib/gates/cold-start.mjs +72 -72
- package/skills/craft/vercel-optimize/lib/gates/contract.mjs +82 -82
- package/skills/craft/vercel-optimize/lib/gates/cwv-poor.mjs +95 -95
- package/skills/craft/vercel-optimize/lib/gates/external-api-slow.mjs +60 -60
- package/skills/craft/vercel-optimize/lib/gates/hard-gates.mjs +70 -70
- package/skills/craft/vercel-optimize/lib/gates/index.mjs +45 -45
- package/skills/craft/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -62
- package/skills/craft/vercel-optimize/lib/gates/middleware-heavy.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/gates/observability-events-attribution.mjs +58 -58
- package/skills/craft/vercel-optimize/lib/gates/platform-bot-protection.mjs +123 -123
- package/skills/craft/vercel-optimize/lib/gates/platform-fluid-compute.mjs +94 -94
- package/skills/craft/vercel-optimize/lib/gates/region-misconfig.mjs +71 -71
- package/skills/craft/vercel-optimize/lib/gates/route-errors.mjs +95 -95
- package/skills/craft/vercel-optimize/lib/gates/scanner-driven.mjs +150 -150
- package/skills/craft/vercel-optimize/lib/gates/select-candidates.mjs +137 -137
- package/skills/craft/vercel-optimize/lib/gates/slow-route.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/gates/types.d.ts +38 -38
- package/skills/craft/vercel-optimize/lib/gates/uncached-route.mjs +103 -103
- package/skills/craft/vercel-optimize/lib/gates/usage-spike-triage.mjs +122 -122
- package/skills/craft/vercel-optimize/lib/grade-recommendation.mjs +170 -170
- package/skills/craft/vercel-optimize/lib/impact-label.mjs +128 -128
- package/skills/craft/vercel-optimize/lib/impact-magnitude.mjs +66 -66
- package/skills/craft/vercel-optimize/lib/investigation-brief.mjs +751 -751
- package/skills/craft/vercel-optimize/lib/observation-safety.mjs +217 -217
- package/skills/craft/vercel-optimize/lib/project-facts.mjs +101 -101
- package/skills/craft/vercel-optimize/lib/queries.mjs +333 -333
- package/skills/craft/vercel-optimize/lib/reconcile-candidates.mjs +388 -388
- package/skills/craft/vercel-optimize/lib/render-report.mjs +1065 -1065
- package/skills/craft/vercel-optimize/lib/repo-root.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/route-normalize.mjs +224 -224
- package/skills/craft/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +56 -56
- package/skills/craft/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +33 -33
- package/skills/craft/vercel-optimize/lib/sanitizers/count-correct.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +32 -32
- package/skills/craft/vercel-optimize/lib/sanitizers/index.mjs +87 -87
- package/skills/craft/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +37 -37
- package/skills/craft/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -16
- package/skills/craft/vercel-optimize/lib/sanitizers/pre-release.mjs +75 -75
- package/skills/craft/vercel-optimize/lib/sanitizers/rate-limit.mjs +73 -73
- package/skills/craft/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +42 -42
- package/skills/craft/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +110 -110
- package/skills/craft/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -37
- package/skills/craft/vercel-optimize/lib/sanitizers/window-units.mjs +26 -26
- package/skills/craft/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +114 -114
- package/skills/craft/vercel-optimize/lib/scanners/edge-heavy-import.mjs +102 -102
- package/skills/craft/vercel-optimize/lib/scanners/force-dynamic.mjs +39 -39
- package/skills/craft/vercel-optimize/lib/scanners/headers-in-page.mjs +43 -43
- package/skills/craft/vercel-optimize/lib/scanners/index.mjs +35 -35
- package/skills/craft/vercel-optimize/lib/scanners/large-static-asset.mjs +93 -93
- package/skills/craft/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +47 -47
- package/skills/craft/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/scanners/missing-cache-headers.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/scanners/prisma-include-tree.mjs +39 -39
- package/skills/craft/vercel-optimize/lib/scanners/region-pin-in-config.mjs +89 -89
- package/skills/craft/vercel-optimize/lib/scanners/source-maps-production.mjs +33 -33
- package/skills/craft/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +47 -47
- package/skills/craft/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +136 -136
- package/skills/craft/vercel-optimize/lib/scanners/unoptimized-image.mjs +127 -127
- package/skills/craft/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +112 -112
- package/skills/craft/vercel-optimize/lib/support-topics.mjs +365 -365
- package/skills/craft/vercel-optimize/lib/throttle.mjs +280 -280
- package/skills/craft/vercel-optimize/lib/util.mjs +17 -17
- package/skills/craft/vercel-optimize/lib/vercel.mjs +855 -855
- package/skills/craft/vercel-optimize/lib/verify-claim.mjs +1843 -1843
- package/skills/craft/vercel-optimize/lib/workspace-resolver.mjs +552 -552
- package/skills/craft/vercel-optimize/metadata.json +14 -14
- package/skills/craft/vercel-optimize/references/candidates.md +176 -176
- package/skills/craft/vercel-optimize/references/data-collection.md +224 -224
- package/skills/craft/vercel-optimize/references/docs-library.json +683 -683
- package/skills/craft/vercel-optimize/references/doctrine.md +108 -108
- package/skills/craft/vercel-optimize/references/observability-plus.md +109 -109
- package/skills/craft/vercel-optimize/references/playbooks/README.md +57 -57
- package/skills/craft/vercel-optimize/references/playbooks/ai-application.md +32 -32
- package/skills/craft/vercel-optimize/references/playbooks/api-service.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/content-site.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/ecommerce.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/marketing.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/saas.md +31 -31
- package/skills/craft/vercel-optimize/references/playbooks/sveltekit.md +75 -75
- package/skills/craft/vercel-optimize/references/recommendations.md +214 -214
- package/skills/craft/vercel-optimize/references/scanner-patterns.md +266 -266
- package/skills/craft/vercel-optimize/references/scoring.md +208 -208
- package/skills/craft/vercel-optimize/references/support-topics/README.md +50 -50
- package/skills/craft/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/database-egress-pooling-region.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/external-api-critical-path.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/fluid-compute-caveats.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/function-duration-io-and-after.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/function-invocation-reduction.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/image-optimization-cost-control.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +28 -28
- package/skills/craft/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +27 -27
- package/skills/craft/vercel-optimize/references/support-topics/post-response-work-waituntil.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/route-error-durable-offload.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/route-error-runtime-limits.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/usage-spike-triage.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +32 -32
- package/skills/craft/vercel-optimize/references/verification.md +102 -102
- package/skills/craft/vercel-optimize/references/voice.md +76 -76
- package/skills/craft/vercel-optimize/scripts/budget-summary.mjs +58 -58
- package/skills/craft/vercel-optimize/scripts/build-docs.mjs +76 -76
- package/skills/craft/vercel-optimize/scripts/check-citations.mjs +91 -91
- package/skills/craft/vercel-optimize/scripts/check-docs-fresh.mjs +100 -100
- package/skills/craft/vercel-optimize/scripts/collect-signals.mjs +638 -638
- package/skills/craft/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +306 -306
- package/skills/craft/vercel-optimize/scripts/deep-dive.mjs +358 -358
- package/skills/craft/vercel-optimize/scripts/gate-investigations.mjs +178 -178
- package/skills/craft/vercel-optimize/scripts/merge-signals.mjs +203 -203
- package/skills/craft/vercel-optimize/scripts/prepare-investigation-brief.mjs +249 -249
- package/skills/craft/vercel-optimize/scripts/reconcile-candidates.mjs +69 -69
- package/skills/craft/vercel-optimize/scripts/render-report.mjs +462 -462
- package/skills/craft/vercel-optimize/scripts/scan-codebase.mjs +361 -361
- package/skills/craft/vercel-optimize/scripts/verify-and-regen.mjs +379 -379
- package/skills/craft/vercel-optimize/scripts/verify-finding.mjs +21 -21
- package/skills/craft/web-design-guidelines/LICENSE +21 -21
- package/skills/craft/web-design-guidelines/SKILL.md +43 -43
- package/skills/craft/zero-to-live/LICENSE +21 -21
- package/skills/craft/zero-to-live/SKILL.md +422 -422
- package/skills/creative/creative-3d-modeling/LICENSE +21 -21
- package/skills/creative/creative-3d-modeling/SKILL.md +70 -70
- package/skills/creative/creative-architecture/LICENSE +21 -21
- package/skills/creative/creative-architecture/SKILL.md +94 -94
- package/skills/creative/creative-design-principles/LICENSE +21 -21
- package/skills/creative/creative-design-principles/SKILL.md +95 -95
- package/skills/creative/creative-fashion-advanced/LICENSE +21 -21
- package/skills/creative/creative-fashion-advanced/SKILL.md +68 -68
- package/skills/creative/creative-fashion-design/LICENSE +21 -21
- package/skills/creative/creative-fashion-design/SKILL.md +66 -66
- package/skills/creative/creative-game-design/LICENSE +21 -21
- package/skills/creative/creative-game-design/SKILL.md +77 -77
- package/skills/creative/creative-industrial-design/LICENSE +21 -21
- package/skills/creative/creative-industrial-design/SKILL.md +57 -57
- package/skills/creative/creative-interior-design/LICENSE +21 -21
- package/skills/creative/creative-interior-design/SKILL.md +59 -59
- package/skills/creative/creative-music-theory/LICENSE +21 -21
- package/skills/creative/creative-music-theory/SKILL.md +98 -98
- package/skills/creative/creative-photography/LICENSE +21 -21
- package/skills/creative/creative-photography/SKILL.md +87 -87
- package/skills/creative/creative-textile-science/LICENSE +21 -21
- package/skills/creative/creative-textile-science/SKILL.md +67 -67
- package/skills/creative/creative-ux/LICENSE +21 -21
- package/skills/creative/creative-ux/SKILL.md +81 -81
- package/skills/creative/creative-video/LICENSE +21 -21
- package/skills/creative/creative-video/SKILL.md +84 -84
- package/skills/creative/creative-writing-craft/LICENSE +21 -21
- package/skills/creative/creative-writing-craft/SKILL.md +91 -91
- package/skills/diagram-maker/SKILL.md +56 -56
- package/skills/diagram-maker/references/excalidraw-patterns.md +85 -85
- package/skills/diagram-maker/references/svg-template.md +112 -112
- package/skills/discord/SKILL.md +140 -140
- package/skills/education/edu-adult-learning/LICENSE +21 -21
- package/skills/education/edu-adult-learning/SKILL.md +81 -81
- package/skills/education/edu-africa-multilingual/LICENSE +21 -21
- package/skills/education/edu-africa-multilingual/SKILL.md +55 -55
- package/skills/education/edu-arabic/LICENSE +21 -21
- package/skills/education/edu-arabic/SKILL.md +60 -60
- package/skills/education/edu-australia-nz/LICENSE +21 -21
- package/skills/education/edu-australia-nz/SKILL.md +48 -48
- package/skills/education/edu-china-mandarin/LICENSE +21 -21
- package/skills/education/edu-china-mandarin/SKILL.md +58 -58
- package/skills/education/edu-critical-thinking/LICENSE +21 -21
- package/skills/education/edu-critical-thinking/SKILL.md +86 -86
- package/skills/education/edu-curriculum/LICENSE +21 -21
- package/skills/education/edu-curriculum/SKILL.md +87 -87
- package/skills/education/edu-ed-tech/LICENSE +21 -21
- package/skills/education/edu-ed-tech/SKILL.md +73 -73
- package/skills/education/edu-france/LICENSE +21 -21
- package/skills/education/edu-france/SKILL.md +42 -42
- package/skills/education/edu-germany/LICENSE +21 -21
- package/skills/education/edu-germany/SKILL.md +46 -46
- package/skills/education/edu-india-competitive/LICENSE +21 -21
- package/skills/education/edu-india-competitive/SKILL.md +159 -159
- package/skills/education/edu-india-east/LICENSE +21 -21
- package/skills/education/edu-india-east/SKILL.md +60 -60
- package/skills/education/edu-india-hindi/LICENSE +21 -21
- package/skills/education/edu-india-hindi/SKILL.md +107 -107
- package/skills/education/edu-india-south/LICENSE +21 -21
- package/skills/education/edu-india-south/SKILL.md +64 -64
- package/skills/education/edu-india-west/LICENSE +21 -21
- package/skills/education/edu-india-west/SKILL.md +68 -68
- package/skills/education/edu-indonesia-malay/LICENSE +21 -21
- package/skills/education/edu-indonesia-malay/SKILL.md +57 -57
- package/skills/education/edu-international-ib/LICENSE +21 -21
- package/skills/education/edu-international-ib/SKILL.md +61 -61
- package/skills/education/edu-japan/LICENSE +21 -21
- package/skills/education/edu-japan/SKILL.md +48 -48
- package/skills/education/edu-korea/LICENSE +21 -21
- package/skills/education/edu-korea/SKILL.md +48 -48
- package/skills/education/edu-learning-science/LICENSE +21 -21
- package/skills/education/edu-learning-science/SKILL.md +76 -76
- package/skills/education/edu-portuguese-brazil/LICENSE +21 -21
- package/skills/education/edu-portuguese-brazil/SKILL.md +51 -51
- package/skills/education/edu-russia/LICENSE +21 -21
- package/skills/education/edu-russia/SKILL.md +50 -50
- package/skills/education/edu-spain-latam/LICENSE +21 -21
- package/skills/education/edu-spain-latam/SKILL.md +55 -55
- package/skills/education/edu-special/LICENSE +21 -21
- package/skills/education/edu-special/SKILL.md +76 -76
- package/skills/education/edu-thailand/LICENSE +21 -21
- package/skills/education/edu-thailand/SKILL.md +55 -55
- package/skills/education/edu-turkey/LICENSE +21 -21
- package/skills/education/edu-turkey/SKILL.md +58 -58
- package/skills/education/edu-uk-gcse-alevel/LICENSE +21 -21
- package/skills/education/edu-uk-gcse-alevel/SKILL.md +51 -51
- package/skills/education/edu-usa-graduate/LICENSE +21 -21
- package/skills/education/edu-usa-graduate/SKILL.md +57 -57
- package/skills/education/edu-usa-sat-act/LICENSE +21 -21
- package/skills/education/edu-usa-sat-act/SKILL.md +55 -55
- package/skills/education/edu-vietnam/LICENSE +21 -21
- package/skills/education/edu-vietnam/SKILL.md +53 -53
- package/skills/eightctl/SKILL.md +54 -54
- package/skills/engineering/eng-aerospace/LICENSE +21 -21
- package/skills/engineering/eng-aerospace/SKILL.md +117 -117
- package/skills/engineering/eng-chemical/LICENSE +21 -21
- package/skills/engineering/eng-chemical/SKILL.md +63 -63
- package/skills/engineering/eng-civil/LICENSE +21 -21
- package/skills/engineering/eng-civil/SKILL.md +223 -223
- package/skills/engineering/eng-control-systems/LICENSE +21 -21
- package/skills/engineering/eng-control-systems/SKILL.md +158 -158
- package/skills/engineering/eng-cryogenics/LICENSE +21 -21
- package/skills/engineering/eng-cryogenics/SKILL.md +151 -151
- package/skills/engineering/eng-electrical/LICENSE +21 -21
- package/skills/engineering/eng-electrical/SKILL.md +70 -70
- package/skills/engineering/eng-electronics-embedded/LICENSE +21 -21
- package/skills/engineering/eng-electronics-embedded/SKILL.md +89 -89
- package/skills/engineering/eng-environmental/LICENSE +21 -21
- package/skills/engineering/eng-environmental/SKILL.md +66 -66
- package/skills/engineering/eng-manufacturing/LICENSE +21 -21
- package/skills/engineering/eng-manufacturing/SKILL.md +78 -78
- package/skills/engineering/eng-mechanical/LICENSE +21 -21
- package/skills/engineering/eng-mechanical/SKILL.md +66 -66
- package/skills/engineering/eng-project/LICENSE +21 -21
- package/skills/engineering/eng-project/SKILL.md +72 -72
- package/skills/engineering/eng-propulsion/LICENSE +21 -21
- package/skills/engineering/eng-propulsion/SKILL.md +133 -133
- package/skills/engineering/eng-robotics/LICENSE +21 -21
- package/skills/engineering/eng-robotics/SKILL.md +92 -92
- package/skills/engineering/eng-systems/LICENSE +21 -21
- package/skills/engineering/eng-systems/SKILL.md +81 -81
- package/skills/environment/env-biodiversity/LICENSE +21 -21
- package/skills/environment/env-biodiversity/SKILL.md +66 -66
- package/skills/environment/env-circular-economy/LICENSE +21 -21
- package/skills/environment/env-circular-economy/SKILL.md +71 -71
- package/skills/environment/env-climate-action/LICENSE +21 -21
- package/skills/environment/env-climate-action/SKILL.md +55 -55
- package/skills/environment/env-energy/LICENSE +21 -21
- package/skills/environment/env-energy/SKILL.md +83 -83
- package/skills/environment/env-sustainability-biz/LICENSE +21 -21
- package/skills/environment/env-sustainability-biz/SKILL.md +65 -65
- package/skills/environment/env-water/LICENSE +21 -21
- package/skills/environment/env-water/SKILL.md +67 -67
- package/skills/finance/finance-accounting/LICENSE +21 -21
- package/skills/finance/finance-accounting/SKILL.md +239 -239
- package/skills/finance/finance-banking/LICENSE +21 -21
- package/skills/finance/finance-banking/SKILL.md +54 -54
- package/skills/finance/finance-corporate/LICENSE +21 -21
- package/skills/finance/finance-corporate/SKILL.md +105 -105
- package/skills/finance/finance-crypto/LICENSE +21 -21
- package/skills/finance/finance-crypto/SKILL.md +94 -94
- package/skills/finance/finance-debt-management/LICENSE +21 -21
- package/skills/finance/finance-debt-management/SKILL.md +87 -87
- package/skills/finance/finance-insurance/LICENSE +21 -21
- package/skills/finance/finance-insurance/SKILL.md +91 -91
- package/skills/finance/finance-investing/LICENSE +21 -21
- package/skills/finance/finance-investing/SKILL.md +269 -269
- package/skills/finance/finance-options-derivatives/LICENSE +21 -21
- package/skills/finance/finance-options-derivatives/SKILL.md +68 -68
- package/skills/finance/finance-personal/LICENSE +21 -21
- package/skills/finance/finance-personal/SKILL.md +268 -268
- package/skills/finance/finance-real-estate/LICENSE +21 -21
- package/skills/finance/finance-real-estate/SKILL.md +110 -110
- package/skills/finance/finance-startup/LICENSE +21 -21
- package/skills/finance/finance-startup/SKILL.md +253 -253
- package/skills/finance/finance-tax-planning/LICENSE +21 -21
- package/skills/finance/finance-tax-planning/SKILL.md +89 -89
- package/skills/finance/finance-trading/LICENSE +21 -21
- package/skills/finance/finance-trading/SKILL.md +112 -112
- package/skills/gemini/SKILL.md +51 -51
- package/skills/gh-issues/SKILL.md +216 -216
- package/skills/gifgrep/SKILL.md +89 -89
- package/skills/github/SKILL.md +87 -87
- package/skills/gog/SKILL.md +120 -120
- package/skills/goplaces/SKILL.md +56 -56
- package/skills/graphify/SKILL.md +619 -619
- package/skills/health/health-aging/LICENSE +21 -21
- package/skills/health/health-aging/SKILL.md +82 -82
- package/skills/health/health-chronic/LICENSE +21 -21
- package/skills/health/health-chronic/SKILL.md +202 -202
- package/skills/health/health-dental/LICENSE +21 -21
- package/skills/health/health-dental/SKILL.md +41 -41
- package/skills/health/health-eye-care/LICENSE +21 -21
- package/skills/health/health-eye-care/SKILL.md +56 -56
- package/skills/health/health-first-aid/LICENSE +21 -21
- package/skills/health/health-first-aid/SKILL.md +201 -201
- package/skills/health/health-fitness/LICENSE +21 -21
- package/skills/health/health-fitness/SKILL.md +111 -111
- package/skills/health/health-general/LICENSE +21 -21
- package/skills/health/health-general/SKILL.md +277 -277
- package/skills/health/health-mens/LICENSE +21 -21
- package/skills/health/health-mens/SKILL.md +53 -53
- package/skills/health/health-mental/LICENSE +21 -21
- package/skills/health/health-mental/SKILL.md +221 -221
- package/skills/health/health-naturopathy-ayurveda/LICENSE +21 -21
- package/skills/health/health-naturopathy-ayurveda/SKILL.md +60 -60
- package/skills/health/health-nutrition/LICENSE +21 -21
- package/skills/health/health-nutrition/SKILL.md +262 -262
- package/skills/health/health-pediatric/LICENSE +21 -21
- package/skills/health/health-pediatric/SKILL.md +94 -94
- package/skills/health/health-pharmacology/LICENSE +21 -21
- package/skills/health/health-pharmacology/SKILL.md +87 -87
- package/skills/health/health-pregnancy/LICENSE +21 -21
- package/skills/health/health-pregnancy/SKILL.md +71 -71
- package/skills/health/health-skin/LICENSE +21 -21
- package/skills/health/health-skin/SKILL.md +71 -71
- package/skills/health/health-sleep/LICENSE +21 -21
- package/skills/health/health-sleep/SKILL.md +81 -81
- package/skills/health/health-womens/LICENSE +21 -21
- package/skills/health/health-womens/SKILL.md +72 -72
- package/skills/health/health-yoga-wellness/LICENSE +21 -21
- package/skills/health/health-yoga-wellness/SKILL.md +58 -58
- package/skills/healthcare-systems/health-sys-global/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-global/SKILL.md +69 -69
- package/skills/healthcare-systems/health-sys-management/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-management/SKILL.md +71 -71
- package/skills/healthcare-systems/health-sys-navigation/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-navigation/SKILL.md +60 -60
- package/skills/healthcare-systems/health-sys-public/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-public/SKILL.md +71 -71
- package/skills/healthcheck/SKILL.md +109 -109
- package/skills/himalaya/SKILL.md +84 -84
- package/skills/himalaya/references/configuration.md +184 -184
- package/skills/himalaya/references/message-composition.md +199 -199
- package/skills/humanities/humanities-history-world/LICENSE +21 -21
- package/skills/humanities/humanities-history-world/SKILL.md +59 -59
- package/skills/humanities/humanities-indian-classical/LICENSE +21 -21
- package/skills/humanities/humanities-indian-classical/SKILL.md +104 -104
- package/skills/humanities/humanities-philosophy/LICENSE +21 -21
- package/skills/humanities/humanities-philosophy/SKILL.md +105 -105
- package/skills/humanities/humanities-world-religions/LICENSE +21 -21
- package/skills/humanities/humanities-world-religions/SKILL.md +67 -67
- package/skills/impeccable/SKILL.md +185 -185
- package/skills/imsg/SKILL.md +126 -126
- package/skills/industry/industry-construction/LICENSE +21 -21
- package/skills/industry/industry-construction/SKILL.md +81 -81
- package/skills/industry/industry-education-sector/LICENSE +21 -21
- package/skills/industry/industry-education-sector/SKILL.md +49 -49
- package/skills/industry/industry-fashion/LICENSE +21 -21
- package/skills/industry/industry-fashion/SKILL.md +82 -82
- package/skills/industry/industry-food/LICENSE +21 -21
- package/skills/industry/industry-food/SKILL.md +79 -79
- package/skills/industry/industry-government/LICENSE +21 -21
- package/skills/industry/industry-government/SKILL.md +80 -80
- package/skills/industry/industry-hospitality/LICENSE +21 -21
- package/skills/industry/industry-hospitality/SKILL.md +73 -73
- package/skills/industry/industry-insurance-sector/LICENSE +21 -21
- package/skills/industry/industry-insurance-sector/SKILL.md +57 -57
- package/skills/industry/industry-logistics/LICENSE +21 -21
- package/skills/industry/industry-logistics/SKILL.md +80 -80
- package/skills/industry/industry-media/LICENSE +21 -21
- package/skills/industry/industry-media/SKILL.md +66 -66
- package/skills/industry/industry-nonprofit/LICENSE +21 -21
- package/skills/industry/industry-nonprofit/SKILL.md +77 -77
- package/skills/industry/industry-pharma/LICENSE +21 -21
- package/skills/industry/industry-pharma/SKILL.md +69 -69
- package/skills/industry/industry-real-estate/LICENSE +21 -21
- package/skills/industry/industry-real-estate/SKILL.md +61 -61
- package/skills/industry/industry-sports/LICENSE +21 -21
- package/skills/industry/industry-sports/SKILL.md +71 -71
- package/skills/industry/industry-tech-startup/LICENSE +21 -21
- package/skills/industry/industry-tech-startup/SKILL.md +82 -82
- package/skills/internal-comms/LICENSE +21 -21
- package/skills/internal-comms/SKILL.md +38 -38
- package/skills/internal-comms/examples/3p-updates.md +49 -49
- package/skills/internal-comms/examples/company-newsletter.md +76 -76
- package/skills/internal-comms/examples/faq-answers.md +35 -35
- package/skills/internal-comms/examples/general-comms.md +19 -19
- package/skills/legal/legal-business/LICENSE +21 -21
- package/skills/legal/legal-business/SKILL.md +227 -227
- package/skills/legal/legal-consumer/LICENSE +21 -21
- package/skills/legal/legal-consumer/SKILL.md +155 -155
- package/skills/legal/legal-contracts/LICENSE +21 -21
- package/skills/legal/legal-contracts/SKILL.md +268 -268
- package/skills/legal/legal-corporate-governance/LICENSE +21 -21
- package/skills/legal/legal-corporate-governance/SKILL.md +53 -53
- package/skills/legal/legal-employment/LICENSE +21 -21
- package/skills/legal/legal-employment/SKILL.md +291 -291
- package/skills/legal/legal-immigration/LICENSE +21 -21
- package/skills/legal/legal-immigration/SKILL.md +146 -146
- package/skills/legal/legal-international/LICENSE +21 -21
- package/skills/legal/legal-international/SKILL.md +51 -51
- package/skills/legal/legal-ip/LICENSE +21 -21
- package/skills/legal/legal-ip/SKILL.md +264 -264
- package/skills/legal/legal-privacy/LICENSE +21 -21
- package/skills/legal/legal-privacy/SKILL.md +161 -161
- package/skills/legal/legal-real-estate/LICENSE +21 -21
- package/skills/legal/legal-real-estate/SKILL.md +142 -142
- package/skills/legal/legal-startup/LICENSE +21 -21
- package/skills/legal/legal-startup/SKILL.md +182 -182
- package/skills/legal/legal-tax/LICENSE +21 -21
- package/skills/legal/legal-tax/SKILL.md +156 -156
- package/skills/mcp-builder/LICENSE +21 -21
- package/skills/mcp-builder/SKILL.md +257 -257
- package/skills/mcp-builder/reference/evaluation.md +630 -630
- package/skills/mcp-builder/reference/mcp_best_practices.md +269 -269
- package/skills/mcp-builder/reference/node_mcp_server.md +980 -980
- package/skills/mcp-builder/reference/python_mcp_server.md +737 -737
- package/skills/mcp-builder/scripts/connections.py +151 -151
- package/skills/mcp-builder/scripts/evaluation.py +373 -373
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -22
- package/skills/mcp-builder/scripts/requirements.txt +2 -2
- package/skills/mcporter/SKILL.md +65 -65
- package/skills/meme-maker/SKILL.md +46 -46
- package/skills/meme-maker/references/templates.json +358 -358
- package/skills/meme-maker/scripts/meme.mjs +398 -398
- package/skills/mental-health/mental-health-cbt/LICENSE +21 -21
- package/skills/mental-health/mental-health-cbt/SKILL.md +254 -254
- package/skills/mental-health/psych-addiction/LICENSE +21 -21
- package/skills/mental-health/psych-addiction/SKILL.md +79 -79
- package/skills/mental-health/psych-behavioral-econ/LICENSE +21 -21
- package/skills/mental-health/psych-behavioral-econ/SKILL.md +84 -84
- package/skills/mental-health/psych-child/LICENSE +21 -21
- package/skills/mental-health/psych-child/SKILL.md +84 -84
- package/skills/mental-health/psych-grief/LICENSE +21 -21
- package/skills/mental-health/psych-grief/SKILL.md +85 -85
- package/skills/mental-health/psych-mindfulness/LICENSE +21 -21
- package/skills/mental-health/psych-mindfulness/SKILL.md +71 -71
- package/skills/mental-health/psych-org/LICENSE +21 -21
- package/skills/mental-health/psych-org/SKILL.md +115 -115
- package/skills/mental-health/psych-positive/LICENSE +21 -21
- package/skills/mental-health/psych-positive/SKILL.md +86 -86
- package/skills/mental-health/psych-relationships/LICENSE +21 -21
- package/skills/mental-health/psych-relationships/SKILL.md +100 -100
- package/skills/mental-health/psych-trauma/LICENSE +21 -21
- package/skills/mental-health/psych-trauma/SKILL.md +109 -109
- package/skills/model-usage/SKILL.md +75 -75
- package/skills/model-usage/references/codexbar-cli.md +33 -33
- package/skills/model-usage/scripts/model_usage.py +319 -319
- package/skills/model-usage/scripts/test_model_usage.py +40 -40
- package/skills/nano-pdf/SKILL.md +42 -42
- package/skills/node-connect/SKILL.md +147 -147
- package/skills/node-inspect-debugger/SKILL.md +88 -88
- package/skills/notion/SKILL.md +154 -154
- package/skills/obsidian/SKILL.md +123 -123
- package/skills/openai-whisper/SKILL.md +42 -42
- package/skills/openai-whisper-api/SKILL.md +75 -75
- package/skills/openai-whisper-api/scripts/transcribe.sh +154 -154
- package/skills/openhue/SKILL.md +116 -116
- package/skills/oracle/SKILL.md +130 -130
- package/skills/ordercli/SKILL.md +82 -82
- package/skills/peekaboo/SKILL.md +217 -217
- package/skills/pyproject.toml +10 -10
- package/skills/python-debugpy/SKILL.md +76 -76
- package/skills/sag/SKILL.md +91 -91
- package/skills/science/sci-astronomy/LICENSE +21 -21
- package/skills/science/sci-astronomy/SKILL.md +80 -80
- package/skills/science/sci-biology/LICENSE +21 -21
- package/skills/science/sci-biology/SKILL.md +74 -74
- package/skills/science/sci-chemistry/LICENSE +21 -21
- package/skills/science/sci-chemistry/SKILL.md +89 -89
- package/skills/science/sci-climate/LICENSE +21 -21
- package/skills/science/sci-climate/SKILL.md +72 -72
- package/skills/science/sci-data-analysis/LICENSE +21 -21
- package/skills/science/sci-data-analysis/SKILL.md +87 -87
- package/skills/science/sci-environmental-science/LICENSE +21 -21
- package/skills/science/sci-environmental-science/SKILL.md +69 -69
- package/skills/science/sci-geology/LICENSE +21 -21
- package/skills/science/sci-geology/SKILL.md +56 -56
- package/skills/science/sci-method/LICENSE +21 -21
- package/skills/science/sci-method/SKILL.md +77 -77
- package/skills/science/sci-neuroscience/LICENSE +21 -21
- package/skills/science/sci-neuroscience/SKILL.md +79 -79
- package/skills/science/sci-physics/LICENSE +21 -21
- package/skills/science/sci-physics/SKILL.md +78 -78
- package/skills/science/sci-research-methods/LICENSE +21 -21
- package/skills/science/sci-research-methods/SKILL.md +83 -83
- package/skills/science/sci-statistics/LICENSE +21 -21
- package/skills/science/sci-statistics/SKILL.md +249 -249
- package/skills/session-logs/SKILL.md +155 -155
- package/skills/sherpa-onnx-tts/SKILL.md +113 -113
- package/skills/skill-creator/SKILL.md +81 -81
- package/skills/skill-creator/license.txt +202 -202
- package/skills/skill-creator/scripts/init_skill.py +378 -378
- package/skills/skill-creator/scripts/package_skill.py +144 -144
- package/skills/skill-creator/scripts/quick_validate.py +169 -169
- package/skills/skill-creator/scripts/test_init_skill.py +51 -51
- package/skills/skill-creator/scripts/test_package_skill.py +199 -199
- package/skills/skill-creator/scripts/test_quick_validate.py +116 -116
- package/skills/slack/SKILL.md +82 -82
- package/skills/slack-gif-creator/LICENSE +21 -21
- package/skills/slack-gif-creator/SKILL.md +293 -293
- package/skills/slack-gif-creator/requirements.txt +3 -3
- package/skills/social-sciences/social-anthropology/LICENSE +21 -21
- package/skills/social-sciences/social-anthropology/SKILL.md +62 -62
- package/skills/social-sciences/social-economics/LICENSE +21 -21
- package/skills/social-sciences/social-economics/SKILL.md +88 -88
- package/skills/social-sciences/social-geography/LICENSE +21 -21
- package/skills/social-sciences/social-geography/SKILL.md +61 -61
- package/skills/social-sciences/social-international-dev/LICENSE +21 -21
- package/skills/social-sciences/social-international-dev/SKILL.md +76 -76
- package/skills/social-sciences/social-political-science/LICENSE +21 -21
- package/skills/social-sciences/social-political-science/SKILL.md +70 -70
- package/skills/social-sciences/social-public-policy/LICENSE +21 -21
- package/skills/social-sciences/social-public-policy/SKILL.md +73 -73
- package/skills/social-sciences/social-sociology/LICENSE +21 -21
- package/skills/social-sciences/social-sociology/SKILL.md +78 -78
- package/skills/songsee/SKILL.md +53 -53
- package/skills/sonoscli/SKILL.md +69 -69
- package/skills/spike/SKILL.md +55 -55
- package/skills/spotify-player/SKILL.md +68 -68
- package/skills/summarize/SKILL.md +90 -90
- package/skills/taskflow/SKILL.md +153 -153
- package/skills/taskflow/examples/inbox-triage.lobster +33 -33
- package/skills/taskflow/examples/pr-intake.lobster +32 -32
- package/skills/taskflow-inbox-triage/SKILL.md +123 -123
- package/skills/technical/ai-ethics/LICENSE +21 -21
- package/skills/technical/ai-ethics/SKILL.md +92 -92
- package/skills/technical/ai-product-builder/LICENSE +21 -21
- package/skills/technical/ai-product-builder/SKILL.md +180 -180
- package/skills/technical/analytics-setup/LICENSE +21 -21
- package/skills/technical/analytics-setup/SKILL.md +125 -125
- package/skills/technical/api-builder/LICENSE +21 -21
- package/skills/technical/api-builder/SKILL.md +202 -202
- package/skills/technical/architecture-decisions/LICENSE +21 -21
- package/skills/technical/architecture-decisions/SKILL.md +120 -120
- package/skills/technical/auth-security/LICENSE +21 -21
- package/skills/technical/auth-security/SKILL.md +209 -209
- package/skills/technical/blockchain-web3/LICENSE +21 -21
- package/skills/technical/blockchain-web3/SKILL.md +84 -84
- package/skills/technical/cloud-architecture/LICENSE +21 -21
- package/skills/technical/cloud-architecture/SKILL.md +85 -85
- package/skills/technical/content-platform/LICENSE +21 -21
- package/skills/technical/content-platform/SKILL.md +134 -134
- package/skills/technical/cybersecurity-advanced/LICENSE +21 -21
- package/skills/technical/cybersecurity-advanced/SKILL.md +99 -99
- package/skills/technical/data-engineering/LICENSE +21 -21
- package/skills/technical/data-engineering/SKILL.md +117 -117
- package/skills/technical/database-design/LICENSE +21 -21
- package/skills/technical/database-design/SKILL.md +185 -185
- package/skills/technical/devops-cicd/LICENSE +21 -21
- package/skills/technical/devops-cicd/SKILL.md +181 -181
- package/skills/technical/ecommerce-builder/LICENSE +21 -21
- package/skills/technical/ecommerce-builder/SKILL.md +123 -123
- package/skills/technical/email-marketing/LICENSE +21 -21
- package/skills/technical/email-marketing/SKILL.md +128 -128
- package/skills/technical/fintech-builder/LICENSE +21 -21
- package/skills/technical/fintech-builder/SKILL.md +141 -141
- package/skills/technical/full-stack-web/LICENSE +21 -21
- package/skills/technical/full-stack-web/SKILL.md +173 -173
- package/skills/technical/gdpr-basics/LICENSE +21 -21
- package/skills/technical/gdpr-basics/SKILL.md +145 -145
- package/skills/technical/launch-playbook/LICENSE +21 -21
- package/skills/technical/launch-playbook/SKILL.md +95 -95
- package/skills/technical/marketing-copy/LICENSE +21 -21
- package/skills/technical/marketing-copy/SKILL.md +126 -126
- package/skills/technical/marketplace-builder/LICENSE +21 -21
- package/skills/technical/marketplace-builder/SKILL.md +105 -105
- package/skills/technical/mobile-pwa/LICENSE +21 -21
- package/skills/technical/mobile-pwa/SKILL.md +191 -191
- package/skills/technical/no-code-tools/LICENSE +21 -21
- package/skills/technical/no-code-tools/SKILL.md +80 -80
- package/skills/technical/open-source/LICENSE +21 -21
- package/skills/technical/open-source/SKILL.md +71 -71
- package/skills/technical/performance-optimization/LICENSE +21 -21
- package/skills/technical/performance-optimization/SKILL.md +155 -155
- package/skills/technical/pricing-design/LICENSE +21 -21
- package/skills/technical/pricing-design/SKILL.md +87 -87
- package/skills/technical/product-management/LICENSE +21 -21
- package/skills/technical/product-management/SKILL.md +94 -94
- package/skills/technical/saas-builder/LICENSE +21 -21
- package/skills/technical/saas-builder/SKILL.md +138 -138
- package/skills/technical/scope-estimation/LICENSE +21 -21
- package/skills/technical/scope-estimation/SKILL.md +99 -99
- package/skills/technical/secrets-management/LICENSE +21 -21
- package/skills/technical/secrets-management/SKILL.md +135 -135
- package/skills/technical/seo-technical/LICENSE +21 -21
- package/skills/technical/seo-technical/SKILL.md +136 -136
- package/skills/technical/technical-writing/LICENSE +21 -21
- package/skills/technical/technical-writing/SKILL.md +149 -149
- package/skills/technical/ux-research-tools/LICENSE +21 -21
- package/skills/technical/ux-research-tools/SKILL.md +54 -54
- package/skills/theme-factory/LICENSE +21 -21
- package/skills/theme-factory/SKILL.md +65 -65
- package/skills/theme-factory/themes/arctic-frost.md +19 -19
- package/skills/theme-factory/themes/botanical-garden.md +19 -19
- package/skills/theme-factory/themes/desert-rose.md +19 -19
- package/skills/theme-factory/themes/forest-canopy.md +19 -19
- package/skills/theme-factory/themes/golden-hour.md +19 -19
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -19
- package/skills/theme-factory/themes/modern-minimalist.md +19 -19
- package/skills/theme-factory/themes/ocean-depths.md +19 -19
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -19
- package/skills/theme-factory/themes/tech-innovation.md +19 -19
- package/skills/things-mac/SKILL.md +90 -90
- package/skills/tmux/SKILL.md +95 -95
- package/skills/tmux/scripts/find-sessions.sh +112 -112
- package/skills/tmux/scripts/wait-for-text.sh +83 -83
- package/skills/trades/trades-agriculture/LICENSE +21 -21
- package/skills/trades/trades-agriculture/SKILL.md +80 -80
- package/skills/trades/trades-automotive/LICENSE +21 -21
- package/skills/trades/trades-automotive/SKILL.md +84 -84
- package/skills/trades/trades-carpentry/LICENSE +21 -21
- package/skills/trades/trades-carpentry/SKILL.md +71 -71
- package/skills/trades/trades-cooking-pro/LICENSE +21 -21
- package/skills/trades/trades-cooking-pro/SKILL.md +90 -90
- package/skills/trades/trades-electrical/LICENSE +21 -21
- package/skills/trades/trades-electrical/SKILL.md +146 -146
- package/skills/trades/trades-hvac/LICENSE +21 -21
- package/skills/trades/trades-hvac/SKILL.md +80 -80
- package/skills/trades/trades-landscaping/LICENSE +21 -21
- package/skills/trades/trades-landscaping/SKILL.md +60 -60
- package/skills/trades/trades-metalworking/LICENSE +21 -21
- package/skills/trades/trades-metalworking/SKILL.md +64 -64
- package/skills/trades/trades-painting/LICENSE +21 -21
- package/skills/trades/trades-painting/SKILL.md +70 -70
- package/skills/trades/trades-plumbing/LICENSE +21 -21
- package/skills/trades/trades-plumbing/SKILL.md +160 -160
- package/skills/trades/trades-welding/LICENSE +21 -21
- package/skills/trades/trades-welding/SKILL.md +82 -82
- package/skills/trello/SKILL.md +112 -112
- package/skills/uipm-ui-styling/SKILL.md +328 -328
- package/skills/video-frames/SKILL.md +50 -50
- package/skills/video-frames/scripts/frame.sh +81 -81
- package/skills/voice-call/SKILL.md +49 -49
- package/skills/wacli/SKILL.md +76 -76
- package/skills/weather/SKILL.md +91 -91
- package/skills/web-artifacts-builder/LICENSE +21 -21
- package/skills/web-artifacts-builder/SKILL.md +82 -82
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +53 -53
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -322
- package/skills/xurl/SKILL.md +124 -124
|
@@ -1,451 +1,451 @@
|
|
|
1
|
-
# Design Patterns & Software Engineering Principles
|
|
2
|
-
|
|
3
|
-
## CLEAN CODE — ABSOLUTE RULES
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
Function length: ≤20 lines. If longer, extract.
|
|
7
|
-
Class length: ≤200 lines. If longer, split responsibilities.
|
|
8
|
-
Parameters: ≤3. If more, use a config object/record.
|
|
9
|
-
Nesting depth: ≤3. Flatten with early returns.
|
|
10
|
-
Names: Reveal intent. No abbreviations. No single letters except loop vars.
|
|
11
|
-
Comments: Explain WHY, not WHAT. Code explains what. If you need a comment
|
|
12
|
-
to explain what the code does, rewrite the code.
|
|
13
|
-
DRY: Three-strike rule — same logic 3 times → extract to shared function.
|
|
14
|
-
Dead code: Delete it. Git tracks history. Comments don't.
|
|
15
|
-
Boolean params: Never. Use enums or separate methods.
|
|
16
|
-
Magic numbers: Never. Named constants only.
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## SOLID PRINCIPLES — APPLIED
|
|
22
|
-
|
|
23
|
-
### S — Single Responsibility
|
|
24
|
-
|
|
25
|
-
```typescript
|
|
26
|
-
// BAD: One class doing too much
|
|
27
|
-
class UserService {
|
|
28
|
-
createUser(data) { ... }
|
|
29
|
-
sendWelcomeEmail(user) { ... } // ← should be EmailService
|
|
30
|
-
generateInvoice(user) { ... } // ← should be BillingService
|
|
31
|
-
exportToCsv(users) { ... } // ← should be ExportService
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// GOOD: One reason to change
|
|
35
|
-
class UserService { createUser(data) { ... } }
|
|
36
|
-
class EmailService { sendWelcomeEmail(user) { ... } }
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### O — Open/Closed
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
// BAD: Add new payment type → modify existing class
|
|
43
|
-
class PaymentProcessor {
|
|
44
|
-
process(type: string, amount: number) {
|
|
45
|
-
if (type === 'stripe') { ... }
|
|
46
|
-
else if (type === 'paypal') { ... }
|
|
47
|
-
// Every new payment method = modifying this class
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// GOOD: New payment type = new class, no modification
|
|
52
|
-
interface PaymentProvider { process(amount: number): Promise<Receipt> }
|
|
53
|
-
class StripeProvider implements PaymentProvider { ... }
|
|
54
|
-
class PayPalProvider implements PaymentProvider { ... }
|
|
55
|
-
class PaymentProcessor { constructor(private provider: PaymentProvider) {} }
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### L — Liskov Substitution
|
|
59
|
-
|
|
60
|
-
Every subclass must be substitutable for its parent without breaking behavior. If you have to override a method to throw NotImplementedException, your hierarchy is wrong.
|
|
61
|
-
|
|
62
|
-
### I — Interface Segregation
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
// BAD: Fat interface forces implementors to implement unused methods
|
|
66
|
-
interface Worker { work(): void; eat(): void; sleep(): void }
|
|
67
|
-
|
|
68
|
-
// GOOD: Small, focused interfaces
|
|
69
|
-
interface Workable { work(): void }
|
|
70
|
-
interface Eatable { eat(): void }
|
|
71
|
-
class HumanWorker implements Workable, Eatable { ... }
|
|
72
|
-
class Robot implements Workable { work() { ... } } // doesn't eat
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### D — Dependency Inversion
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
// BAD: High-level depends on low-level
|
|
79
|
-
class OrderService {
|
|
80
|
-
private db = new PostgreSQLDatabase(); // concrete dependency
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// GOOD: Depend on abstractions
|
|
84
|
-
interface Database {
|
|
85
|
-
query(sql: string, params: any[]): Promise<any[]>;
|
|
86
|
-
}
|
|
87
|
-
class OrderService {
|
|
88
|
-
constructor(private db: Database) {} // inject, don't instantiate
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## DESIGN PATTERNS — MOST USED IN PRODUCTION
|
|
95
|
-
|
|
96
|
-
### Creational
|
|
97
|
-
|
|
98
|
-
**Factory Method** — Use when object creation logic is complex or varies by type:
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
interface Notifier {
|
|
102
|
-
send(message: string): Promise<void>;
|
|
103
|
-
}
|
|
104
|
-
class NotifierFactory {
|
|
105
|
-
static create(type: "email" | "sms" | "push"): Notifier {
|
|
106
|
-
switch (type) {
|
|
107
|
-
case "email":
|
|
108
|
-
return new EmailNotifier();
|
|
109
|
-
case "sms":
|
|
110
|
-
return new SMSNotifier();
|
|
111
|
-
case "push":
|
|
112
|
-
return new PushNotifier();
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
**Builder** — Use for complex objects with many optional fields:
|
|
119
|
-
|
|
120
|
-
```typescript
|
|
121
|
-
const query = new QueryBuilder()
|
|
122
|
-
.table("transactions")
|
|
123
|
-
.where("user_id", userId)
|
|
124
|
-
.where("status", "completed")
|
|
125
|
-
.orderBy("created_at", "desc")
|
|
126
|
-
.limit(50)
|
|
127
|
-
.build();
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**Singleton** — Database connection pools, configuration, loggers. Use sparingly — it's global state.
|
|
131
|
-
|
|
132
|
-
### Structural
|
|
133
|
-
|
|
134
|
-
**Adapter** — Wrap a third-party API behind your own interface:
|
|
135
|
-
|
|
136
|
-
```typescript
|
|
137
|
-
// Wrapping Stripe so you can swap payment providers without changing business code
|
|
138
|
-
interface PaymentGateway {
|
|
139
|
-
charge(amount: number, currency: string, customerId: string): Promise<string>;
|
|
140
|
-
}
|
|
141
|
-
class StripeAdapter implements PaymentGateway {
|
|
142
|
-
async charge(amount, currency, customerId) {
|
|
143
|
-
const pi = await stripe.paymentIntents.create({ amount, currency, customer: customerId });
|
|
144
|
-
return pi.id;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
**Decorator** — Add behavior without modifying the class:
|
|
150
|
-
|
|
151
|
-
```typescript
|
|
152
|
-
// Cache decorator wrapping any service method
|
|
153
|
-
function Cacheable(ttl: number) {
|
|
154
|
-
return (target: any, key: string, descriptor: PropertyDescriptor) => {
|
|
155
|
-
const original = descriptor.value;
|
|
156
|
-
descriptor.value = async function (...args: any[]) {
|
|
157
|
-
const cacheKey = `${key}:${JSON.stringify(args)}`;
|
|
158
|
-
const cached = await redis.get(cacheKey);
|
|
159
|
-
if (cached) return JSON.parse(cached);
|
|
160
|
-
const result = await original.apply(this, args);
|
|
161
|
-
await redis.setex(cacheKey, ttl, JSON.stringify(result));
|
|
162
|
-
return result;
|
|
163
|
-
};
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
**Proxy** — Intercept access: rate limiting, logging, access control:
|
|
169
|
-
|
|
170
|
-
```typescript
|
|
171
|
-
const protectedService = new Proxy(service, {
|
|
172
|
-
get(target, method) {
|
|
173
|
-
return async (...args: any[]) => {
|
|
174
|
-
await rateLimiter.check(userId);
|
|
175
|
-
await auditLogger.log(method, args);
|
|
176
|
-
return target[method](...args);
|
|
177
|
-
};
|
|
178
|
-
},
|
|
179
|
-
});
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Behavioral
|
|
183
|
-
|
|
184
|
-
**Observer / Event Emitter** — Decouple producers from consumers:
|
|
185
|
-
|
|
186
|
-
```typescript
|
|
187
|
-
// Domain events — fire and forget
|
|
188
|
-
eventBus.emit("user.created", { userId, email, plan });
|
|
189
|
-
// Multiple subscribers, none know about each other
|
|
190
|
-
eventBus.on("user.created", sendWelcomeEmail);
|
|
191
|
-
eventBus.on("user.created", provisionWorkspace);
|
|
192
|
-
eventBus.on("user.created", startTrialTimer);
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
**Strategy** — Swap algorithms at runtime:
|
|
196
|
-
|
|
197
|
-
```typescript
|
|
198
|
-
interface PricingStrategy { calculate(usage: number, plan: Plan): number }
|
|
199
|
-
class FlatRatePricing implements PricingStrategy { ... }
|
|
200
|
-
class UsageBasedPricing implements PricingStrategy { ... }
|
|
201
|
-
class TieredPricing implements PricingStrategy { ... }
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
**Command** — Encapsulate operations (enables undo, retry, queuing):
|
|
205
|
-
|
|
206
|
-
```typescript
|
|
207
|
-
interface Command {
|
|
208
|
-
execute(): Promise<void>;
|
|
209
|
-
undo(): Promise<void>;
|
|
210
|
-
}
|
|
211
|
-
class CreateTransactionCommand implements Command {
|
|
212
|
-
async execute() {
|
|
213
|
-
await db.transaction.create(this.data);
|
|
214
|
-
}
|
|
215
|
-
async undo() {
|
|
216
|
-
await db.transaction.delete(this.id);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
**Chain of Responsibility** — Middleware, validation pipelines:
|
|
222
|
-
|
|
223
|
-
```typescript
|
|
224
|
-
// Express middleware is this pattern
|
|
225
|
-
app.use(authenticate);
|
|
226
|
-
app.use(authorize("admin"));
|
|
227
|
-
app.use(validateBody(schema));
|
|
228
|
-
app.use(rateLimiter);
|
|
229
|
-
app.post("/api/...", handler);
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## DOMAIN-DRIVEN DESIGN (DDD)
|
|
235
|
-
|
|
236
|
-
### Core Concepts
|
|
237
|
-
|
|
238
|
-
**Bounded Context:** A boundary around a domain with its own model and language. Don't share database tables across bounded contexts — use events or APIs.
|
|
239
|
-
|
|
240
|
-
**Ubiquitous Language:** Name everything in code using the business domain's words. If product calls it a "Claim" not a "Submission", use Claim in your code.
|
|
241
|
-
|
|
242
|
-
**Aggregates:** A cluster of entities with one root. All access goes through the root.
|
|
243
|
-
|
|
244
|
-
```typescript
|
|
245
|
-
// Order is the aggregate root
|
|
246
|
-
class Order {
|
|
247
|
-
private items: OrderItem[] = [];
|
|
248
|
-
|
|
249
|
-
addItem(product: Product, quantity: number): void {
|
|
250
|
-
if (this.status !== "draft") throw new Error("Cannot modify confirmed order");
|
|
251
|
-
this.items.push(new OrderItem(product, quantity));
|
|
252
|
-
this.domainEvents.push(new OrderItemAdded(this.id, product.id));
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
// Never: db.query('INSERT INTO order_items...') — always go through Order
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
**Value Objects:** Immutable, no identity, equality by value:
|
|
259
|
-
|
|
260
|
-
```typescript
|
|
261
|
-
class Money {
|
|
262
|
-
constructor(
|
|
263
|
-
readonly amount: number,
|
|
264
|
-
readonly currency: "USD" | "EUR" | "INR",
|
|
265
|
-
) {
|
|
266
|
-
if (amount < 0) throw new Error("Money cannot be negative");
|
|
267
|
-
}
|
|
268
|
-
add(other: Money): Money {
|
|
269
|
-
if (other.currency !== this.currency) throw new Error("Currency mismatch");
|
|
270
|
-
return new Money(this.amount + other.amount, this.currency);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
**Domain Events:** Things that happened. Past tense. Immutable.
|
|
276
|
-
|
|
277
|
-
```typescript
|
|
278
|
-
// Domain event — something that happened in the domain
|
|
279
|
-
class FraudDetected {
|
|
280
|
-
readonly occurredAt = new Date();
|
|
281
|
-
constructor(
|
|
282
|
-
readonly transactionId: string,
|
|
283
|
-
readonly riskScore: number,
|
|
284
|
-
readonly reason: string,
|
|
285
|
-
) {}
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
### DDD Layers (Hexagonal Architecture)
|
|
290
|
-
|
|
291
|
-
```
|
|
292
|
-
Domain Layer: Entities, Value Objects, Domain Events, Aggregates, Domain Services
|
|
293
|
-
Pure business logic. Zero framework dependencies. Zero infrastructure code.
|
|
294
|
-
|
|
295
|
-
Application Layer: Use Cases / Application Services. Orchestrate domain objects.
|
|
296
|
-
One use case = one public method. No business logic here.
|
|
297
|
-
|
|
298
|
-
Infrastructure Layer: DB, APIs, queues, email, file storage.
|
|
299
|
-
Implements interfaces defined in domain layer.
|
|
300
|
-
|
|
301
|
-
Presentation Layer: HTTP controllers, GraphQL resolvers, CLI commands.
|
|
302
|
-
Thin. Just parses input, calls application service, formats output.
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
---
|
|
306
|
-
|
|
307
|
-
## SYSTEM DESIGN PATTERNS
|
|
308
|
-
|
|
309
|
-
### Saga Pattern (Distributed Transactions)
|
|
310
|
-
|
|
311
|
-
When a transaction spans multiple services, use sagas instead of 2PC:
|
|
312
|
-
|
|
313
|
-
```
|
|
314
|
-
Choreography Saga: Each service publishes events and reacts to others' events
|
|
315
|
-
Good for: simple flows, ≤3 services
|
|
316
|
-
|
|
317
|
-
Orchestration Saga: Central coordinator tells each service what to do
|
|
318
|
-
Good for: complex flows, need clear transaction log, >3 services
|
|
319
|
-
|
|
320
|
-
Compensating transactions: Each step has a "undo" transaction for rollback
|
|
321
|
-
Reserve inventory → Charge payment → Create order → Ship
|
|
322
|
-
Cancel shipment ← Refund payment ← Release inventory ← (if any step fails)
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
### Circuit Breaker
|
|
326
|
-
|
|
327
|
-
```typescript
|
|
328
|
-
class CircuitBreaker {
|
|
329
|
-
private failures = 0;
|
|
330
|
-
private state: "closed" | "open" | "half-open" = "closed";
|
|
331
|
-
|
|
332
|
-
async call<T>(fn: () => Promise<T>): Promise<T> {
|
|
333
|
-
if (this.state === "open") throw new Error("Circuit open — service unavailable");
|
|
334
|
-
try {
|
|
335
|
-
const result = await fn();
|
|
336
|
-
this.reset();
|
|
337
|
-
return result;
|
|
338
|
-
} catch (err) {
|
|
339
|
-
this.recordFailure();
|
|
340
|
-
throw err;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
private recordFailure() {
|
|
345
|
-
this.failures++;
|
|
346
|
-
if (this.failures >= 5) this.state = "open"; // trip after 5 failures
|
|
347
|
-
setTimeout(() => (this.state = "half-open"), 30_000); // try again after 30s
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
### Outbox Pattern (Guaranteed Event Delivery)
|
|
353
|
-
|
|
354
|
-
```sql
|
|
355
|
-
-- Write to DB and outbox in one transaction — never lose an event
|
|
356
|
-
BEGIN;
|
|
357
|
-
INSERT INTO orders (id, status, ...) VALUES (...);
|
|
358
|
-
INSERT INTO outbox (aggregate_id, event_type, payload, created_at)
|
|
359
|
-
VALUES (order_id, 'order.created', '{"orderId": "..."}', NOW());
|
|
360
|
-
COMMIT;
|
|
361
|
-
|
|
362
|
-
-- Separate process polls outbox and publishes to message queue
|
|
363
|
-
-- Delete from outbox only after confirmed publish
|
|
364
|
-
-- This guarantees at-least-once delivery without 2PC
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
### CQRS (Command Query Responsibility Segregation)
|
|
368
|
-
|
|
369
|
-
```
|
|
370
|
-
Write path: Command → Command Handler → Domain Model → Event → Write DB
|
|
371
|
-
Read path: Query → Query Handler → Read Model (optimized for reads) → Response
|
|
372
|
-
|
|
373
|
-
Use CQRS when:
|
|
374
|
-
✓ Read load >> Write load
|
|
375
|
-
✓ Complex domain model is hard to query efficiently
|
|
376
|
-
✓ Need different consistency guarantees for reads vs writes
|
|
377
|
-
✗ Simple CRUD app — massive overkill
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
---
|
|
381
|
-
|
|
382
|
-
## API DESIGN EXCELLENCE
|
|
383
|
-
|
|
384
|
-
### REST Maturity (Richardson Model)
|
|
385
|
-
|
|
386
|
-
```
|
|
387
|
-
Level 0: HTTP tunnel (POST everything to /api) — bad
|
|
388
|
-
Level 1: Resources (/users, /orders) — minimum acceptable
|
|
389
|
-
Level 2: HTTP verbs + status codes (GET/POST/PUT/PATCH) — good (most APIs stop here)
|
|
390
|
-
Level 3: Hypermedia (HATEOAS — links in responses) — rarely needed
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
### Idempotency (Always implement on mutating endpoints)
|
|
394
|
-
|
|
395
|
-
```typescript
|
|
396
|
-
// Client sends Idempotency-Key: uuid header
|
|
397
|
-
// Server stores results keyed by idempotency key
|
|
398
|
-
// If same key seen again — return cached result, don't process twice
|
|
399
|
-
// Critical for: payments, order creation, email sending, any mutation
|
|
400
|
-
|
|
401
|
-
async function createOrder(data: OrderData, idempotencyKey: string) {
|
|
402
|
-
const cached = await redis.get(`idem:${idempotencyKey}`);
|
|
403
|
-
if (cached) return JSON.parse(cached);
|
|
404
|
-
|
|
405
|
-
const order = await db.order.create(data);
|
|
406
|
-
await redis.setex(`idem:${idempotencyKey}`, 86400, JSON.stringify(order));
|
|
407
|
-
return order;
|
|
408
|
-
}
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
### Pagination (Use Cursor, Not Offset)
|
|
412
|
-
|
|
413
|
-
```typescript
|
|
414
|
-
// Offset pagination (bad at scale):
|
|
415
|
-
// GET /transactions?page=500&limit=20
|
|
416
|
-
// → DB must scan 500*20 = 10,000 rows before returning 20 — gets slower as pages increase
|
|
417
|
-
|
|
418
|
-
// Cursor pagination (correct):
|
|
419
|
-
// GET /transactions?cursor=eyJpZCI6MTIzfQ&limit=20
|
|
420
|
-
// → Always fast, consistent under concurrent inserts
|
|
421
|
-
async function getTransactions(cursor: string | null, limit = 20) {
|
|
422
|
-
const where = cursor ? { id: { lt: decodeCursor(cursor) } } : {};
|
|
423
|
-
const rows = await db.transaction.findMany({
|
|
424
|
-
where,
|
|
425
|
-
orderBy: { id: "desc" },
|
|
426
|
-
take: limit + 1,
|
|
427
|
-
});
|
|
428
|
-
const hasMore = rows.length > limit;
|
|
429
|
-
return {
|
|
430
|
-
data: rows.slice(0, limit),
|
|
431
|
-
nextCursor: hasMore ? encodeCursor(rows[limit - 1].id) : null,
|
|
432
|
-
};
|
|
433
|
-
}
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
---
|
|
437
|
-
|
|
438
|
-
## CODE QUALITY GATES
|
|
439
|
-
|
|
440
|
-
Run these automatically in CI — block merge if any fail:
|
|
441
|
-
|
|
442
|
-
```
|
|
443
|
-
Linting: ESLint (TS) / Pylint+Ruff (Python) / Spotless (Java) / golangci-lint (Go)
|
|
444
|
-
Formatting: Prettier (JS/TS) / Black (Python) / gofmt (Go) — non-negotiable, auto-fix
|
|
445
|
-
Type checking: tsc --noEmit (TS) / mypy --strict (Python) / javac warnings as errors
|
|
446
|
-
Test coverage: >80% line coverage on domain/business logic (not framework glue)
|
|
447
|
-
Complexity: Cyclomatic complexity ≤10 per function. Fail the build if exceeded.
|
|
448
|
-
Duplication: <5% code duplication (SonarQube or similar)
|
|
449
|
-
Secrets: Gitleaks or TruffleHog — zero tolerance on secret commits
|
|
450
|
-
Dependencies: No critical CVEs (Snyk / OWASP Dependency Check)
|
|
451
|
-
```
|
|
1
|
+
# Design Patterns & Software Engineering Principles
|
|
2
|
+
|
|
3
|
+
## CLEAN CODE — ABSOLUTE RULES
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
Function length: ≤20 lines. If longer, extract.
|
|
7
|
+
Class length: ≤200 lines. If longer, split responsibilities.
|
|
8
|
+
Parameters: ≤3. If more, use a config object/record.
|
|
9
|
+
Nesting depth: ≤3. Flatten with early returns.
|
|
10
|
+
Names: Reveal intent. No abbreviations. No single letters except loop vars.
|
|
11
|
+
Comments: Explain WHY, not WHAT. Code explains what. If you need a comment
|
|
12
|
+
to explain what the code does, rewrite the code.
|
|
13
|
+
DRY: Three-strike rule — same logic 3 times → extract to shared function.
|
|
14
|
+
Dead code: Delete it. Git tracks history. Comments don't.
|
|
15
|
+
Boolean params: Never. Use enums or separate methods.
|
|
16
|
+
Magic numbers: Never. Named constants only.
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## SOLID PRINCIPLES — APPLIED
|
|
22
|
+
|
|
23
|
+
### S — Single Responsibility
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// BAD: One class doing too much
|
|
27
|
+
class UserService {
|
|
28
|
+
createUser(data) { ... }
|
|
29
|
+
sendWelcomeEmail(user) { ... } // ← should be EmailService
|
|
30
|
+
generateInvoice(user) { ... } // ← should be BillingService
|
|
31
|
+
exportToCsv(users) { ... } // ← should be ExportService
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// GOOD: One reason to change
|
|
35
|
+
class UserService { createUser(data) { ... } }
|
|
36
|
+
class EmailService { sendWelcomeEmail(user) { ... } }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### O — Open/Closed
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// BAD: Add new payment type → modify existing class
|
|
43
|
+
class PaymentProcessor {
|
|
44
|
+
process(type: string, amount: number) {
|
|
45
|
+
if (type === 'stripe') { ... }
|
|
46
|
+
else if (type === 'paypal') { ... }
|
|
47
|
+
// Every new payment method = modifying this class
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// GOOD: New payment type = new class, no modification
|
|
52
|
+
interface PaymentProvider { process(amount: number): Promise<Receipt> }
|
|
53
|
+
class StripeProvider implements PaymentProvider { ... }
|
|
54
|
+
class PayPalProvider implements PaymentProvider { ... }
|
|
55
|
+
class PaymentProcessor { constructor(private provider: PaymentProvider) {} }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### L — Liskov Substitution
|
|
59
|
+
|
|
60
|
+
Every subclass must be substitutable for its parent without breaking behavior. If you have to override a method to throw NotImplementedException, your hierarchy is wrong.
|
|
61
|
+
|
|
62
|
+
### I — Interface Segregation
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// BAD: Fat interface forces implementors to implement unused methods
|
|
66
|
+
interface Worker { work(): void; eat(): void; sleep(): void }
|
|
67
|
+
|
|
68
|
+
// GOOD: Small, focused interfaces
|
|
69
|
+
interface Workable { work(): void }
|
|
70
|
+
interface Eatable { eat(): void }
|
|
71
|
+
class HumanWorker implements Workable, Eatable { ... }
|
|
72
|
+
class Robot implements Workable { work() { ... } } // doesn't eat
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### D — Dependency Inversion
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
// BAD: High-level depends on low-level
|
|
79
|
+
class OrderService {
|
|
80
|
+
private db = new PostgreSQLDatabase(); // concrete dependency
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// GOOD: Depend on abstractions
|
|
84
|
+
interface Database {
|
|
85
|
+
query(sql: string, params: any[]): Promise<any[]>;
|
|
86
|
+
}
|
|
87
|
+
class OrderService {
|
|
88
|
+
constructor(private db: Database) {} // inject, don't instantiate
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## DESIGN PATTERNS — MOST USED IN PRODUCTION
|
|
95
|
+
|
|
96
|
+
### Creational
|
|
97
|
+
|
|
98
|
+
**Factory Method** — Use when object creation logic is complex or varies by type:
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
interface Notifier {
|
|
102
|
+
send(message: string): Promise<void>;
|
|
103
|
+
}
|
|
104
|
+
class NotifierFactory {
|
|
105
|
+
static create(type: "email" | "sms" | "push"): Notifier {
|
|
106
|
+
switch (type) {
|
|
107
|
+
case "email":
|
|
108
|
+
return new EmailNotifier();
|
|
109
|
+
case "sms":
|
|
110
|
+
return new SMSNotifier();
|
|
111
|
+
case "push":
|
|
112
|
+
return new PushNotifier();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Builder** — Use for complex objects with many optional fields:
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
const query = new QueryBuilder()
|
|
122
|
+
.table("transactions")
|
|
123
|
+
.where("user_id", userId)
|
|
124
|
+
.where("status", "completed")
|
|
125
|
+
.orderBy("created_at", "desc")
|
|
126
|
+
.limit(50)
|
|
127
|
+
.build();
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Singleton** — Database connection pools, configuration, loggers. Use sparingly — it's global state.
|
|
131
|
+
|
|
132
|
+
### Structural
|
|
133
|
+
|
|
134
|
+
**Adapter** — Wrap a third-party API behind your own interface:
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
// Wrapping Stripe so you can swap payment providers without changing business code
|
|
138
|
+
interface PaymentGateway {
|
|
139
|
+
charge(amount: number, currency: string, customerId: string): Promise<string>;
|
|
140
|
+
}
|
|
141
|
+
class StripeAdapter implements PaymentGateway {
|
|
142
|
+
async charge(amount, currency, customerId) {
|
|
143
|
+
const pi = await stripe.paymentIntents.create({ amount, currency, customer: customerId });
|
|
144
|
+
return pi.id;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Decorator** — Add behavior without modifying the class:
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// Cache decorator wrapping any service method
|
|
153
|
+
function Cacheable(ttl: number) {
|
|
154
|
+
return (target: any, key: string, descriptor: PropertyDescriptor) => {
|
|
155
|
+
const original = descriptor.value;
|
|
156
|
+
descriptor.value = async function (...args: any[]) {
|
|
157
|
+
const cacheKey = `${key}:${JSON.stringify(args)}`;
|
|
158
|
+
const cached = await redis.get(cacheKey);
|
|
159
|
+
if (cached) return JSON.parse(cached);
|
|
160
|
+
const result = await original.apply(this, args);
|
|
161
|
+
await redis.setex(cacheKey, ttl, JSON.stringify(result));
|
|
162
|
+
return result;
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Proxy** — Intercept access: rate limiting, logging, access control:
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
const protectedService = new Proxy(service, {
|
|
172
|
+
get(target, method) {
|
|
173
|
+
return async (...args: any[]) => {
|
|
174
|
+
await rateLimiter.check(userId);
|
|
175
|
+
await auditLogger.log(method, args);
|
|
176
|
+
return target[method](...args);
|
|
177
|
+
};
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Behavioral
|
|
183
|
+
|
|
184
|
+
**Observer / Event Emitter** — Decouple producers from consumers:
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
// Domain events — fire and forget
|
|
188
|
+
eventBus.emit("user.created", { userId, email, plan });
|
|
189
|
+
// Multiple subscribers, none know about each other
|
|
190
|
+
eventBus.on("user.created", sendWelcomeEmail);
|
|
191
|
+
eventBus.on("user.created", provisionWorkspace);
|
|
192
|
+
eventBus.on("user.created", startTrialTimer);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Strategy** — Swap algorithms at runtime:
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
interface PricingStrategy { calculate(usage: number, plan: Plan): number }
|
|
199
|
+
class FlatRatePricing implements PricingStrategy { ... }
|
|
200
|
+
class UsageBasedPricing implements PricingStrategy { ... }
|
|
201
|
+
class TieredPricing implements PricingStrategy { ... }
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Command** — Encapsulate operations (enables undo, retry, queuing):
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
interface Command {
|
|
208
|
+
execute(): Promise<void>;
|
|
209
|
+
undo(): Promise<void>;
|
|
210
|
+
}
|
|
211
|
+
class CreateTransactionCommand implements Command {
|
|
212
|
+
async execute() {
|
|
213
|
+
await db.transaction.create(this.data);
|
|
214
|
+
}
|
|
215
|
+
async undo() {
|
|
216
|
+
await db.transaction.delete(this.id);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Chain of Responsibility** — Middleware, validation pipelines:
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
// Express middleware is this pattern
|
|
225
|
+
app.use(authenticate);
|
|
226
|
+
app.use(authorize("admin"));
|
|
227
|
+
app.use(validateBody(schema));
|
|
228
|
+
app.use(rateLimiter);
|
|
229
|
+
app.post("/api/...", handler);
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## DOMAIN-DRIVEN DESIGN (DDD)
|
|
235
|
+
|
|
236
|
+
### Core Concepts
|
|
237
|
+
|
|
238
|
+
**Bounded Context:** A boundary around a domain with its own model and language. Don't share database tables across bounded contexts — use events or APIs.
|
|
239
|
+
|
|
240
|
+
**Ubiquitous Language:** Name everything in code using the business domain's words. If product calls it a "Claim" not a "Submission", use Claim in your code.
|
|
241
|
+
|
|
242
|
+
**Aggregates:** A cluster of entities with one root. All access goes through the root.
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
// Order is the aggregate root
|
|
246
|
+
class Order {
|
|
247
|
+
private items: OrderItem[] = [];
|
|
248
|
+
|
|
249
|
+
addItem(product: Product, quantity: number): void {
|
|
250
|
+
if (this.status !== "draft") throw new Error("Cannot modify confirmed order");
|
|
251
|
+
this.items.push(new OrderItem(product, quantity));
|
|
252
|
+
this.domainEvents.push(new OrderItemAdded(this.id, product.id));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Never: db.query('INSERT INTO order_items...') — always go through Order
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Value Objects:** Immutable, no identity, equality by value:
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
class Money {
|
|
262
|
+
constructor(
|
|
263
|
+
readonly amount: number,
|
|
264
|
+
readonly currency: "USD" | "EUR" | "INR",
|
|
265
|
+
) {
|
|
266
|
+
if (amount < 0) throw new Error("Money cannot be negative");
|
|
267
|
+
}
|
|
268
|
+
add(other: Money): Money {
|
|
269
|
+
if (other.currency !== this.currency) throw new Error("Currency mismatch");
|
|
270
|
+
return new Money(this.amount + other.amount, this.currency);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Domain Events:** Things that happened. Past tense. Immutable.
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
// Domain event — something that happened in the domain
|
|
279
|
+
class FraudDetected {
|
|
280
|
+
readonly occurredAt = new Date();
|
|
281
|
+
constructor(
|
|
282
|
+
readonly transactionId: string,
|
|
283
|
+
readonly riskScore: number,
|
|
284
|
+
readonly reason: string,
|
|
285
|
+
) {}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### DDD Layers (Hexagonal Architecture)
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
Domain Layer: Entities, Value Objects, Domain Events, Aggregates, Domain Services
|
|
293
|
+
Pure business logic. Zero framework dependencies. Zero infrastructure code.
|
|
294
|
+
|
|
295
|
+
Application Layer: Use Cases / Application Services. Orchestrate domain objects.
|
|
296
|
+
One use case = one public method. No business logic here.
|
|
297
|
+
|
|
298
|
+
Infrastructure Layer: DB, APIs, queues, email, file storage.
|
|
299
|
+
Implements interfaces defined in domain layer.
|
|
300
|
+
|
|
301
|
+
Presentation Layer: HTTP controllers, GraphQL resolvers, CLI commands.
|
|
302
|
+
Thin. Just parses input, calls application service, formats output.
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## SYSTEM DESIGN PATTERNS
|
|
308
|
+
|
|
309
|
+
### Saga Pattern (Distributed Transactions)
|
|
310
|
+
|
|
311
|
+
When a transaction spans multiple services, use sagas instead of 2PC:
|
|
312
|
+
|
|
313
|
+
```
|
|
314
|
+
Choreography Saga: Each service publishes events and reacts to others' events
|
|
315
|
+
Good for: simple flows, ≤3 services
|
|
316
|
+
|
|
317
|
+
Orchestration Saga: Central coordinator tells each service what to do
|
|
318
|
+
Good for: complex flows, need clear transaction log, >3 services
|
|
319
|
+
|
|
320
|
+
Compensating transactions: Each step has a "undo" transaction for rollback
|
|
321
|
+
Reserve inventory → Charge payment → Create order → Ship
|
|
322
|
+
Cancel shipment ← Refund payment ← Release inventory ← (if any step fails)
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### Circuit Breaker
|
|
326
|
+
|
|
327
|
+
```typescript
|
|
328
|
+
class CircuitBreaker {
|
|
329
|
+
private failures = 0;
|
|
330
|
+
private state: "closed" | "open" | "half-open" = "closed";
|
|
331
|
+
|
|
332
|
+
async call<T>(fn: () => Promise<T>): Promise<T> {
|
|
333
|
+
if (this.state === "open") throw new Error("Circuit open — service unavailable");
|
|
334
|
+
try {
|
|
335
|
+
const result = await fn();
|
|
336
|
+
this.reset();
|
|
337
|
+
return result;
|
|
338
|
+
} catch (err) {
|
|
339
|
+
this.recordFailure();
|
|
340
|
+
throw err;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
private recordFailure() {
|
|
345
|
+
this.failures++;
|
|
346
|
+
if (this.failures >= 5) this.state = "open"; // trip after 5 failures
|
|
347
|
+
setTimeout(() => (this.state = "half-open"), 30_000); // try again after 30s
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Outbox Pattern (Guaranteed Event Delivery)
|
|
353
|
+
|
|
354
|
+
```sql
|
|
355
|
+
-- Write to DB and outbox in one transaction — never lose an event
|
|
356
|
+
BEGIN;
|
|
357
|
+
INSERT INTO orders (id, status, ...) VALUES (...);
|
|
358
|
+
INSERT INTO outbox (aggregate_id, event_type, payload, created_at)
|
|
359
|
+
VALUES (order_id, 'order.created', '{"orderId": "..."}', NOW());
|
|
360
|
+
COMMIT;
|
|
361
|
+
|
|
362
|
+
-- Separate process polls outbox and publishes to message queue
|
|
363
|
+
-- Delete from outbox only after confirmed publish
|
|
364
|
+
-- This guarantees at-least-once delivery without 2PC
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### CQRS (Command Query Responsibility Segregation)
|
|
368
|
+
|
|
369
|
+
```
|
|
370
|
+
Write path: Command → Command Handler → Domain Model → Event → Write DB
|
|
371
|
+
Read path: Query → Query Handler → Read Model (optimized for reads) → Response
|
|
372
|
+
|
|
373
|
+
Use CQRS when:
|
|
374
|
+
✓ Read load >> Write load
|
|
375
|
+
✓ Complex domain model is hard to query efficiently
|
|
376
|
+
✓ Need different consistency guarantees for reads vs writes
|
|
377
|
+
✗ Simple CRUD app — massive overkill
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## API DESIGN EXCELLENCE
|
|
383
|
+
|
|
384
|
+
### REST Maturity (Richardson Model)
|
|
385
|
+
|
|
386
|
+
```
|
|
387
|
+
Level 0: HTTP tunnel (POST everything to /api) — bad
|
|
388
|
+
Level 1: Resources (/users, /orders) — minimum acceptable
|
|
389
|
+
Level 2: HTTP verbs + status codes (GET/POST/PUT/PATCH) — good (most APIs stop here)
|
|
390
|
+
Level 3: Hypermedia (HATEOAS — links in responses) — rarely needed
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Idempotency (Always implement on mutating endpoints)
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
// Client sends Idempotency-Key: uuid header
|
|
397
|
+
// Server stores results keyed by idempotency key
|
|
398
|
+
// If same key seen again — return cached result, don't process twice
|
|
399
|
+
// Critical for: payments, order creation, email sending, any mutation
|
|
400
|
+
|
|
401
|
+
async function createOrder(data: OrderData, idempotencyKey: string) {
|
|
402
|
+
const cached = await redis.get(`idem:${idempotencyKey}`);
|
|
403
|
+
if (cached) return JSON.parse(cached);
|
|
404
|
+
|
|
405
|
+
const order = await db.order.create(data);
|
|
406
|
+
await redis.setex(`idem:${idempotencyKey}`, 86400, JSON.stringify(order));
|
|
407
|
+
return order;
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### Pagination (Use Cursor, Not Offset)
|
|
412
|
+
|
|
413
|
+
```typescript
|
|
414
|
+
// Offset pagination (bad at scale):
|
|
415
|
+
// GET /transactions?page=500&limit=20
|
|
416
|
+
// → DB must scan 500*20 = 10,000 rows before returning 20 — gets slower as pages increase
|
|
417
|
+
|
|
418
|
+
// Cursor pagination (correct):
|
|
419
|
+
// GET /transactions?cursor=eyJpZCI6MTIzfQ&limit=20
|
|
420
|
+
// → Always fast, consistent under concurrent inserts
|
|
421
|
+
async function getTransactions(cursor: string | null, limit = 20) {
|
|
422
|
+
const where = cursor ? { id: { lt: decodeCursor(cursor) } } : {};
|
|
423
|
+
const rows = await db.transaction.findMany({
|
|
424
|
+
where,
|
|
425
|
+
orderBy: { id: "desc" },
|
|
426
|
+
take: limit + 1,
|
|
427
|
+
});
|
|
428
|
+
const hasMore = rows.length > limit;
|
|
429
|
+
return {
|
|
430
|
+
data: rows.slice(0, limit),
|
|
431
|
+
nextCursor: hasMore ? encodeCursor(rows[limit - 1].id) : null,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## CODE QUALITY GATES
|
|
439
|
+
|
|
440
|
+
Run these automatically in CI — block merge if any fail:
|
|
441
|
+
|
|
442
|
+
```
|
|
443
|
+
Linting: ESLint (TS) / Pylint+Ruff (Python) / Spotless (Java) / golangci-lint (Go)
|
|
444
|
+
Formatting: Prettier (JS/TS) / Black (Python) / gofmt (Go) — non-negotiable, auto-fix
|
|
445
|
+
Type checking: tsc --noEmit (TS) / mypy --strict (Python) / javac warnings as errors
|
|
446
|
+
Test coverage: >80% line coverage on domain/business logic (not framework glue)
|
|
447
|
+
Complexity: Cyclomatic complexity ≤10 per function. Fail the build if exceeded.
|
|
448
|
+
Duplication: <5% code duplication (SonarQube or similar)
|
|
449
|
+
Secrets: Gitleaks or TruffleHog — zero tolerance on secret commits
|
|
450
|
+
Dependencies: No critical CVEs (Snyk / OWASP Dependency Check)
|
|
451
|
+
```
|