Files
wehub-resource-sync bb5c75ce05
Component Security Validation / Security Audit (push) Has been cancelled
Deploy to Cloudflare Pages / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:38:58 +08:00

880 lines
41 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Claude Code Templates Joins the Neon Open Source Program</title>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-YWW6FV2SGN"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-YWW6FV2SGN');
</script>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="../../static/favicon/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="../../static/favicon/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../static/favicon/favicon-32x32.png">
<link rel="apple-touch-icon" sizes="180x180" href="../../static/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="../../static/favicon/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="../../static/favicon/android-chrome-512x512.png">
<meta name="description" content="Claude Code Templates has been accepted into the Neon Open Source Program, bringing $5,000 annual support and instant Postgres provisioning to the community. Learn about our partnership and how you can benefit from free serverless Postgres.">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="article">
<meta property="og:url" content="https://aitmpl.com/blog/neon-open-source-program/">
<meta property="og:title" content="Claude Code Templates Joins the Neon Open Source Program">
<meta property="og:description" content="$5,000 annual support, instant Postgres provisioning, and co-marketing opportunities. Discover how our partnership with Neon benefits the Claude Code community.">
<meta property="og:image" content="https://aitmpl.com/blog/assets/neon-open-source-program-cover.svg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="article:author" content="Claude Code Templates">
<meta property="article:section" content="Partnership">
<meta property="article:tag" content="Neon">
<meta property="article:tag" content="Partnership">
<meta property="article:tag" content="Open Source">
<meta property="article:tag" content="Database">
<meta property="article:tag" content="Postgres">
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="https://aitmpl.com/blog/neon-open-source-program/">
<meta name="twitter:title" content="Claude Code Templates Joins the Neon Open Source Program">
<meta name="twitter:description" content="$5,000 annual support, instant Postgres provisioning, and co-marketing opportunities. Discover how our partnership with Neon benefits the Claude Code community.">
<meta name="twitter:image" content="https://aitmpl.com/blog/assets/neon-open-source-program-cover.svg">
<!-- Additional SEO -->
<meta name="keywords" content="Neon, Postgres, Open Source Program, Claude Code, Database, Serverless, Instagres, Developer Tools, OSS Sponsorship">
<meta name="author" content="Claude Code Templates">
<link rel="canonical" href="https://aitmpl.com/blog/neon-open-source-program/">
<link rel="stylesheet" href="../../css/styles.css">
<link rel="stylesheet" href="../../css/blog.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<!-- Hotjar Tracking Code for https://aitmpl.com -->
<script>
(function(h,o,t,j,a,r){
h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
h._hjSettings={hjid:6519181,hjsv:6};
a=o.getElementsByTagName('head')[0];
r=o.createElement('script');r.async=1;
r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
a.appendChild(r);
})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
</script>
<!-- Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Claude Code Templates Joins the Neon Open Source Program",
"description": "Claude Code Templates has been accepted into the Neon Open Source Program, bringing $5,000 annual support and instant Postgres provisioning to the community.",
"image": "https://aitmpl.com/blog/assets/neon-open-source-program-cover.svg",
"author": {
"@type": "Organization",
"name": "Claude Code Templates"
},
"publisher": {
"@type": "Organization",
"name": "Claude Code Templates",
"logo": {
"@type": "ImageObject",
"url": "https://aitmpl.com/static/img/logo.svg"
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://aitmpl.com/blog/neon-open-source-program/"
},
"keywords": "Neon, Postgres, Open Source Program, Claude Code, Database, Serverless",
"wordCount": "1200",
"articleSection": "Partnership",
"about": [
{
"@type": "Thing",
"name": "Open Source Sponsorship"
},
{
"@type": "Thing",
"name": "Serverless Database"
},
{
"@type": "SoftwareApplication",
"name": "Neon",
"applicationCategory": "DatabaseApplication"
}
]
}
</script>
</head>
<body>
<header class="header">
<div class="container">
<div class="header-content">
<div class="terminal-header">
<div class="ascii-title">
<pre class="ascii-art">
██████╗ ██╗ ██████╗ ██████╗
██╔══██╗██║ ██╔═══██╗██╔════╝
██████╔╝██║ ██║ ██║██║ ███╗
██╔══██╗██║ ██║ ██║██║ ██║
██████╔╝███████╗╚██████╔╝╚██████╔╝
╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝</pre>
</div>
</div>
<div class="header-actions">
<a href="../../index.html" class="header-btn">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M10,20V14H14V20H19V12H22L12,3L2,12H5V20H10Z"/>
</svg>
Home
</a>
<a href="../index.html" class="header-btn">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"/>
</svg>
Blog
</a>
<a href="https://github.com/davila7/claude-code-templates" target="_blank" class="header-btn">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.30 3.297-1.30.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
GitHub
</a>
</div>
</div>
</div>
</header>
<main class="terminal">
<header class="article-header">
<div class="container">
<!-- Copy Markdown Button -->
<button id="copy-markdown-btn" class="copy-markdown-button" title="Copy post as Markdown">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/>
</svg>
Copy as Markdown
</button>
<h1 class="article-title">Claude Code Templates Joins the Neon Open Source Program</h1>
<p class="article-subtitle">We're proud to announce that Claude Code Templates has been accepted into the Neon Open Source Program, bringing financial support, instant Postgres provisioning, and co-marketing opportunities to our community of developers.</p>
<div class="article-meta-full">
<span class="read-time">5 min read</span>
<div class="article-tags">
<span class="tag">Partnership</span>
<span class="tag">Neon</span>
<span class="tag">Open Source</span>
<span class="tag">Database</span>
<span class="tag">Postgres</span>
</div>
</div>
</div>
</header>
<article class="article-body">
<img src="../assets/neon-open-source-program-cover.svg" alt="Claude Code Templates joins Neon Open Source Program" class="article-cover" loading="lazy">
<div class="article-content-full">
<h2>Announcing Our Partnership with Neon</h2>
<p>We're thrilled to share that Claude Code Templates has been officially accepted into the <strong>Neon Open Source Program</strong>. This partnership represents a significant milestone for our project and brings substantial benefits to the entire Claude Code community.</p>
<p>This collaboration combines the power of AI-assisted development with instant, serverless Postgres provisioning, making database setup as simple as asking Claude for help.</p>
<h2>What is the Neon Open Source Program?</h2>
<p>The <a href="https://get.neon.com/4eCjZDz" target="_blank">Neon Open Source Program</a> provides comprehensive support to open source projects that integrate with Neon's serverless Postgres platform. The program includes:</p>
<ul>
<li><strong>$5,000 Annual Financial Support</strong> - Direct funding to support Claude Code Templates development and infrastructure costs</li>
<li><strong>$20 Referral Payouts per Customer</strong> - Revenue sharing for every developer from our community who becomes a Neon customer</li>
<li><strong>Co-Marketing Opportunities</strong> - Joint promotion through blog posts, social media, and community outreach</li>
<li><strong>Technical Support</strong> - Direct access to Neon's engineering team for integration assistance</li>
<li><strong>Early Access</strong> - Preview upcoming Neon features before public release</li>
</ul>
<p>This partnership enables us to dedicate more resources to developing high-quality components and improving the Claude Code Templates ecosystem.</p>
<h2>What Neon Provides: Serverless Postgres Made Simple</h2>
<p><a href="https://get.neon.com/4eCjZDz" target="_blank">Neon</a> is a serverless Postgres platform that fundamentally changes how developers work with databases. Instead of spending 15-30 minutes setting up a database manually, Neon provisions production-ready Postgres instances in seconds.</p>
<h3>Key Neon Features</h3>
<ul>
<li><strong>Instant Provisioning</strong> - Get a fully configured Postgres database in under 5 seconds</li>
<li><strong>Database Branching</strong> - Create instant copies of your database for testing, perfect for development workflows</li>
<li><strong>Autoscaling</strong> - Resources scale automatically based on demand, from zero to maximum capacity</li>
<li><strong>Generous Free Tier</strong> - 10 GB storage, unlimited projects, and serverless compute at no cost</li>
<li><strong>Modern Developer Experience</strong> - Connect via standard Postgres connection strings, works with all ORMs</li>
<li><strong>Built for CI/CD</strong> - Ephemeral databases for testing, with automatic cleanup</li>
</ul>
<p>Neon eliminates the friction of database setup, allowing developers to focus on building features instead of managing infrastructure.</p>
<h2>What Claude Code Templates Delivers</h2>
<p>As part of our commitment to the Neon Open Source Program, we're providing several key integrations and promotional efforts:</p>
<h3>1. Featured Documentation Integration</h3>
<p>Neon is now the recommended database provider throughout Claude Code Templates documentation. All database-related guides, tutorials, and examples feature Neon with our <a href="https://get.neon.com/4eCjZDz" target="_blank">referral link</a> prominently displayed.</p>
<h3>2. GitHub README Visibility</h3>
<p>The Neon logo appears in our <a href="https://github.com/davila7/claude-code-templates" target="_blank">GitHub README</a>, providing visibility to thousands of monthly visitors and establishing Neon as our preferred database partner.</p>
<h3>3. Instagres Integration</h3>
<p>We've integrated <strong>Instagres</strong>, Neon's instant database provisioning tool, making it trivially easy to get a Postgres database:</p>
<pre><code class="language-bash"># Instant Postgres with our referral
npx get-db --yes --ref 4eCjZDz
# Result: Production-ready Postgres in 5 seconds
# Connection string automatically saved to .env</code></pre>
<p>This single command replaces 15-30 minutes of manual setup work, including account creation, instance configuration, and environment variable management.</p>
<h3>4. Component Ecosystem Integration</h3>
<p>We've created a comprehensive ecosystem of Neon components:</p>
<ul>
<li><strong>neon-instagres Skill</strong> - Auto-triggers when Claude detects database needs</li>
<li><strong>neon-expert Agent</strong> - Specialized agent for Neon workflows and best practices</li>
<li><strong>neon-database-architect Agent</strong> - Schema design with Drizzle ORM integration</li>
<li><strong>neon-auth-specialist Agent</strong> - Authentication setup with Stack Auth and Neon Auth</li>
<li><strong>neon-migration-specialist Agent</strong> - Safe database migrations using branching</li>
<li><strong>neon-optimization-analyzer Agent</strong> - Query performance analysis and tuning</li>
<li><strong>Neon MCP</strong> - Programmatic API access for advanced workflows</li>
<li><strong>Statusline Settings</strong> - Real-time database metrics in your terminal</li>
</ul>
<h2>The neon-instagres Skill: Database Setup in Seconds</h2>
<p>The centerpiece of our Neon integration is the <code>neon-instagres</code> Skill. This skill fundamentally changes how Claude Code users set up databases.</p>
<h3>How It Works</h3>
<p>When you mention needing a database while working with Claude, the skill automatically activates and provisions a Neon Postgres instance:</p>
<pre><code class="language-bash"># Install the skill
npx claude-code-templates@latest --skill database/neon-instagres
# Then just ask Claude:
"I need a Postgres database for my Next.js app"
# Claude automatically:
# 1. Runs: npx get-db --yes --ref 4eCjZDz
# 2. Provisions Neon database in 5 seconds
# 3. Saves connection string to .env.local
# 4. Installs and configures Drizzle ORM
# 5. Creates initial schema files</code></pre>
<h3>Framework Integration</h3>
<p>The skill intelligently adapts to your framework:</p>
<ul>
<li><strong>Next.js</strong> - Saves to <code>.env.local</code>, configures for Server Actions and Route Handlers</li>
<li><strong>Vite/React</strong> - Uses <code>vite-plugin-db</code> for auto-provisioning</li>
<li><strong>Express/Node.js</strong> - Standard <code>.env</code> setup with connection pooling</li>
<li><strong>CLI/Scripts</strong> - Direct connection string for standalone tools</li>
</ul>
<h3>Install the Skill</h3>
<pre><code class="language-bash">npx claude-code-templates@latest --skill database/neon-instagres --yes</code></pre>
<p>Once installed, Claude will automatically detect when you need a database and provision one instantly using Neon.</p>
<h2>What This Means for Users</h2>
<p>This partnership delivers concrete benefits to every Claude Code Templates user:</p>
<h3>1. Free Instant Postgres for Prototyping</h3>
<p>No credit card required. No manual setup. Just ask Claude for a database and get a production-ready Postgres instance in seconds. Perfect for:</p>
<ul>
<li>Trying out new project ideas</li>
<li>Building proof-of-concepts</li>
<li>Learning database development</li>
<li>Testing integration patterns</li>
</ul>
<h3>2. Professional Development Workflows</h3>
<p>Database branching enables best practices like:</p>
<ul>
<li>Testing migrations on branch databases before production</li>
<li>Isolated development environments for each feature</li>
<li>Automated testing with fresh database copies</li>
<li>Safe experimentation without affecting production data</li>
</ul>
<h3>3. Expert Guidance Built-In</h3>
<p>The Neon agent ecosystem provides specialized expertise:</p>
<ul>
<li>Schema design following PostgreSQL best practices</li>
<li>Authentication setup with proven patterns</li>
<li>Migration strategies that minimize downtime</li>
<li>Performance optimization based on query patterns</li>
</ul>
<h3>4. Reduced Infrastructure Complexity</h3>
<p>Serverless Postgres eliminates common pain points:</p>
<ul>
<li>No server management or provisioning</li>
<li>Automatic scaling from zero to maximum capacity</li>
<li>Built-in connection pooling</li>
<li>No idle resource costs</li>
</ul>
<h2>Getting Started with Neon and Claude Code</h2>
<h3>Step 1: Sign Up for Neon (Optional)</h3>
<p>While the <code>neon-instagres</code> skill can provision databases without an account, signing up for <a href="https://get.neon.com/4eCjZDz" target="_blank">Neon</a> gives you access to:</p>
<ul>
<li>Dashboard for managing databases</li>
<li>Database branching features</li>
<li>Team collaboration tools</li>
<li>Advanced monitoring and analytics</li>
</ul>
<h3>Step 2: Install the neon-instagres Skill</h3>
<pre><code class="language-bash">npx claude-code-templates@latest --skill database/neon-instagres --yes</code></pre>
<h3>Step 3: Ask Claude for a Database</h3>
<p>Simply mention that you need a database while working on your project:</p>
<ul>
<li>"I need a Postgres database for this todo app"</li>
<li>"Set up a database with user authentication"</li>
<li>"Create a database for my Next.js blog"</li>
</ul>
<p>Claude will automatically provision a Neon database and configure your project.</p>
<h3>Step 4: Optional - Install Expert Agents</h3>
<p>For advanced database workflows, install specialist agents:</p>
<pre><code class="language-bash"># Database architecture
npx claude-code-templates@latest --agent database/neon-database-architect
# Authentication integration
npx claude-code-templates@latest --agent database/neon-auth-specialist
# Migration management
npx claude-code-templates@latest --agent data-ai/neon-migration-specialist
# Performance optimization
npx claude-code-templates@latest --agent data-ai/neon-optimization-analyzer</code></pre>
<h2>Real-World Examples</h2>
<h3>Example 1: Building a SaaS App</h3>
<pre><code class="language-bash">claude
> Build a multi-tenant SaaS app with user auth and billing
# Claude automatically:
# 1. Provisions Neon database via neon-instagres skill
# 2. Uses neon-auth-specialist to set up Stack Auth
# 3. Uses neon-database-architect to design tenant schema
# 4. Creates Next.js app with API routes and database
# 5. Sets up row-level security for tenant isolation
# Result: Production-ready SaaS foundation in minutes</code></pre>
<h3>Example 2: Learning Database Development</h3>
<pre><code class="language-bash">claude
> I want to learn about database indexes and query optimization
# Claude:
# 1. Provisions practice database
# 2. Loads neon-optimization-analyzer agent
# 3. Creates sample schema with performance issues
# 4. Demonstrates EXPLAIN ANALYZE
# 5. Shows before/after metrics for index additions
# Result: Hands-on learning environment ready instantly</code></pre>
<h3>Example 3: Testing Database Migrations</h3>
<pre><code class="language-bash">claude
> I need to add email verification to my users table, but I'm worried about breaking production
# Claude:
# 1. Uses neon-migration-specialist agent
# 2. Creates database branch via Neon MCP
# 3. Tests migration on branch
# 4. Validates with sample data
# 5. Provides rollback plan
# 6. Executes on production after approval
# Result: Safe migration with zero downtime</code></pre>
<h2>Why This Partnership Matters</h2>
<p>This partnership exemplifies our vision for Claude Code Templates: making professional development practices accessible to everyone through intelligent automation.</p>
<p>By combining Claude's AI capabilities with Neon's instant provisioning, we've eliminated one of the most frustrating parts of software development: database setup and management.</p>
<p>The $5,000 annual support enables us to:</p>
<ul>
<li>Develop more database-focused components and agents</li>
<li>Improve documentation and tutorials</li>
<li>Maintain infrastructure for the component catalog</li>
<li>Support the open source community</li>
</ul>
<p>The referral program creates a sustainable model where community success directly supports project development.</p>
<h2>Looking Forward</h2>
<p>This is just the beginning of our Neon integration. We're planning:</p>
<ul>
<li><strong>Enhanced Monitoring</strong> - Real-time query performance tracking in Claude Code</li>
<li><strong>AI-Powered Schema Evolution</strong> - Agents that suggest schema improvements based on usage patterns</li>
<li><strong>Template Expansions</strong> - Pre-configured project templates with Neon and popular frameworks</li>
<li><strong>Educational Content</strong> - Tutorials and guides for database best practices using Neon</li>
<li><strong>Community Features</strong> - Shared database templates and schemas</li>
</ul>
<h2>Try It Today</h2>
<p>Experience instant Postgres provisioning with the neon-instagres skill:</p>
<pre><code class="language-bash">npx claude-code-templates@latest --skill database/neon-instagres --yes</code></pre>
<p>Or sign up for a free Neon account to access advanced features like database branching and team collaboration:</p>
<p><a href="https://get.neon.com/4eCjZDz" target="_blank" style="display: inline-block; padding: 0.875rem 2rem; background: #00E599; color: #000; text-decoration: none; border-radius: 4px; font-weight: 600; font-size: 1rem;">Get Started with Neon - Free</a></p>
<h2>Resources</h2>
<ul>
<li><a href="https://get.neon.com/4eCjZDz" target="_blank">Neon Official Website</a></li>
<li><a href="https://neon.tech/docs" target="_blank">Neon Documentation</a></li>
<li><a href="https://neon.tech/docs/guides/instagres" target="_blank">Instagres Documentation</a></li>
<li><a href="https://neon.tech/oss" target="_blank">Neon Open Source Program</a></li>
<li><a href="https://github.com/davila7/claude-code-templates" target="_blank">Claude Code Templates on GitHub</a></li>
<li><a href="../../index.html">Browse All Components at aitmpl.com</a></li>
</ul>
<!-- Explore Components Banner -->
<div class="explore-components-banner">
<h3>Explore 800+ Claude Code Components</h3>
<p>Discover agents, commands, MCPs, settings, hooks, skills and templates to supercharge your Claude Code workflow</p>
<a href="../../index.html">Browse All Components</a>
</div>
</div>
<div class="article-nav">
<a href="../index.html" class="back-to-blog">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"/>
</svg>
Back to Blog
</a>
</div>
</article>
</main>
<footer class="footer">
<div class="container">
<div class="footer-content">
<div class="footer-left">
<div class="footer-ascii">
<pre class="footer-ascii-art"> █████╗ ██╗████████╗███╗ ███╗██████╗ ██╗
██╔══██╗██║╚══██╔══╝████╗ ████║██╔══██╗██║
███████║██║ ██║ ██╔████╔██║██████╔╝██║
██╔══██║██║ ██║ ██║╚██╔╝██║██╔═══╝ ██║
██║ ██║██║ ██║ ██║ ╚═╝ ██║██║ ███████╗
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚══════╝</pre>
<p class="footer-tagline">Supercharge Anthropic's Claude Code</p>
</div>
</div>
<div class="footer-right">
<p class="footer-copyright">&copy; 2026 Claude Code Templates. Open source project.</p>
<div class="footer-links">
<a href="../../trending.html" class="footer-link">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M16,6L18.29,8.29L13.41,13.17L9.41,9.17L2,16.59L3.41,18L9.41,12L13.41,16L19.71,9.71L22,12V6H16Z"/>
</svg>
Trending
</a>
<a href="https://docs.aitmpl.com/" target="_blank" class="footer-link">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"/>
</svg>
Documentation
</a>
<a href="https://github.com/davila7/claude-code-templates" target="_blank" class="footer-link">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.30.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.30 3.297-1.30.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
GitHub
</a>
</div>
</div>
</div>
</div>
</footer>
<!-- Code Copy Functionality -->
<script>
// Code Copy Functionality for Blog Articles
class CodeCopy {
constructor() {
this.initCodeBlocks();
this.setupCopyFunctionality();
}
initCodeBlocks() {
// Convert existing pre elements to new code-block structure
const preElements = document.querySelectorAll('.article-content-full pre:not(.converted)');
preElements.forEach(pre => {
const code = pre.querySelector('code');
if (!code) return;
// Detect language from class or content
const language = this.detectLanguage(code);
const isTerminal = language === 'bash' || language === 'terminal';
// Create new code block structure
const codeBlock = document.createElement('div');
codeBlock.className = isTerminal ? 'code-block terminal-block' : 'code-block';
// Create header
const header = document.createElement('div');
header.className = 'code-header';
const languageSpan = document.createElement('span');
languageSpan.className = 'code-language';
languageSpan.textContent = language;
const copyButton = document.createElement('button');
copyButton.className = 'copy-button';
copyButton.innerHTML = `
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor">
<path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/>
</svg>
Copy
`;
header.appendChild(languageSpan);
header.appendChild(copyButton);
// Clone and prepare the pre element
const newPre = pre.cloneNode(true);
newPre.classList.add('converted');
// Assemble new structure
codeBlock.appendChild(header);
codeBlock.appendChild(newPre);
// Replace original pre
pre.parentNode.replaceChild(codeBlock, pre);
});
}
detectLanguage(codeElement) {
// Check for class-based language detection
const className = codeElement.className;
if (className.includes('language-')) {
return className.match(/language-(\w+)/)[1];
}
// Check content patterns
const content = codeElement.textContent;
if (content.includes('npm ') || content.includes('$ ') || content.includes('claude-code ')) {
return 'bash';
}
if (content.includes('import ') && content.includes('from ')) {
return 'javascript';
}
if (content.includes('CREATE TABLE') || content.includes('SELECT ')) {
return 'sql';
}
if (content.includes('{') && content.includes('"')) {
return 'json';
}
if (content.includes('def ') || content.includes('import ')) {
return 'python';
}
return 'text';
}
setupCopyFunctionality() {
document.addEventListener('click', async (e) => {
if (!e.target.closest('.copy-button')) return;
const button = e.target.closest('.copy-button');
const codeBlock = button.closest('.code-block');
const pre = codeBlock.querySelector('pre');
const code = pre.querySelector('code');
if (!code) return;
try {
// Get clean text content
let textToCopy = code.textContent;
// Clean up terminal prompts if it's a terminal block
if (codeBlock.classList.contains('terminal-block')) {
textToCopy = this.cleanTerminalOutput(textToCopy);
}
await navigator.clipboard.writeText(textToCopy);
// Update button state
const originalContent = button.innerHTML;
button.innerHTML = `
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor">
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
</svg>
Copied!
`;
button.classList.add('copied');
// Reset after 2 seconds
setTimeout(() => {
button.innerHTML = originalContent;
button.classList.remove('copied');
}, 2000);
} catch (err) {
console.error('Failed to copy code:', err);
// Fallback: select text
const selection = window.getSelection();
const range = document.createRange();
range.selectNodeContents(code);
selection.removeAllRanges();
selection.addRange(range);
}
});
}
cleanTerminalOutput(text) {
// Remove common terminal prompts and clean output
return text
.split('\n')
.map(line => {
// Remove prompts like "$ ", " ", "claude-code> "
line = line.replace(/^[\$]\s*/, '').replace(/^claude-code>\s*/, '');
// Remove output/result comments
if (line.trim().startsWith('# ✓') ||
line.trim().startsWith('# Start using') ||
line.trim().startsWith('# Your .claude') ||
line.trim().startsWith('# This will') ||
line.includes('Components will be installed') ||
line.includes('directory now contains')) {
return '';
}
return line;
})
.filter(line => line.trim() !== '') // Remove empty lines
.join('\n')
.trim();
}
}
// Initialize when DOM is loaded
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => new CodeCopy());
} else {
new CodeCopy();
}
// Explore components banner hover effect
document.addEventListener('DOMContentLoaded', () => {
const banner = document.querySelector('.explore-components-banner a');
if (banner) {
banner.addEventListener('mouseenter', () => {
banner.style.background = '#00cc33';
banner.style.transform = 'translateY(-2px)';
});
banner.addEventListener('mouseleave', () => {
banner.style.background = '#00ff41';
banner.style.transform = 'translateY(0)';
});
}
});
// Copy Markdown functionality
class MarkdownCopier {
constructor() {
this.setupButton();
}
setupButton() {
const button = document.getElementById('copy-markdown-btn');
if (!button) return;
button.addEventListener('click', async () => {
const markdown = this.extractMarkdown();
try {
await navigator.clipboard.writeText(markdown);
// Update button state
const originalContent = button.innerHTML;
button.innerHTML = `
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
</svg>
`;
button.classList.add('copied');
// Reset after 2 seconds
setTimeout(() => {
button.innerHTML = originalContent;
button.classList.remove('copied');
}, 2000);
} catch (err) {
console.error('Failed to copy markdown:', err);
}
});
}
extractMarkdown() {
const title = document.querySelector('.article-title')?.textContent || '';
const subtitle = document.querySelector('.article-subtitle')?.textContent || '';
const date = document.querySelector('time')?.textContent || '';
const content = document.querySelector('.article-content-full');
let markdown = `# ${title}\n\n`;
if (subtitle) {
markdown += `${subtitle}\n\n`;
}
if (date) {
markdown += `*${date}*\n\n`;
}
if (!content) return markdown;
// Process content elements
const elements = content.children;
for (const element of elements) {
markdown += this.processElement(element) + '\n\n';
}
return markdown.trim();
}
processElement(element) {
const tagName = element.tagName.toLowerCase();
switch (tagName) {
case 'h2':
return `## ${element.textContent}`;
case 'h3':
return `### ${element.textContent}`;
case 'h4':
return `#### ${element.textContent}`;
case 'p':
return element.textContent;
case 'ul':
return this.processList(element, '-');
case 'ol':
return this.processList(element, '1.');
case 'pre':
return this.processCodeBlock(element);
case 'div':
if (element.classList.contains('code-block')) {
return this.processCodeBlock(element.querySelector('pre'));
}
// Skip newsletter CTAs and other divs
if (element.classList.contains('newsletter-cta')) {
return '';
}
return element.textContent || '';
case 'img':
const alt = element.getAttribute('alt') || '';
const src = element.getAttribute('src') || '';
return `![${alt}](${src})`;
default:
return element.textContent || '';
}
}
processList(listElement, marker) {
const items = listElement.querySelectorAll('li');
return Array.from(items)
.map(item => `${marker} ${item.textContent}`)
.join('\n');
}
processCodeBlock(preElement) {
if (!preElement) return '';
const code = preElement.querySelector('code');
const codeText = code ? code.textContent : preElement.textContent;
// Detect language from parent code-block or code element classes
const codeBlock = preElement.closest('.code-block');
let language = '';
if (codeBlock) {
const languageSpan = codeBlock.querySelector('.code-language');
if (languageSpan) {
language = languageSpan.textContent.toLowerCase();
}
} else if (code && code.className.includes('language-')) {
language = code.className.match(/language-(\w+)/)?.[1] || '';
}
return `\`\`\`${language}\n${codeText}\n\`\`\``;
}
}
// Initialize markdown copier
document.addEventListener('DOMContentLoaded', () => {
new MarkdownCopier();
});
</script>
</body>
</html>