File size: 10,435 Bytes
0ed2558 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | import { motion } from 'framer-motion'
import { useInView } from 'react-intersection-observer'
import { FiBookOpen, FiClock, FiArrowRight, FiTrendingUp } from 'react-icons/fi'
const BLOGS = [
{
emoji: 'π',
tag: 'MCP Deep Dive',
tagColor: '#6366f1',
title: 'Understanding MCP: Model Context Protocol Explained',
excerpt: 'MCP (Model Context Protocol) is Anthropic\'s open standard that bridges AI assistants to external data, tools, and APIs. This deep-dive covers how MCP\'s client-server architecture enables stateful context management, JSON-RPC transport, and how LLMs like Claude interact with real-world systems through structured tool calls.',
readTime: '6 min read',
date: 'Apr 2025',
topics: ['MCP', 'Anthropic', 'LLM', 'Protocols'],
featured: true,
},
{
emoji: 'π οΈ',
tag: 'MCP Tools',
tagColor: '#8b5cf6',
title: 'Building Your First MCP Server: Tools, Resources & Prompts',
excerpt: 'A hands-on guide to building production-grade MCP servers using the Python SDK. Learn how to define Tools, expose Resources, and create reusable Prompt templates β making your AI agent capable of reading files, querying APIs, and executing custom logic through a standardized protocol.',
readTime: '9 min read',
date: 'Apr 2025',
topics: ['MCP Server', 'Python SDK', 'Tools', 'Resources'],
featured: true,
},
{
emoji: 'π€',
tag: 'MCP Automation',
tagColor: '#06b6d4',
title: 'Claude + MCP: Orchestrating Multi-Step AI Automations',
excerpt: 'Claude\'s native MCP integration unlocks a new paradigm in AI automation β where a single LLM can read emails, query databases, call APIs, and write files in a coordinated, multi-step flow. This post explores architectural patterns for building reliable MCP orchestration pipelines with tool chaining, error recovery, and state persistence.',
readTime: '10 min read',
date: 'Mar 2025',
topics: ['Claude', 'MCP', 'Orchestration', 'Agents'],
featured: true,
},
{
emoji: 'βοΈ',
tag: 'AI Workflows',
tagColor: '#f59e0b',
title: 'n8n + LLM: Building Visual AI Automation Workflows',
excerpt: 'n8n\'s node-based workflow engine pairs powerfully with LLM APIs and MCP to build production-ready AI automations without complex code. This guide covers integrating OpenAI, Claude, and MCP tool nodes in n8n to automate document processing, customer support triaging, and smart notification pipelines.',
readTime: '8 min read',
date: 'Mar 2025',
topics: ['n8n', 'LLM', 'Automation', 'No-Code'],
featured: false,
},
{
emoji: 'πΈοΈ',
tag: 'AI Automation',
tagColor: '#8b5cf6',
title: 'Building AI Automation Workflows with LangGraph',
excerpt: 'LangGraph brings graph-based state machines to LLM applications, enabling complex branching, loops, and multi-step automation. Learn how to design production-ready agentic workflows that handle real-world complexity β including conditional routing, human-in-the-loop nodes, and persistent memory across sessions.',
readTime: '8 min read',
date: 'Feb 2025',
topics: ['LangGraph', 'Automation', 'Agents', 'Python'],
featured: false,
},
{
emoji: 'π€',
tag: 'Multi-Agent',
tagColor: '#06b6d4',
title: 'AutoGen vs LangGraph: Which Multi-Agent Framework to Use?',
excerpt: 'A practical comparison of Microsoft AutoGen and LangGraph for multi-agent development. We examine developer experience, orchestration flexibility, memory management, and when to choose each framework for production AI systems that require collaborative agent teams.',
readTime: '7 min read',
date: 'Jan 2025',
topics: ['AutoGen', 'LangGraph', 'Agents', 'Architecture'],
featured: false,
},
{
emoji: 'β‘',
tag: 'Agentic AI',
tagColor: '#10b981',
title: 'Agentic AI Design Patterns: ReAct, Plan-and-Execute & Beyond',
excerpt: 'From simple ReAct loops to sophisticated Plan-and-Execute architectures, this post dissects the core design patterns powering today\'s agentic AI systems. Understand when to use each pattern, their failure modes, and how MCP tool use changes the agent reliability equation.',
readTime: '11 min read',
date: 'Dec 2024',
topics: ['ReAct', 'Planning', 'Agents', 'Design Patterns'],
featured: false,
},
{
emoji: 'π',
tag: 'RAG',
tagColor: '#ec4899',
title: 'RAG vs Fine-Tuning: Making the Right Choice for Your LLM App',
excerpt: 'Retrieval-Augmented Generation and fine-tuning both improve LLM performance, but solve different problems. This guide breaks down cost tradeoffs, latency implications, vector database selection, and when each approach delivers the best results for production AI applications.',
readTime: '5 min read',
date: 'Nov 2024',
topics: ['RAG', 'Fine-Tuning', 'LLM', 'Architecture'],
featured: false,
},
]
export default function Blog() {
const [ref, inView] = useInView({ triggerOnce: true, threshold: 0.05 })
const featured = BLOGS.filter(b => b.featured)
const rest = BLOGS.filter(b => !b.featured)
return (
<section id="blog" className="section">
<div className="orb orb-purple" style={{ width: 350, height: 350, bottom: '5%', right: '-5%', position: 'absolute', opacity: 0.3 }} />
<div className="container" ref={ref}>
<motion.div className="section-header"
initial={{ opacity: 0, y: 24 }} animate={inView ? { opacity: 1, y: 0 } : {}} transition={{ duration: 0.55 }}>
<div className="section-tag"><FiBookOpen size={12} /> Blog</div>
<h2 className="section-title">Thoughts & Insights</h2>
<p className="section-subtitle">Deep research on MCP, AI automation workflows, agentic systems, and the future of intelligent AI engineering.</p>
</motion.div>
{/* Featured row β larger cards */}
<motion.div
initial={{ opacity: 0 }} animate={inView ? { opacity: 1 } : {}} transition={{ duration: 0.4, delay: 0.1 }}
style={{ marginBottom: '1.5rem' }}
>
<div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: '0.9rem' }}>
<FiTrendingUp size={13} style={{ color: '#6366f1' }} />
<span style={{ fontSize: '0.72rem', fontWeight: 700, letterSpacing: '0.1em', textTransform: 'uppercase', color: 'var(--text-accent)' }}>
Featured Research
</span>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(340px, 1fr))', gap: '1.25rem' }}>
{featured.map((blog, i) => (
<BlogCard key={blog.title} blog={blog} i={i} inView={inView} large />
))}
</div>
</motion.div>
{/* Divider */}
<div style={{ height: 1, background: 'var(--border-subtle)', marginBottom: '1.5rem', opacity: 0.5 }} />
{/* All articles grid */}
<div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: '0.9rem' }}>
<span style={{ fontSize: '0.72rem', fontWeight: 700, letterSpacing: '0.1em', textTransform: 'uppercase', color: 'var(--text-muted)' }}>
More Articles
</span>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))', gap: '1rem' }}>
{rest.map((blog, i) => (
<BlogCard key={blog.title} blog={blog} i={i + featured.length} inView={inView} />
))}
</div>
</div>
</section>
)
}
function BlogCard({ blog, i, inView, large }) {
return (
<motion.article
className="glass-card"
style={{ padding: large ? '1.75rem' : '1.5rem', display: 'flex', flexDirection: 'column', gap: '0.85rem', cursor: 'pointer', position: 'relative', overflow: 'hidden' }}
initial={{ opacity: 0, y: 36 }}
animate={inView ? { opacity: 1, y: 0 } : {}}
transition={{ duration: 0.55, delay: i * 0.08, ease: [0.22, 1, 0.36, 1] }}
whileHover={{ y: -6, borderColor: blog.tagColor + '50' }}
>
{/* Subtle top accent line */}
<div style={{ position: 'absolute', top: 0, left: 0, right: 0, height: 2, background: `linear-gradient(90deg, ${blog.tagColor}60, transparent)` }} />
{/* Header */}
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<span style={{ fontSize: large ? '2rem' : '1.8rem' }}>{blog.emoji}</span>
<span style={{
padding: '3px 10px', borderRadius: 999, fontSize: '0.68rem', fontWeight: 700,
background: `${blog.tagColor}15`, border: `1px solid ${blog.tagColor}30`,
color: blog.tagColor, letterSpacing: '0.05em',
}}>{blog.tag}</span>
</div>
{/* Title */}
<h3 style={{ fontSize: large ? '1.05rem' : '0.97rem', fontWeight: 700, color: 'var(--text-primary)', lineHeight: 1.45 }}>
{blog.title}
</h3>
{/* Excerpt */}
<p style={{ fontSize: '0.82rem', color: 'var(--text-secondary)', lineHeight: 1.75, flexGrow: 1 }}>
{blog.excerpt}
</p>
{/* Topic chips */}
<div style={{ display: 'flex', flexWrap: 'wrap', gap: 5 }}>
{blog.topics.map(t => (
<span key={t} className="tech-tag" style={{
fontSize: '0.65rem', background: `${blog.tagColor}10`,
borderColor: `${blog.tagColor}20`, color: blog.tagColor,
}}>{t}</span>
))}
</div>
{/* Footer */}
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', paddingTop: '0.5rem', borderTop: '1px solid var(--border-subtle)' }}>
<div style={{ display: 'flex', gap: 12 }}>
<span style={{ fontSize: '0.75rem', color: 'var(--text-muted)' }}>{blog.date}</span>
<span style={{ display: 'flex', alignItems: 'center', gap: 4, fontSize: '0.75rem', color: 'var(--text-muted)' }}>
<FiClock size={11} /> {blog.readTime}
</span>
</div>
<motion.button
style={{
background: 'none', border: 'none', cursor: 'pointer',
display: 'flex', alignItems: 'center', gap: 4,
fontSize: '0.78rem', fontWeight: 600, color: blog.tagColor,
}}
whileHover={{ gap: 8 }}
>
Read <FiArrowRight size={12} />
</motion.button>
</div>
</motion.article>
)
}
|