diff --git a/CLAUDE.md b/CLAUDE.md index 1f17204..ae54bd2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -64,7 +64,7 @@ Simple React Router setup in App.tsx: - `/assets/projects/advanced-retrieval` - AdvancedRetrieval - `*` - NotFoundPage (404) -No lazy loading is used - all components are directly imported. +HomePage and NotFoundPage are imported directly; every other route is loaded with `React.lazy` inside one `Suspense` boundary (fallback keeps the Layout visible). This keeps ECharts, Cytoscape and Leaflet out of the homepage bundle - add new project routes the same way. ### Project Data Management @@ -79,7 +79,7 @@ The ProjectCard component is also defined inline in ProjectsPage.tsx (lines 15-1 ### Layout Component The Layout component (`src/components/layout/Layout.tsx`) wraps all pages and provides: -- Navigation bar with links to sections (About, Expertise, Publications, Projects, Concepts, Teaching, Certifications, Contact, Graph Demos) +- Navigation bar with links to sections (About, Expertise, Publications, Projects, Teaching, Certifications, Contact, Graph Demos) - Active link highlighting using hash-based navigation for sections and pathname for Projects - Footer with social links (GitHub, LinkedIn, Graph Visualizations) @@ -151,5 +151,6 @@ Located in `src/data/`: - No testing framework is currently configured - No formatter (like Prettier) is configured in package.json -- Project uses direct imports (no code splitting/lazy loading) +- Routes other than Home and 404 are code-split with `React.lazy` +- Each page renders its own `
diff --git a/src/components/projects/event-analyzer/EventAnalyzer.tsx b/src/components/projects/event-analyzer/EventAnalyzer.tsx
index 1ac6f5c..3b35e42 100644
--- a/src/components/projects/event-analyzer/EventAnalyzer.tsx
+++ b/src/components/projects/event-analyzer/EventAnalyzer.tsx
@@ -235,6 +235,7 @@ const EventAnalyzer: React.FC = () => {
return (
diff --git a/src/components/projects/gdelt-kb/GdeltKnowledgeBase.tsx b/src/components/projects/gdelt-kb/GdeltKnowledgeBase.tsx
index 44e6367..912532a 100644
--- a/src/components/projects/gdelt-kb/GdeltKnowledgeBase.tsx
+++ b/src/components/projects/gdelt-kb/GdeltKnowledgeBase.tsx
@@ -5,6 +5,7 @@ import { ExternalLink, Github, Database } from 'lucide-react';
const GdeltKnowledgeBase: React.FC = () => {
return (
- Frame the problem first. Understand the trade-offs. Then write the code.
-
- A student once asked me: "Should I refactor my FastAPI RAG system to use FastMCP?"
-
- My answer? "It depends. Let's talk about what problem you're actually solving."
-
- This page isn't about code syntax. It's about architectural decisions β
- when to use MCP tools vs resources, when FastAPI still wins, and how CQRS patterns help you think clearly about these choices.
- Use when you need to change state Ask yourself: "Does this operation need unique input each time it runs?" If yes β Tool Use when you need to read state Ask yourself: "Can this data be cached and reused?" If yes β Resource
- If you're familiar with CQRS (Command Query Responsibility Segregation), this framework should feel natural:
- Commands (write) Change state, have side effects β MCP Tools Queries (read) Read state, no side effects β MCP Resources
- The question isn't "Should I migrate?"
-
- The question is: "What integration point matters most to me?"
- Choose FastAPI when:
- You need a general-purpose API that non-AI clients will also use, or when you need full control over auth, rate limiting, and middleware.
- Choose FastMCP when:
- Your primary users are AI applications/IDEs, you want standardized tool/resource patterns, or you're building for the MCP ecosystem.
-
- You don't have to choose! Many production systems run both:
-
- This is often the right answer for production systems that need broad compatibility.
-
- "I have a RAG system where users search documentation. Should the search endpoint be FastAPI or FastMCP?"
- Recommendation: FastMCP Tool
- Why: Each search query is unique (dynamic input), and if you're using Claude/IDEs,
- MCP gives native integration. The search results aren't cacheable since the query changes.
-
- But consider FastAPI if: You need the API for a web frontend too, or you have complex authentication needs.
-
- "I want to query my LangSmith traces from Claude Desktop. Tool or Resource?"
- Recommendation: MCP Resource
- Why: Traces are historical data (read-only), they don't change frequently,
- and caching can significantly improve performance. Resources are perfect for this.
-
- Use a Tool for: Creating new traces, updating metadata, or running analytics that need parameters.
-
- "I'm building a multi-agent system with LangGraph. How do I expose agent capabilities?"
- Recommendation: Hybrid Approach
- MCP Tools for invoking agents (dynamic, stateful operations)
-
- MCP Resources for agent configurations, schemas, available tools
-
- Consider FastAPI if you need a REST API for monitoring dashboards or external integrations
-
- Now that you understand the concepts and trade-offs, check out working implementations:
-
- These architectural decisions depend heavily on your specific use case. If you're a student in one of my bootcamp cohorts,
- bring your scenario to office hours. If not, feel free to reach out:
- The page you are looking for doesn't exist or has been moved.Event Analysis System
GDELT GKG Viewer
diff --git a/src/components/projects/situational-awareness/SituationalAwareness.tsx b/src/components/projects/situational-awareness/SituationalAwareness.tsx
index 639de5f..df22c7f 100644
--- a/src/components/projects/situational-awareness/SituationalAwareness.tsx
+++ b/src/components/projects/situational-awareness/SituationalAwareness.tsx
@@ -106,6 +106,7 @@ const SituationalAwareness: React.FC = () => {
return (
Situational Awareness Graph
diff --git a/src/pages/ConceptsPage.tsx b/src/pages/ConceptsPage.tsx
deleted file mode 100644
index 822051c..0000000
--- a/src/pages/ConceptsPage.tsx
+++ /dev/null
@@ -1,348 +0,0 @@
-import React from 'react';
-import Layout from '@/components/layout/Layout';
-
-const ConceptsPage: React.FC = () => {
- return (
-
- MCP Architecture: Concepts Before Code
-
-
- The MCP Decision Framework
-
-
- MCP Tools π§
- Good For:
-
-
- MCP Resources π
- Good For:
-
-
- The CQRS Connection
-
- FastAPI β FastMCP: The Migration Pattern
-
-
- FastAPI Strengths π
-
-
-
- FastMCP Strengths β‘
-
-
-
- π‘ The Hybrid Approach
-
-
-
- Real-World Decision Scenarios
-
-
-
- Scenario 1: RAG System with Vector Search
-
-
- Scenario 2: LangSmith Trace Analysis
-
-
- Scenario 3: Multi-Agent Orchestration
-
-
- Ready to See the Code?
-
-
- Still Have Questions?
-
- 404 - Page Not Found