opencode-skills-collection 1.0.186 → 1.0.187

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.
Files changed (71) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +5 -1
  2. package/bundled-skills/3d-web-experience/SKILL.md +152 -37
  3. package/bundled-skills/agent-evaluation/SKILL.md +1088 -26
  4. package/bundled-skills/agent-memory-systems/SKILL.md +1037 -25
  5. package/bundled-skills/agent-tool-builder/SKILL.md +668 -16
  6. package/bundled-skills/ai-agents-architect/SKILL.md +271 -31
  7. package/bundled-skills/ai-product/SKILL.md +716 -26
  8. package/bundled-skills/ai-wrapper-product/SKILL.md +450 -44
  9. package/bundled-skills/algolia-search/SKILL.md +867 -15
  10. package/bundled-skills/autonomous-agents/SKILL.md +1033 -26
  11. package/bundled-skills/aws-serverless/SKILL.md +1046 -35
  12. package/bundled-skills/azure-functions/SKILL.md +1318 -19
  13. package/bundled-skills/browser-automation/SKILL.md +1065 -28
  14. package/bundled-skills/browser-extension-builder/SKILL.md +159 -32
  15. package/bundled-skills/bullmq-specialist/SKILL.md +347 -16
  16. package/bundled-skills/clerk-auth/SKILL.md +796 -15
  17. package/bundled-skills/computer-use-agents/SKILL.md +1870 -28
  18. package/bundled-skills/context-window-management/SKILL.md +271 -18
  19. package/bundled-skills/conversation-memory/SKILL.md +453 -24
  20. package/bundled-skills/crewai/SKILL.md +252 -46
  21. package/bundled-skills/discord-bot-architect/SKILL.md +1207 -34
  22. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  23. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  24. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  25. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  26. package/bundled-skills/docs/users/bundles.md +1 -1
  27. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  28. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  29. package/bundled-skills/docs/users/getting-started.md +1 -1
  30. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  31. package/bundled-skills/docs/users/usage.md +4 -4
  32. package/bundled-skills/docs/users/visual-guide.md +4 -4
  33. package/bundled-skills/email-systems/SKILL.md +646 -26
  34. package/bundled-skills/faf-expert/SKILL.md +221 -0
  35. package/bundled-skills/faf-wizard/SKILL.md +252 -0
  36. package/bundled-skills/file-uploads/SKILL.md +212 -11
  37. package/bundled-skills/firebase/SKILL.md +646 -16
  38. package/bundled-skills/gcp-cloud-run/SKILL.md +1117 -32
  39. package/bundled-skills/graphql/SKILL.md +1026 -27
  40. package/bundled-skills/hubspot-integration/SKILL.md +804 -19
  41. package/bundled-skills/idea-darwin/SKILL.md +120 -0
  42. package/bundled-skills/inngest/SKILL.md +431 -16
  43. package/bundled-skills/interactive-portfolio/SKILL.md +342 -44
  44. package/bundled-skills/langfuse/SKILL.md +296 -41
  45. package/bundled-skills/langgraph/SKILL.md +259 -50
  46. package/bundled-skills/micro-saas-launcher/SKILL.md +343 -44
  47. package/bundled-skills/neon-postgres/SKILL.md +572 -15
  48. package/bundled-skills/nextjs-supabase-auth/SKILL.md +269 -21
  49. package/bundled-skills/notion-template-business/SKILL.md +371 -44
  50. package/bundled-skills/personal-tool-builder/SKILL.md +537 -44
  51. package/bundled-skills/plaid-fintech/SKILL.md +825 -19
  52. package/bundled-skills/prompt-caching/SKILL.md +438 -25
  53. package/bundled-skills/rag-engineer/SKILL.md +271 -29
  54. package/bundled-skills/salesforce-development/SKILL.md +912 -19
  55. package/bundled-skills/satori/SKILL.md +54 -0
  56. package/bundled-skills/scroll-experience/SKILL.md +381 -44
  57. package/bundled-skills/segment-cdp/SKILL.md +817 -19
  58. package/bundled-skills/shopify-apps/SKILL.md +1475 -19
  59. package/bundled-skills/slack-bot-builder/SKILL.md +1162 -28
  60. package/bundled-skills/telegram-bot-builder/SKILL.md +152 -37
  61. package/bundled-skills/telegram-mini-app/SKILL.md +445 -44
  62. package/bundled-skills/trigger-dev/SKILL.md +916 -27
  63. package/bundled-skills/twilio-communications/SKILL.md +1310 -28
  64. package/bundled-skills/upstash-qstash/SKILL.md +898 -27
  65. package/bundled-skills/vercel-deployment/SKILL.md +637 -39
  66. package/bundled-skills/viral-generator-builder/SKILL.md +132 -37
  67. package/bundled-skills/voice-agents/SKILL.md +937 -27
  68. package/bundled-skills/voice-ai-development/SKILL.md +375 -46
  69. package/bundled-skills/workflow-automation/SKILL.md +982 -29
  70. package/bundled-skills/zapier-make-patterns/SKILL.md +772 -27
  71. package/package.json +1 -1
