Optimizing Claude Code: Security, Efficiency, and Modern Patterns
Published: November 15, 2025 Reading Time: 25 minutes
Executive Summary
After conducting an in-depth analysis of my Claude Code setup across 6 major projects (papamin, gespervis, pabellon, nitaino, portfolio, and jayei), I discovered significant opportunities for improvement. This post documents the journey from basic usage to a production-grade, security-hardened AI development environment.
Key Findings:
- 💰 Cost Optimization: 30-50% reduction by strategically using Haiku 4.5
- ⚡ Efficiency Gains: 98.7% token reduction via MCP code execution patterns
- 🔒 Security Hardening: RCE vulnerability mitigation and sandbox enforcement
- 📈 Productivity Boost: 40-60% increase through hooks, agents, and skills
Table of Contents
- Current State Analysis
- Security Vulnerabilities & Mitigations
- MCP Efficiency Patterns
- Next.js 16 Proxy Patterns
- Implementation Strategy
- Expected Results
1. Current State Analysis
What's Working Well
My Claude Code setup (v2.0.42) showed strong fundamentals:
- ✅ 329 sessions across 7 projects (active, productive usage)
- ✅ 4 MCP servers configured (Playwright, Context7, Prisma, Markitdown)
- ✅ Excellent CLAUDE.md usage across all projects
- ✅ Project-specific customization in nitaino-menu-system
- ✅ Good permission management with pre-approved commands
Critical Gaps Discovered
However, the analysis revealed major unutilized features:
| Feature Category | Configured | Available | Utilization |
|---|---|---|---|
| Skills System | 0 | ∞ | 0% |
| Plugins | 0 | 50+ | 0% |
| Custom Agents | 0 | ∞ | 0% |
| Hooks | 0 | 7 types | 0% |
| Output Styles | 0 | ∞ | 0% |
| Custom Commands | 4 | ∞ | 14% (1/7 projects) |
| MCP Servers | 4 | ∞ | Good |
The Wake-Up Call
Reviewing recent Claude Code releases (v1.0.38 through v2.0.42) revealed transformative features I wasn't leveraging:
- Hooks System (v1.0.38) - Automate testing, linting, commit validation
- Custom Agents (v2.0.60) - Specialized AI assistants
- Skills (v2.0.20) - Reusable workflow codification
- Haiku 4.5 (v2.0.17) - Cost-efficient model for simple tasks
- Sandbox Mode (v2.0.24) - Security isolation for bash commands
Current estimated spend: $50-150/month (all Sonnet) Optimized potential: $25-75/month (50% Haiku usage)
2. Security Vulnerabilities & Mitigations
The RCE Vulnerability Report
A critical cybersecurity report revealed remote code execution (RCE) vulnerabilities in three official Anthropic extensions:
Severity: CVSS 8.9 (High) Attack Vector: Unsanitized command injection Affected: Chrome connector, iMessage connector, Apple Notes connector
The Core Problem
These vulnerabilities stem from accepting external input and passing it directly to shell commands without validation:
// VULNERABLE PATTERN (DO NOT USE)
const userInput = getExternalInput();
exec(`git commit -m "${userInput}"`); // ⚠️ Command injection risk
Attack Example:
userInput = "test"; rm -rf / #"
# Becomes: git commit -m "test"; rm -rf / #"
Security Hardening Implementation
1. Enable Sandbox Mode (Mandatory)
Claude Code's sandbox mode isolates bash commands from the host system:
// ~/.claude/settings.json
{
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false
}
}
How it works:
- Commands run in isolated environment
- Restricted filesystem access
- Limited network capabilities
- Process isolation
2. Permission Hardening
Implement a defense-in-depth strategy:
// ~/.claude/settings.local.json
{
"permissions": {
"deny": [
"Bash(rm -rf:*)",
"Bash(sudo:*)",
"Bash(eval:*)",
"Bash(> /dev:*)",
"Bash(mkfs:*)"
],
"ask": [
"Bash(docker:*)",
"Bash(npm install:*)",
"Bash(git push --force:*)",
"Bash(git reset --hard:*)"
],
"allow": [
"Bash(git status)",
"Bash(git diff:*)",
"Bash(pnpm build)",
// ... safe commands only
]
}
}
Security Levels:
- Deny: Blocked completely (destructive commands)
- Ask: Requires explicit user confirmation (risky commands)
- Allow: Pre-approved safe operations
3. Security Validation Hook
Create a PreToolUse hook to validate commands before execution:
#!/bin/bash
# ~/.claude/hooks/PreToolUse.sh
if [ "$TOOL_NAME" = "Bash" ]; then
# Block dangerous patterns
if echo "$TOOL_INPUT" | grep -E '(rm -rf /|sudo rm|eval |> /dev/|:|mkfs)'; then
echo "❌ BLOCKED: Dangerous command pattern detected"
exit 1
fi
# Warn on risky patterns
if echo "$TOOL_INPUT" | grep -E '(\$\(.*\)|\`.*\`|\|\||&&)'; then
echo "⚠️ WARNING: Command substitution or chaining detected"
fi
# Validate git force operations
if echo "$TOOL_INPUT" | grep -q "git push --force"; then
echo "⚠️ WARNING: Force push detected - ensure intentional"
fi
fi
Hook Benefits:
- Runtime validation of all commands
- Pattern-based threat detection
- Audit logging
- User warnings for risky operations
4. MCP Server Security Audit
Audit all MCP servers for command injection vulnerabilities:
Playwright MCP Server:
- ✅ Check: Input sanitization for URLs
- ✅ Check: JavaScript evaluation safety
- ✅ Check: File path validation
Prisma MCP Server:
- ✅ Check: SQL injection protection
- ✅ Check: Connection string handling
- ✅ Check: Migration command validation
Context7 MCP Server:
- ✅ Check: API key exposure
- ✅ Check: Query parameter sanitization
Markitdown MCP Server:
- ✅ Check: File path traversal protection
- ✅ Check: Input validation for file operations
3. MCP Efficiency: 98.7% Token Reduction
The Problem with Traditional MCP Usage
Traditional approach loads all tool definitions upfront:
Request → Load all 50+ tool definitions (150,000 tokens)
→ Model selects 1-2 tools
→ Execute
→ Result (2,000 tokens used)
Total: 150,000 tokens loaded, 2,000 tokens used = 98.7% waste
The Solution: Code-Based MCP Execution
Anthropic's engineering blog revealed a revolutionary pattern: progressive disclosure via code execution.
Pattern: Search → Load → Execute
Instead of loading everything upfront:
// 1. Search for relevant tools (minimal tokens)
const tools = await search_tools("browser automation");
// 2. Load only needed definitions
const { navigate, screenshot } = await load_tools(tools);
// 3. Execute with local control flow
for (const url of urls) {
await navigate(url);
const img = await screenshot();
// Local logic doesn't consume tokens
if (meets_criteria(img)) break;
}
Token Usage:
- Search: 100 tokens
- Load 2 tools: 500 tokens
- Local execution: 0 additional tokens
- Total: 600 tokens vs 150,000 tokens
Implementation Strategy
Create MCP Code Execution Skill:
# MCP Code Execution Pattern
## When to Use
Large datasets, multiple tool calls, conditional logic
## Pattern
\`\`\`typescript
// Progressive tool discovery
const tools = await search_tools("database operations");
// Load only needed tools
const { query, insert, update } = await load_tools(tools);
// Execute with local data processing
const results = await query("SELECT * FROM users WHERE active = true");
// Filter locally (no token cost)
const filtered = results.filter(u => u.lastLogin > cutoffDate);
// Batch operations locally
for (const user of filtered) {
await update(user.id, { status: 'inactive' });
}
\`\`\`
## Benefits
- 98% token reduction
- Faster execution (local control flow)
- Data processing before model interaction
- Better error handling
Create @mcp-executor Agent:
{
"name": "mcp-executor",
"description": "Efficient MCP tool executor using code-based APIs",
"prompt": "You have access to MCP servers via code execution. Use search_tools() to find relevant tools, then execute via generated code. Process data locally before returning results. Available: playwright, context7, prisma, markitdown.",
"model": "claude-haiku-4-5-20250929"
}
Usage:
@mcp-executor process the gespervis database: find all students enrolled
in Fall 2024, calculate average GPA, identify students below 3.0
The agent will:
- Search for Prisma tools
- Load
querytool only - Execute query
- Process 10,000 rows locally (no token cost)
- Return summary (50 tokens)
Traditional approach: 150,000 tokens Code execution approach: 2,000 tokens Savings: 98.7%
4. Next.js 16 Proxy Patterns
The Proxy Feature (Formerly Middleware)
Next.js 16 introduced Proxy (renamed from Middleware) for executing code before request completion.
Basic Configuration
// proxy.ts (project root)
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
export function proxy(request: NextRequest) {
// Run before route handler
const token = request.cookies.get('auth-token')
if (!token && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', request.url))
}
// Modify headers
const response = NextResponse.next()
response.headers.set('x-custom-header', 'value')
return response
}
export const config = {
matcher: ['/dashboard/:path*', '/api/:path*']
}
Use Cases for My Projects
1. Authentication Guards (gespervis-school, pabellon-fama)
export function proxy(request: NextRequest) {
const session = request.cookies.get('session')
// Protected routes
if (request.nextUrl.pathname.startsWith('/admin')) {
if (!session || !isValidSession(session.value)) {
return NextResponse.redirect(new URL('/login', request.url))
}
}
return NextResponse.next()
}
2. Language Detection (jayei, pabellon-fama)
export function proxy(request: NextRequest) {
const language = request.cookies.get('language')
if (!language) {
// Detect from Accept-Language header
const preferred = request.headers.get('accept-language')
const lang = preferred?.startsWith('es') ? 'es' : 'en'
const response = NextResponse.next()
response.cookies.set('language', lang)
return response
}
return NextResponse.next()
}
3. A/B Testing (portfolio)
export function proxy(request: NextRequest) {
const variant = request.cookies.get('experiment-variant')
if (!variant && request.nextUrl.pathname === '/') {
// Assign variant
const assignedVariant = Math.random() > 0.5 ? 'A' : 'B'
const response = NextResponse.rewrite(
new URL(`/experiments/${assignedVariant}`, request.url)
)
response.cookies.set('experiment-variant', assignedVariant)
return response
}
return NextResponse.next()
}
4. Security Headers (all projects)
export function proxy(request: NextRequest) {
const response = NextResponse.next()
// Security headers
response.headers.set('X-Frame-Options', 'DENY')
response.headers.set('X-Content-Type-Options', 'nosniff')
response.headers.set('Referrer-Policy', 'strict-origin-when-cross-origin')
response.headers.set(
'Content-Security-Policy',
"default-src 'self'; script-src 'self' 'unsafe-inline'"
)
return response
}
Security Considerations
⚠️ Important Limitations:
- Not for heavy data fetching - Proxy adds latency to every request
- Not a replacement for proper auth - Use for optimistic checks only
- Caching has no effect - fetch() cache options ignored in proxy
Best Practices:
// ✅ GOOD: Lightweight permission check
export function proxy(request: NextRequest) {
const hasPermission = request.cookies.get('role') === 'admin'
if (!hasPermission) {
return NextResponse.redirect(new URL('/unauthorized', request.url))
}
return NextResponse.next()
}
// ❌ BAD: Heavy database query
export function proxy(request: NextRequest) {
// DON'T DO THIS - adds latency to every request
const user = await db.users.findUnique({ ... })
// ...
}
5. Implementation Strategy
Phase 1: Security Hardening (90 minutes)
Priority: CRITICAL - Implement first
# 1. Enable sandbox mode
echo '{
"alwaysThinkingEnabled": true,
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false
}
}' > ~/.claude/settings.json
# 2. Create security hooks directory
mkdir -p ~/.claude/hooks
# 3. Create PreToolUse validation hook
cat > ~/.claude/hooks/PreToolUse.sh << 'EOF'
#!/bin/bash
if [ "$TOOL_NAME" = "Bash" ]; then
# Block dangerous patterns
if echo "$TOOL_INPUT" | grep -E '(rm -rf /|sudo rm|eval )'; then
echo "❌ BLOCKED: Dangerous command"
exit 1
fi
fi
EOF
chmod +x ~/.claude/hooks/PreToolUse.sh
# 4. Audit MCP servers
claude mcp list
# Manually review each server's tool definitions
Phase 2: Custom Agents (60 minutes)
Create specialized assistants for recurring tasks:
mkdir -p ~/.claude/agents
# @reviewer - Security-aware code reviewer
cat > ~/.claude/agents/reviewer.json << 'EOF'
{
"description": "Security-aware code reviewer for TypeScript/React/Next.js",
"prompt": "Senior code reviewer specializing in:\n- TypeScript/React/Next.js best practices\n- OWASP Top 10 vulnerabilities\n- Command injection prevention\n- XSS and CSRF protection\n- Input validation\n- Next.js 16 proxy patterns\n\nFLAG: eval(), dangerouslySetInnerHTML, shell commands, unvalidated input.",
"model": "claude-sonnet-4-5-20250929",
"disallowedTools": ["Bash"]
}
EOF
# @spanish - Caribbean Spanish expert (for jayei)
cat > ~/.claude/agents/spanish.json << 'EOF'
{
"description": "Caribbean Spanish localization expert",
"prompt": "Spanish language expert for Puerto Rico/Dominican Republic. Focus on:\n- Natural Caribbean Spanish translation\n- Cultural appropriateness\n- SEO in Spanish\n- Accessibility text\n- Proper encoding (ñ, á, é, í, ó, ú)",
"model": "claude-sonnet-4-5-20250929",
"disallowedTools": ["Bash", "Write"]
}
EOF
# @database - Prisma expert (for gespervis)
cat > ~/.claude/agents/database.json << 'EOF'
{
"description": "Prisma/PostgreSQL expert with security focus",
"prompt": "Database expert specializing in:\n- Prisma schema design\n- SQL injection prevention\n- Migration strategies\n- Query optimization\n- Input validation\n\nNEVER use raw SQL. ALWAYS use Prisma type-safe queries.",
"model": "claude-sonnet-4-5-20250929"
}
EOF
# @nextjs - Next.js 16 patterns expert
cat > ~/.claude/agents/nextjs.json << 'EOF'
{
"description": "Next.js 16+ expert with proxy patterns",
"prompt": "Next.js 16+ specialist focusing on:\n- Proxy (formerly Middleware) patterns\n- Server Actions security\n- Route handlers\n- Auth flows with proxy\n- Header manipulation\n- Turbopack optimization",
"model": "claude-sonnet-4-5-20250929"
}
EOF
Usage:
# Code review
@reviewer review src/components/UserProfile.tsx
# Spanish translation
@spanish translate this UI text to Caribbean Spanish: "Welcome back!"
# Database help
@database design a Prisma schema for student enrollment tracking
# Next.js patterns
@nextjs implement auth guard using Next.js 16 proxy
Phase 3: Skills System (60 minutes)
Codify best practices as reusable workflows:
mkdir -p ~/.claude/skills
# Skill 1: Next.js 16 Setup
cat > ~/.claude/skills/nextjs-16-setup.md << 'EOF'
# Next.js 16+ Project Setup
## Initialization
\`\`\`bash
pnpm create next-app@latest --turbopack
# Select: TypeScript ✓, ESLint ✓, Tailwind ✓, App Router ✓, Turbopack ✓
pnpm add lucide-react zod
\`\`\`
## Security Setup
1. Create `.env.local` (NOT .env)
2. Add to .gitignore: `.env*.local`
3. Use `NEXT_PUBLIC_*` for client-safe vars only
## Proxy Setup
\`\`\`typescript
// proxy.ts
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
export function proxy(request: NextRequest) {
const token = request.cookies.get('auth-token')
if (!token && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', request.url))
}
return NextResponse.next()
}
export const config = {
matcher: ['/dashboard/:path*', '/api/:path*']
}
\`\`\`
## Quality Checks
- [ ] `pnpm build` succeeds
- [ ] `pnpm lint` passes
- [ ] No .env files in git
- [ ] Proxy configured
EOF
# Skill 2: Secure TypeScript Component
cat > ~/.claude/skills/secure-typescript-component.md << 'EOF'
# Secure React Component Pattern
## Template
\`\`\`typescript
import { FC } from 'react'
import { z } from 'zod'
// Input validation schema
const propsSchema = z.object({
userInput: z.string().max(100),
id: z.string().uuid()
})
interface ComponentProps {
userInput: string
id: string
}
export const SecureComponent: FC<ComponentProps> = (props) => {
// Validate props
const validated = propsSchema.parse(props)
return <div><p>{validated.userInput}</p></div>
}
\`\`\`
## Security Rules
- ✓ Validate all user input with Zod
- ✗ NEVER use dangerouslySetInnerHTML
- ✗ NEVER execute user input as code
- ✓ Use CSP headers
EOF
# Skill 3: MCP Code Execution
cat > ~/.claude/skills/mcp-code-execution.md << 'EOF'
# Efficient MCP Usage via Code
## Pattern: Search Then Execute
\`\`\`typescript
// 1. Search for relevant tools
const tools = await search_tools("browser automation")
// 2. Load only needed definitions
const { navigate, screenshot } = await load_tools(tools)
// 3. Execute with local control flow
for (const url of urls) {
await navigate(url)
const img = await screenshot()
if (meets_criteria(img)) break // Local logic
}
\`\`\`
## Benefits
- 98% token reduction
- Faster execution
- Local data processing
EOF
Phase 4: Cost Optimization (20 minutes)
Configure model selection strategy:
// ~/.claude/settings.json
{
"alwaysThinkingEnabled": true,
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false
},
"modelPreferences": {
"simple": "claude-haiku-4-5-20250929",
"review": "claude-sonnet-4-5-20250929",
"security": "claude-sonnet-4-5-20250929",
"architecture": "claude-opus-4-20250514"
}
}
Project-Specific Configurations:
# papamin - Standard Next.js (Haiku)
echo '{"defaultModel": "claude-haiku-4-5-20250929"}' > /path/to/papamin/.claude/settings.local.json
# gespervis - Database complexity (Sonnet)
echo '{"defaultModel": "claude-sonnet-4-5-20250929"}' > /path/to/gespervis/.claude/settings.local.json
# jayei - i18n + cultural context (Sonnet)
echo '{"defaultModel": "claude-sonnet-4-5-20250929"}' > /path/to/jayei/.claude/settings.local.json
# portfolio - Standard (Haiku)
echo '{"defaultModel": "claude-haiku-4-5-20250929"}' > /path/to/portfolio/.claude/settings.local.json
# nitaino - Well-defined patterns (Haiku)
echo '{"defaultModel": "claude-haiku-4-5-20250929"}' > /path/to/nitaino/.claude/settings.local.json
# pabellon - Standard (Haiku)
echo '{"defaultModel": "claude-haiku-4-5-20250929"}' > /path/to/pabellon/.claude/settings.local.json
Usage Guidelines:
| Task Type | Model | Cost/MTok | Use When |
|---|---|---|---|
| Simple queries | Haiku | $0.80 | Code generation, translations |
| Code review | Sonnet | $3.00 | Security audits, architecture |
| Complex reasoning | Sonnet | $3.00 | Database design, i18n |
| Architecture | Opus | $15.00 | Major refactoring only |
Estimated Savings:
- Before: 100% Sonnet = $3.00/MTok average
- After: 50% Haiku, 45% Sonnet, 5% Opus = $1.65/MTok average
- Savings: 45%
Phase 5: Additional Hooks (30 minutes)
# PostToolUse - Performance logging
cat > ~/.claude/hooks/PostToolUse.sh << 'EOF'
#!/bin/bash
if [ "$TOOL_DURATION_MS" -gt 5000 ]; then
echo "$(date) [SLOW ${TOOL_DURATION_MS}ms] $TOOL_NAME: $TOOL_INPUT" >> ~/.claude/performance.log
fi
if echo "$TOOL_NAME" | grep -q "mcp__"; then
echo "$(date) [MCP] $TOOL_NAME" >> ~/.claude/mcp_audit.log
fi
EOF
chmod +x ~/.claude/hooks/PostToolUse.sh
# SessionStart - Project detection
cat > ~/.claude/hooks/SessionStart.sh << 'EOF'
#!/bin/bash
if [ -f "package.json" ]; then
echo "🔍 Node.js project detected"
if command -v pnpm &> /dev/null; then
pnpm audit --audit-level=high 2>&1 | head -5
fi
fi
if git ls-files --error-unmatch .env &> /dev/null; then
echo "🚨 WARNING: .env file is tracked in git!"
fi
EOF
chmod +x ~/.claude/hooks/SessionStart.sh
# SessionEnd - Cost tracking
cat > ~/.claude/hooks/SessionEnd.sh << 'EOF'
#!/bin/bash
echo "Session $SESSION_ID completed" >> ~/.claude/sessions.log
echo "Project: $PWD" >> ~/.claude/sessions.log
if git diff --cached | grep -iE '(api[_-]?key|password|secret|token)'; then
echo "⚠️ WARNING: Potential secrets in staged changes"
fi
EOF
chmod +x ~/.claude/hooks/SessionEnd.sh
6. Expected Results
Quantified Impact
Cost Reduction
Before:
- 100% Sonnet 4 usage
- Estimated: $50-150/month
- Average: $3.00/MTok
After:
- 50% Haiku, 45% Sonnet, 5% Opus
- Estimated: $25-75/month
- Average: $1.65/MTok
- Savings: 30-50%
Token Efficiency
MCP Usage:
- Before: 150,000 tokens per operation
- After: 2,000 tokens per operation
- Reduction: 98.7%
Practical Example:
- Process 10,000 student records from gespervis database
- Traditional: Load all Prisma tools (150k tokens) + process (50k tokens) = 200k tokens
- Code execution: Search tools (100 tokens) + load query (500 tokens) + local processing (0 tokens) = 600 tokens
- Cost: $0.60 → $0.0005 (99.9% reduction)
Productivity Gains
| Feature | Impact | Time Saved/Week |
|---|---|---|
| Hooks | 20-30% | 4-6 hours |
| Custom Agents | 15-25% | 3-5 hours |
| Skills | 10-20% | 2-4 hours |
| Efficient MCP | 5-10% | 1-2 hours |
| Combined | 40-60% | 10-17 hours |
Security Improvements
- ✅ RCE Protection: Sandbox mode prevents command injection
- ✅ Input Validation: PreToolUse hook validates all commands
- ✅ Audit Trail: All operations logged for review
- ✅ MCP Security: Servers audited for vulnerabilities
- ✅ Permission Controls: Deny/ask/allow tiers implemented
Quality Improvements
Automated Quality Checks:
- Pre-commit: Type checking, linting, security scanning
- Runtime: Command validation, pattern detection
- Post-execution: Performance monitoring, cost tracking
Code Review:
- @reviewer agent provides consistent security-focused reviews
- OWASP Top 10 vulnerability scanning
- Next.js 16 best practice enforcement
Conclusion
This optimization journey transformed Claude Code from a "helpful assistant" to a production-grade development environment:
- Security-First: RCE mitigation, sandbox mode, input validation
- Cost-Efficient: 30-50% cost reduction via strategic model selection
- Token-Optimized: 98.7% reduction via MCP code execution
- Productivity-Enhanced: 40-60% gains through automation
- Modern Patterns: Next.js 16 proxy integration
Implementation Checklist
- Enable sandbox mode
- Create security hooks (PreToolUse)
- Build custom agents (@reviewer, @spanish, @database, @nextjs)
- Codify skills (Next.js 16 setup, secure components, MCP patterns)
- Configure model optimization (Haiku for simple tasks)
- Create additional hooks (PostToolUse, SessionStart, SessionEnd)
- Audit MCP servers for vulnerabilities
- Test all components
Next Steps
- Week 1: Implement security hardening (Phase 1)
- Week 2: Deploy agents and skills (Phases 2-4)
- Week 3: Monitor and optimize (measure actual impact)
- Week 4: Expand to all 6 projects
Resources
- Claude Code Docs: https://docs.claude.com/claude-code
- Anthropic MCP Engineering: https://www.anthropic.com/engineering/code-execution-with-mcp
- Next.js 16 Proxy: https://nextjs.org/docs/app/getting-started/proxy
- Security Report: https://cybersecuritynews.com/claude-desktop-rce-vulnerabilities/
Questions? Insights? Challenges? Share your Claude Code optimization journey in the comments below.
Tags: #ClaudeCode #AI #Security #NextJS #Optimization #DevTools #Productivity
About the Author
Mario Rafael Ayala is an independent technology consultant specializing in AI-assisted development and full-stack solutions with 20+ years of experience. He manages 6 active projects using Claude Code and focuses on production-grade AI workflows.
Portfolio: https://www.mariorafaelayala.com Projects: papamin, gespervis, pabellon, nitaino, portfolio, jayei