BLOG
Scheduled Node.js Jobs: Patterns That Hold Up in Production
setInterval and raw cron get jobs running. Here's what separates a reliable scheduled Node.js task from one that fails silently at 3am and nobody notices.
MongoDB Aggregation Pipelines: Move Logic Into the DB
Why shipping large collections to Node for in-memory transforms is a performance trap — and how aggregation pipelines fix it with real examples.
AI Chatbot in Next.js App Router: Context-First Approach
How I built a grounded AI assistant for my portfolio by feeding static context data into a Claude API route — no hallucinations, no RAG required.
Data-First Refactoring: Let the UI Drive the Model
Swapping a visualization component taught me that data models silently couple to their consumers. Here's how TypeScript makes that coupling explicit and safe.
Visualizing Work History: Building a Career Graph in React
How I replaced a static experience teaser with a visual career graph — covering data modeling, TypeScript types, and responsive layout decisions in React.
Hello World — Why I'm Rebuilding My Portfolio From Scratch
A new site, a new chapter. Here's what I'm building, why it matters, and what's coming next.