Spaces:
Build error
Build error
File size: 5,320 Bytes
558ec07 | 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 | import { useEffect, useRef, useState } from 'react';
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/dist/ScrollTrigger';
import { BookOpen, Clock, ArrowRight, Sparkles, Target, Lightbulb, TrendingUp } from 'lucide-react';
gsap.registerPlugin(ScrollTrigger);
const articles = [
{
id: 1,
title: 'The Sub-Millisecond API: Architecture Patterns for Extreme Performance',
excerpt: 'How we achieved 0.3ms p99 latency in a distributed system handling 10M RPS. Lessons from rethinking every layer of the stack.',
readTime: '12 min',
category: 'Architecture',
featured: true,
insights: ['Edge caching strategies', 'Protocol buffers optimization', 'Kernel bypass networking'],
},
{
id: 2,
title: 'Quantum-Resistant Cryptography: A Practical Migration Guide',
excerpt: 'NIST has finalized post-quantum algorithms. Here is how to migrate your existing PKI infrastructure without downtime.',
readTime: '8 min',
category: 'Security',
featured: false,
insights: ['CRYSTALS-Kyber implementation', 'Hybrid key exchange', 'Certificate lifecycle'],
},
{
id: 3,
title: 'The Hidden Cost of JavaScript: Memory Profiling Deep Dive',
excerpt: 'V8 internals exposed. Understanding hidden classes, shape transitions, and why your "simple" function allocates 2MB.',
readTime: '15 min',
category: 'Performance',
featured: false,
insights: ['V8 heap snapshots', 'Hidden class optimization', 'Memory leak patterns'],
},
{
id: 4,
title: 'Building Unstoppable Systems: Chaos Engineering in Production',
excerpt: 'Netflix taught us to embrace failure. Here is the playbook for designing systems that thrive under extreme conditions.',
readTime: '10 min',
category: 'Reliability',
featured: false,
insights: ['Game day exercises', 'Fault injection', 'Circuit breaker patterns'],
},
{
id: 5,
title: 'The Compiler You Did Not Know You Had: SQL Query Planning',
excerpt: 'PostgreSQL query planner demystified. How to read EXPLAIN ANALYZE output like a database engineer.',
readTime: '11 min',
category: 'Database',
featured: false,
insights: ['Cost-based optimization', 'Index selection', 'Join strategies'],
},
{
id: 6,
title: 'WebAssembly at Scale: Lessons from Figma and Shopify',
excerpt: 'When to WASM, when to stay native. Real-world performance data from production deployments.',
readTime: '9 min',
category: 'WebAssembly',
featured: false,
insights: ['WASM vs JS benchmarks', 'Module loading', 'Memory management'],
},
];
export default function LabNotes() {
const sectionRef = useRef(null);
const [activeFilter, setActiveFilter] = useState('All');
const [hoveredCard, setHoveredCard] = useState(null);
const categories = ['All', ...new Set(articles.map(a => a.category))];
const filteredArticles = activeFilter === 'All'
? articles
: articles.filter(a => a.category === activeFilter);
useEffect(() => {
const ctx = gsap.context(() => {
gsap.from('.lab-note-card', {
scrollTrigger: {
trigger: '#lab-notes',
start: 'top 80%',
},
y: 50,
opacity: 0,
duration: 0.6,
stagger: 0.1,
ease: 'power2.out'
});
}, sectionRef);
return () => ctx.revert();
}, [filteredArticles]);
return (
<section id="lab-notes" ref={sectionRef} className="py-24 relative bg-iron-900/50">
{/* Background Pattern */}
<div className="absolute inset-0 grid-pattern opacity-30" />
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
{/* Section Header */}
<div className="flex flex-col lg:flex-row lg:items-end lg:justify-between mb-12 gap-6">
<div>
<div className="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-iron-800/80 border border-iron-600/50 mb-6">
<BookOpen className="w-4 h-4 text-magma-500" />
<span className="font-mono text-sm text-iron-300">LAB NOTES // KNOWLEDGE_BASE</span>
</div>
<h2 className="text-4xl sm:text-5xl font-bold mb-4">
<span className="text-iron-100">Deep Dives & </span>
<span className="text-gradient">Field Reports</span>
</h2>
<p className="max-w-xl text-iron-400 font-mono">
Extended analysis from the trenches of production systems.
Theory meets battle-tested implementation.
</p>
</div>
{/* Filter Tabs */}
<div className="flex flex-wrap gap-2">
{categories.map(cat => (
<button
key={cat}
onClick={() => setActiveFilter(cat)}
className={`px-4 py-2 rounded-lg font-mono text-sm transition-all ${activeFilter === cat ? 'bg-electric-500 text-iron-900' : 'bg-iron-800 text-iron-300 hover:bg-iron-700'}`}
>
{cat}
</button>
))}
</div>
</div>
{/* Featured Article */}
{filteredArticles.find(a => a.featured) && (
<div className="mb-8 p-8 rounded-2xl bg-gradient-to-br from-iron-800 to-iron-900 border border-iron-600/50 relative overflow-hidden group">
< |