@@ -0,0 +1,221 @@
1
+ ---
2
+ name: faf-expert
3
+ description: "Advanced .faf (Foundational AI-context Format) specialist. IANA-registered format, MCP server config, championship scoring, bi-directional sync."
4
+ category: coding
5
+ risk: safe
6
+ source: community
7
+ source_repo: Wolfe-Jam/faf-skills
8
+ source_type: community
9
+ date_added: "2026-04-07"
10
+ author: wolfejam
11
+ tags: [faf, ai-context, project-management, mcp, iana]
12
+ tools: [claude, cursor, gemini, windsurf]
13
+ ---
14
+
15
+ # FAF Expert - Advanced AI Context Architecture
16
+
17
+ **Master the IANA-registered format that makes AI understand your projects.**
18
+
19
+ Transform any codebase into an AI-intelligent project with persistent context that survives across sessions, tools, and AI platforms. Expert-level control over the foundational layer that powers modern AI development workflows.
20
+
21
+ ## When to Use This Skill
22
+
23
+ Use FAF Expert when you need:
24
+
25
+ | Scenario | What FAF Expert Provides |
26
+ |----------|---------------------------|
27
+ | **Complex project setup** | Expert configuration of .faf files and MCP servers |
28
+ | **Championship scoring** | Achieve 85%+ AI-readiness scores for production projects |
29
+ | **Multi-AI workflows** | Universal context that works across Claude, Cursor, Gemini, Windsurf |
30
+ | **Legacy codebase revival** | Transform archaeology into AI-readable project DNA |
31
+ | **Team collaboration** | Standardized context format for consistent AI assistance |
32
+ | **Enterprise deployment** | Professional MCP server configuration and management |
33
+
34
+ ## Real-World Examples
35
+
36
+ ### Example 1: Legacy Enterprise Java System
37
+ ```yaml
38
+ # Achieved: 92% Gold tier with FAF Expert
39
+ project:
40
+ name: enterprise-payment-api
41
+ goal: Mission-critical payment processing system
42
+
43
+ stack:
44
+ backend: java-spring
45
+ database: oracle
46
+ runtime: java-11
47
+ deployment: kubernetes
48
+
49
+ human_context:
50
+ where: AWS EKS production cluster
51
+ when: Legacy system from 2018, modernizing 2026
52
+ how: Spring Boot 2.7, Oracle 19c, Docker containerization
53
+ ```
54
+
55
+ ### Example 2: Modern React Dashboard
56
+ ```yaml
57
+ # Achieved: 97% Gold tier performance
58
+ project:
59
+ name: analytics-dashboard
60
+ goal: Real-time analytics for SaaS platform
61
+
62
+ stack:
63
+ frontend: react-18
64
+ css_framework: tailwind
65
+ state: zustand
66
+ build: vite
67
+ testing: vitest
68
+ deployment: vercel
69
+ ```
70
+
71
+ ## Core Capabilities
72
+
73
+ ### 🏆 Championship Scoring System
74
+ - **Gold Tier (95%+)**: Production-ready AI context
75
+ - **Silver Tier (85%+)**: Professional development standard
76
+ - **Bronze Tier (70%+)**: Solid foundation for AI assistance
77
+
78
+ ### 🔧 MCP Server Configuration
79
+ Expert setup of claude-faf-mcp with 33 tools:
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "faf": {
84
+ "command": "npx",
85
+ "args": ["-y", "claude-faf-mcp@latest"]
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ ### 🔄 Bi-Directional Sync
92
+ Keep context synchronized across platforms:
93
+ - `.faf` ↔ `CLAUDE.md`
94
+ - `.faf` ↔ `.cursorrules`
95
+ - `.faf` ↔ `GEMINI.md`
96
+ - `.faf` ↔ `AGENTS.md`
97
+
98
+ ### 📊 Mk4 Architecture Framework
99
+ 33-slot IANA format for comprehensive project context:
100
+ - Project identity and goals
101
+ - Technical stack detection
102
+ - Human context (who/what/why/where/when/how)
103
+ - Architecture patterns
104
+ - Deployment configuration
105
+
106
+ ## Getting Started
107
+
108
+ ### Quick Installation
109
+ ```bash
110
+ # Install FAF CLI
111
+ npm install -g faf-cli
112
+
113
+ # Initialize your project
114
+ faf init
115
+
116
+ # Score AI-readiness
117
+ faf score --details
118
+
119
+ # Set up MCP server
120
+ faf mcp install
121
+ ```
122
+
123
+ ### Expert Commands
124
+ ```bash
125
+ # Advanced scoring with breakdown
126
+ faf score --championship --verbose
127
+
128
+ # Multi-platform sync
129
+ faf bi-sync --target all
130
+
131
+ # Validate format compliance
132
+ faf validate --strict
133
+
134
+ # Enhanced AI optimization
135
+ faf enhance --model claude --focus completeness
136
+ ```
137
+
138
+ ## Success Metrics
139
+
140
+ **Real Performance Data:**
141
+ - **52k+ downloads** across FAF ecosystem
142
+ - **800+ comprehensive tests** (CLI + MCP)
143
+ - **IANA-registered format** (application/vnd.faf+yaml)
144
+ - **153+ validated formats** supported
145
+ - **Championship-grade performance** (<50ms execution)
146
+
147
+ ## Platform Compatibility
148
+
149
+ ### Supported AI Tools
150
+ - ✅ **Claude Code** - Native MCP integration
151
+ - ✅ **Cursor** - .cursorrules sync
152
+ - ✅ **Gemini CLI** - GEMINI.md sync
153
+ - ✅ **Windsurf** - .windsurfrules support
154
+ - ✅ **Universal** - Works with any AI that reads YAML
155
+
156
+ ### MCP Servers Available
157
+ - `claude-faf-mcp` - 33 tools, 391 tests
158
+ - `grok-faf-mcp` - xAI/Grok optimized
159
+ - `rust-faf-mcp` - Native performance (4.3MB binary)
160
+ - `gemini-faf-mcp` - Google Gemini integration
161
+
162
+ ## Advanced Patterns
163
+
164
+ ### Enterprise Configuration
165
+ ```yaml
166
+ faf_version: "3.0"
167
+ project:
168
+ name: enterprise-platform
169
+ tier: production
170
+
171
+ human_context:
172
+ team_size: 50+
173
+ compliance: SOC2, HIPAA
174
+ deployment: multi-region
175
+
176
+ stack:
177
+ architecture: microservices
178
+ orchestration: kubernetes
179
+ monitoring: datadog
180
+ security: vault
181
+ ```
182
+
183
+ ### Legacy System Revival
184
+ ```yaml
185
+ # Transform 10-year-old codebase to AI-ready
186
+ project:
187
+ archaeology: true
188
+ modernization_target: 2026
189
+
190
+ stack:
191
+ legacy: php-5.6
192
+ migration_path: laravel-11
193
+ database_upgrade: mysql-8
194
+ ```
195
+
196
+ ## Expert Resources
197
+
198
+ - **Documentation**: https://faf.one
199
+ - **MCP Registry**: Official Anthropic steward
200
+ - **CLI Reference**: `faf --help`
201
+ - **Community**: Discord server with 1000+ developers
202
+ - **Enterprise**: Professional support available
203
+
204
+ ## When to Use faf-wizard Instead
205
+
206
+ Use `faf-wizard` for:
207
+ - ✅ Quick project setup
208
+ - ✅ One-click generation
209
+ - ✅ Beginner-friendly workflow
210
+ - ✅ Automated stack detection
211
+
212
+ Use `faf-expert` for:
213
+ - 🎯 Fine-tuned configuration
214
+ - 🎯 Championship scoring optimization
215
+ - 🎯 Multi-platform sync management
216
+ - 🎯 Enterprise deployment patterns
217
+ - 🎯 Advanced MCP server setup
218
+
219
+ ---
220
+
221
+ *Master the format that makes AI understand your projects. FAF Expert - for when you need championship-grade AI context architecture.*
@@ -0,0 +1,252 @@
1
+ ---
2
+ name: faf-wizard
3
+ description: "Done-for-you .faf generator. One-click AI context for any project - new, legacy, or famous. Auto-detects stack, scores readiness, works everywhere."
4
+ category: productivity
5
+ risk: safe
6
+ source: community
7
+ source_repo: Wolfe-Jam/faf-skills
8
+ source_type: community
9
+ date_added: "2026-04-07"
10
+ author: wolfejam
11
+ tags: [faf, automation, project-setup, ai-context, productivity]
12
+ tools: [claude, cursor, gemini, windsurf, any-ai]
13
+ ---
14
+
15
+ # FAF Wizard - One-Click AI Intelligence
16
+
17
+ **The pit crew for your projects.** Point it at any codebase and get scored, AI-ready context in 60 seconds.
18
+
19
+ Transform any project - new, legacy, famous OSS, or forgotten side projects - into an AI-intelligent workspace with persistent context that works across all AI tools.
20
+
21
+ ## The Problem It Solves
22
+
23
+ **Even React.js scores 0% AI-readiness.** Famous repositories have no AI context.
24
+
25
+ | What Exists | What It Tells AI |
26
+ |-------------|------------------|
27
+ | README.md | "What this does" (for humans) |
28
+ | docs/ | "How to use it" (for humans) |
29
+ | **project.faf** | "How to help build this" (for AI) |
30
+
31
+ Documentation tells humans how to use your code. AI context tells AI how to help you build it. **They're completely different things.**
32
+
33
+ ## Works on ANY Project
34
+
35
+ | Project Type | What FAF Wizard Does |
36
+ |-------------|----------------------|
37
+ | **Brand new** | Perfect AI context from line one |
38
+ | **Legacy nightmare** | AI finally understands the archaeology |
39
+ | **Famous OSS** | Even React doesn't have this |
40
+ | **Side projects** | Stop re-explaining every session |
41
+ | **Client handoffs** | Portable context for any AI tool |
42
+ | **Team projects** | Shared context that everyone can use |
43
+
44
+ ## Real Success Stories
45
+
46
+ ### Before/After: Legacy E-commerce Platform
47
+ ```
48
+ Before: "This 50k-line PHP codebase from 2015..."
49
+ AI: "I don't understand this architecture"
50
+
51
+ After: 60 seconds with FAF Wizard
52
+ AI: "I see this is a Laravel-based e-commerce system with
53
+ payment processing, inventory management, and multi-tenant
54
+ architecture. Here's how I can help..."
55
+ ```
56
+
57
+ ### Before/After: Modern React App
58
+ ```
59
+ Before: Every AI session starts with context explanation
60
+ Time lost: 5-10 minutes per session
61
+
62
+ After: project.faf exists
63
+ AI: Instant understanding, productive from message one
64
+ Time saved: 2+ hours per day
65
+ ```
66
+
67
+ ## The 60-Second Workflow
68
+
69
+ ### Step 1: Detection (10 seconds)
70
+ ```bash
71
+ faf auto
72
+ # Scans manifest files, directory structure, dependencies
73
+ # Detects: React + TypeScript + Tailwind + Vercel
74
+ ```
75
+
76
+ ### Step 2: Generation (30 seconds)
77
+ ```yaml
78
+ # Auto-generated project.faf
79
+ project:
80
+ name: my-saas-dashboard
81
+ goal: Customer analytics platform
82
+
83
+ stack:
84
+ frontend: react-18
85
+ css: tailwind
86
+ deployment: vercel
87
+
88
+ human_context:
89
+ who: Solo founder
90
+ what: SaaS analytics dashboard
91
+ why: Customer insights for small businesses
92
+ ```
93
+
94
+ ### Step 3: Scoring & Report (20 seconds)
95
+ ```
96
+ ✅ Generated: project.faf
97
+ 🏆 AI-Readiness: 87% Bronze - Production ready
98
+
99
+ Filled: 9/11 active slots
100
+ Ignored: 22 slots (not applicable)
101
+
102
+ To reach Silver (95%):
103
+ + Add API documentation (+5%)
104
+ + Define deployment details (+3%)
105
+ ```
106
+
107
+ ## Performance Data (Real Numbers)
108
+
109
+ **Analyzed 8,400+ Projects:**
110
+ - ✅ **99.2% detection accuracy** across 153+ formats
111
+ - ✅ **Average generation time**: 12.3 seconds
112
+ - ✅ **Bronze tier or higher**: 94% of projects
113
+ - ✅ **Zero manual configuration**: Works out of the box
114
+
115
+ ### Format Support
116
+ Automatically detects and configures:
117
+ - **JavaScript**: React, Vue, Angular, Svelte, Next.js, Nuxt
118
+ - **Python**: Django, Flask, FastAPI, Jupyter, Poetry
119
+ - **TypeScript**: All JS frameworks + native TS projects
120
+ - **Rust**: Cargo projects, CLI tools, web servers
121
+ - **Go**: Modules, Docker, microservices
122
+ - **Java**: Maven, Gradle, Spring Boot
123
+ - **+147 more formats**
124
+
125
+ ## Universal Compatibility
126
+
127
+ ### Works With Every AI Tool
128
+ - ✅ **Claude Code** - Reads .faf natively
129
+ - ✅ **Cursor** - Auto-syncs to .cursorrules
130
+ - ✅ **Gemini CLI** - Converts to GEMINI.md
131
+ - ✅ **Windsurf** - Syncs to .windsurfrules
132
+ - ✅ **ChatGPT** - Readable YAML format
133
+ - ✅ **Any AI** - Universal format support
134
+
135
+ ### Migration Support
136
+ Already have AI context files?
137
+ ```bash
138
+ # Migrates existing context
139
+ faf migrate --from .cursorrules
140
+ faf migrate --from CLAUDE.md
141
+ faf migrate --from README.md
142
+
143
+ # One format, works everywhere
144
+ faf sync --target all
145
+ ```
146
+
147
+ ## Installation Options
148
+
149
+ ### Option 1: CLI (Recommended)
150
+ ```bash
151
+ npm install -g faf-cli
152
+ cd your-project
153
+ faf auto
154
+ ```
155
+
156
+ ### Option 2: MCP Server (Claude Code)
157
+ ```json
158
+ {
159
+ "mcpServers": {
160
+ "faf": {
161
+ "command": "npx",
162
+ "args": ["-y", "claude-faf-mcp@latest"]
163
+ }
164
+ }
165
+ }
166
+ ```
167
+
168
+ ### Option 3: Browser Extension
169
+ Install from Chrome Web Store - works on any Git repository.
170
+
171
+ ## Three-Phase Intelligence
172
+
173
+ ### Phase 1: Stack Detection
174
+ - Scans `package.json`, `Cargo.toml`, `pyproject.toml`, etc.
175
+ - Analyzes directory structure and file patterns
176
+ - Identifies frameworks, deployment targets, testing setup
177
+
178
+ ### Phase 2: Context Mining
179
+ - Extracts project description from README
180
+ - Identifies architecture patterns from code structure
181
+ - Pulls dependency information for AI context
182
+
183
+ ### Phase 3: Optimization
184
+ - Generates focused 33-slot IANA format
185
+ - Validates against format specification
186
+ - Scores AI-readiness with improvement suggestions
187
+
188
+ ## Success Metrics by Project Type
189
+
190
+ | Project Type | Avg Score | Time to Bronze | Detection Rate |
191
+ |-------------|-----------|----------------|----------------|
192
+ | **React/Vue** | 89% | Instant | 99.8% |
193
+ | **Python Django** | 91% | Instant | 99.5% |
194
+ | **Rust CLI** | 85% | Instant | 99.1% |
195
+ | **Legacy PHP** | 76% | 30 seconds | 94.2% |
196
+ | **Monorepo** | 82% | 45 seconds | 91.8% |
197
+
198
+ ## When to Use faf-expert Instead
199
+
200
+ Use `faf-wizard` for:
201
+ - ✅ Quick project onboarding
202
+ - ✅ Automatic everything
203
+ - ✅ "Just make it work"
204
+ - ✅ Time-constrained scenarios
205
+
206
+ Use `faf-expert` for:
207
+ - 🎯 Fine-tuned championship scoring (95%+)
208
+ - 🎯 Complex MCP server configuration
209
+ - 🎯 Multi-platform sync management
210
+ - 🎯 Enterprise deployment patterns
211
+
212
+ ## Validation & Security
213
+
214
+ **Enterprise-Grade Standards:**
215
+ - ✅ **800+ comprehensive tests** across CLI and MCP
216
+ - ✅ **No credentials ever stored** in .faf files
217
+ - ✅ **YAML format validation** prevents malformed files
218
+ - ✅ **IANA-registered format** (application/vnd.faf+yaml)
219
+ - ✅ **MIT licensed** - safe for commercial use
220
+
221
+ ## Getting Started
222
+
223
+ ### For Your Current Project
224
+ ```bash
225
+ # One command, done forever
226
+ npx faf-cli auto
227
+
228
+ # Check the results
229
+ cat project.faf
230
+ ```
231
+
232
+ ### For Any GitHub Repository
233
+ Install the browser extension and click "Generate FAF" on any repo.
234
+
235
+ ### For Teams
236
+ ```bash
237
+ # Set up team-wide MCP server
238
+ faf mcp install --team
239
+ faf sync --target all --watch
240
+ ```
241
+
242
+ ## Community & Support
243
+
244
+ - **Website**: https://faf.one
245
+ - **Chrome Extension**: 4.8★ rating, Google approved
246
+ - **Downloads**: 52k+ across ecosystem
247
+ - **Discord**: Active community of 1000+ developers
248
+ - **Documentation**: Comprehensive guides and examples
249
+
250
+ ---
251
+
252
+ *Stop explaining your project every session. FAF Wizard - because AI should understand your project as well as you do.*
@@ -1,27 +1,228 @@
1
1
  ---
2
2
  name: file-uploads
3
- description: "Careful about security and performance. Never trusts file extensions. Knows that large uploads need special handling. Prefers presigned URLs over server proxying."
3
+ description: Expert at handling file uploads and cloud storage. Covers S3,
4
+ Cloudflare R2, presigned URLs, multipart uploads, and image optimization.
5
+ Knows how to handle large files without blocking.
4
6
  risk: none
5
- source: "vibeship-spawner-skills (Apache 2.0)"
6
- date_added: "2026-02-27"
7
+ source: vibeship-spawner-skills (Apache 2.0)
8
+ date_added: 2026-02-27
7
9
  ---
8
10
 
9
11
  # File Uploads & Storage
10
12
 
13
+ Expert at handling file uploads and cloud storage. Covers S3,
14
+ Cloudflare R2, presigned URLs, multipart uploads, and image
15
+ optimization. Knows how to handle large files without blocking.
16
+
11
17
  **Role**: File Upload Specialist
12
18
 
13
19
  Careful about security and performance. Never trusts file
14
20
  extensions. Knows that large uploads need special handling.
15
21
  Prefers presigned URLs over server proxying.
16
22
 
17
- ## ⚠️ Sharp Edges
23
+ ### Principles
24
+
25
+ - Never trust client file type claims
26
+ - Use presigned URLs for direct uploads
27
+ - Stream large files, never buffer
28
+ - Validate on upload, optimize after
29
+
30
+ ## Sharp Edges
31
+
32
+ ### Trusting client-provided file type
33
+
34
+ Severity: CRITICAL
35
+
36
+ Situation: User uploads malware.exe renamed to image.jpg. You check
37
+ extension, looks fine. Store it. Serve it. Another user
38
+ downloads and executes it.
39
+
40
+ Symptoms:
41
+ - Malware uploaded as images
42
+ - Wrong content-type served
43
+
44
+ Why this breaks:
45
+ File extensions and Content-Type headers can be faked.
46
+ Attackers rename executables to bypass filters.
47
+
48
+ Recommended fix:
49
+
50
+ # CHECK MAGIC BYTES
51
+
52
+ import { fileTypeFromBuffer } from "file-type";
53
+
54
+ async function validateImage(buffer: Buffer) {
55
+ const type = await fileTypeFromBuffer(buffer);
56
+
57
+ const allowedTypes = ["image/jpeg", "image/png", "image/webp"];
58
+
59
+ if (!type || !allowedTypes.includes(type.mime)) {
60
+ throw new Error("Invalid file type");
61
+ }
62
+
63
+ return type;
64
+ }
65
+
66
+ // For streams
67
+ import { fileTypeFromStream } from "file-type";
68
+ const type = await fileTypeFromStream(readableStream);
69
+
70
+ ### No upload size restrictions
71
+
72
+ Severity: HIGH
73
+
74
+ Situation: No file size limit. Attacker uploads 10GB file. Server runs
75
+ out of memory or disk. Denial of service. Or massive
76
+ storage bill.
77
+
78
+ Symptoms:
79
+ - Server crashes on large uploads
80
+ - Massive storage bills
81
+ - Memory exhaustion
82
+
83
+ Why this breaks:
84
+ Without limits, attackers can exhaust resources. Even
85
+ legitimate users might accidentally upload huge files.
86
+
87
+ Recommended fix:
88
+
89
+ # SET SIZE LIMITS
90
+
91
+ // Formidable
92
+ const form = formidable({
93
+ maxFileSize: 10 * 1024 * 1024, // 10MB
94
+ });
95
+
96
+ // Multer
97
+ const upload = multer({
98
+ limits: { fileSize: 10 * 1024 * 1024 },
99
+ });
100
+
101
+ // Client-side early check
102
+ if (file.size > 10 * 1024 * 1024) {
103
+ alert("File too large (max 10MB)");
104
+ return;
105
+ }
106
+
107
+ // Presigned URL with size limit
108
+ const command = new PutObjectCommand({
109
+ Bucket: BUCKET,
110
+ Key: key,
111
+ ContentLength: expectedSize, // Enforce size
112
+ });
113
+
114
+ ### User-controlled filename allows path traversal
115
+
116
+ Severity: CRITICAL
117
+
118
+ Situation: User uploads file named "../../../etc/passwd". You use
119
+ filename directly. File saved outside upload directory.
120
+ System files overwritten.
121
+
122
+ Symptoms:
123
+ - Files outside upload directory
124
+ - System file access
125
+
126
+ Why this breaks:
127
+ User input should never be used directly in file paths.
128
+ Path traversal sequences can escape intended directories.
18
129
 
19
- | Issue | Severity | Solution |
20
- |-------|----------|----------|
21
- | Trusting client-provided file type | critical | # CHECK MAGIC BYTES |
22
- | No upload size restrictions | high | # SET SIZE LIMITS |
23
- | User-controlled filename allows path traversal | critical | # SANITIZE FILENAMES |
24
- | Presigned URL shared or cached incorrectly | medium | # CONTROL PRESIGNED URL DISTRIBUTION |
130
+ Recommended fix:
131
+
132
+ # SANITIZE FILENAMES
133
+
134
+ import path from "path";
135
+ import crypto from "crypto";
136
+
137
+ function safeFilename(userFilename: string): string {
138
+ // Extract just the base name
139
+ const base = path.basename(userFilename);
140
+
141
+ // Remove any remaining path chars
142
+ const sanitized = base.replace(/[^a-zA-Z0-9.-]/g, "_");
143
+
144
+ // Or better: generate new name entirely
145
+ const ext = path.extname(userFilename).toLowerCase();
146
+ const allowed = [".jpg", ".png", ".pdf"];
147
+
148
+ if (!allowed.includes(ext)) {
149
+ throw new Error("Invalid extension");
150
+ }
151
+
152
+ return crypto.randomUUID() + ext;
153
+ }
154
+
155
+ // Never do this
156
+ const path = "uploads/" + req.body.filename; // DANGER!
157
+
158
+ // Do this
159
+ const path = "uploads/" + safeFilename(req.body.filename);
160
+
161
+ ### Presigned URL shared or cached incorrectly
162
+
163
+ Severity: MEDIUM
164
+
165
+ Situation: Presigned URL for private file returned in API response.
166
+ Response cached by CDN. Anyone with cached URL can access
167
+ private file for hours.
168
+
169
+ Symptoms:
170
+ - Private files accessible via cached URLs
171
+ - Access after expiry
172
+
173
+ Why this breaks:
174
+ Presigned URLs grant temporary access. If cached or shared,
175
+ access extends beyond intended scope.
176
+
177
+ Recommended fix:
178
+
179
+ # CONTROL PRESIGNED URL DISTRIBUTION
180
+
181
+ // Short expiry for sensitive files
182
+ const url = await getSignedUrl(s3, command, {
183
+ expiresIn: 300, // 5 minutes
184
+ });
185
+
186
+ // No-cache headers for presigned URL responses
187
+ return Response.json({ url }, {
188
+ headers: {
189
+ "Cache-Control": "no-store, max-age=0",
190
+ },
191
+ });
192
+
193
+ // Or use CloudFront signed URLs for more control
194
+
195
+ ## Validation Checks
196
+
197
+ ### Only checking file extension
198
+
199
+ Severity: CRITICAL
200
+
201
+ Message: Check magic bytes, not just extension
202
+
203
+ Fix action: Use file-type library to verify actual type
204
+
205
+ ### User filename used directly in path
206
+
207
+ Severity: CRITICAL
208
+
209
+ Message: Sanitize filenames to prevent path traversal
210
+
211
+ Fix action: Use path.basename() and generate safe name
212
+
213
+ ## Collaboration
214
+
215
+ ### Delegation Triggers
216
+
217
+ - image optimization CDN -> performance-optimization (Image delivery)
218
+ - storing file metadata -> postgres-wizard (Database schema)
25
219
 
26
220
  ## When to Use
27
- This skill is applicable to execute the workflow or actions described in the overview.
221
+
222
+ - User mentions or implies: file upload
223
+ - User mentions or implies: S3
224
+ - User mentions or implies: R2
225
+ - User mentions or implies: presigned URL
226
+ - User mentions or implies: multipart
227
+ - User mentions or implies: image upload
228
+ - User mentions or implies: cloud storage