System Architecture
Argument Cartographer follows a Modern Monolithic architecture pattern using Next.js 15, optimized for server-side rendering (SSR) and Edge interactions. This design prioritizes simplicity, security, and performance while maintaining the flexibility to scale.Philosophy: Build monolithic first, extract microservices only when necessary. This keeps the codebase maintainable while allowing future scaling.
Architecture Diagram
Layer Breakdown
1. Client Layer (Frontend)
Technology: Next.js 15 App Router, React 18, TypeScript Responsibilities:- User interface rendering
- Client-side state management
- Visualization rendering (React Flow, Recharts)
- Export functionality (html-to-image)
- Authentication state (Firebase Auth)
Server Components by Default: Next.js 15 uses React Server Components, reducing client-side JavaScript bundle size.
2. Intelligence Layer (AI Orchestration)
Technology: Google Genkit, Gemini 1.5 Pro, TypeScript Responsibilities:- AI flow orchestration
- Prompt management
- Tool execution (web search, scraping, social listening)
- Response validation and parsing
- Development: Node.js server
- Production: Vercel serverless functions (with 60s timeout)
3. Data Layer (Backend)
Technology: Firebase Firestore, Firebase Auth, Firebase Admin SDK Responsibilities:- User authentication and session management
- Analysis persistence
- User data isolation
- Security rules enforcement
4. External Integration Layer
Services:- Firecrawl API: Web search and article scraping
- Twitter API v2: Social sentiment analysis
- Google Gemini: LLM inference
- Graceful degradation if APIs fail
- Fallback strategies (snippets instead of full scrapes)
- Clear error messages to users
Data Flow
Complete Analysis Flow
AI Processing
Genkit orchestrates:
- Search query generation (Gemini)
- Web search (Firecrawl)
- Article scraping (Firecrawl/custom)
- Twitter search (Twitter API)
- Argument analysis (Gemini)
- Fallacy detection (Gemini)
- Social pulse generation (Gemini)
Scalability Considerations
Current Capacity
- Concurrent Users
- Data Storage
- Edge Function Execution
Estimate: 100-500 simultaneous analysesBottleneck: Gemini API rate limits (60 RPM on free tier)Mitigation: Implement queue system, user-level rate limiting
Future Scaling Strategies
Caching Layer
Cache common queries, scraped sources, and search results in Redis/Firestore
Background Jobs
Move analysis to queue (Bull/BullMQ) for async processing
CDN for Radar
Serve Radar topics via CDN with edge caching
Microservices Extraction
Extract scraper and fallacy detection to separate services
Security Architecture
Authentication Flow
Security Layers
Client-Side (Firebase Auth)
- Email/password authentication
- Session management via cookies
- Protected routes via middleware
Middleware (next-firebase-auth-edge)
- Token verification on every request
- Redirect unauthenticated users
- Extract user claims
Server-Side (Firebase Admin)
- Server Actions verify user identity
- Database queries filtered by userId
- No cross-user data exposure
Performance Optimization
Bundle Size Optimization
- Main bundle: ~120KB gzipped
- First Load JS: 145KB average
- Code splitting per route
Database Optimization
- Indexes: Created on
userId,createdAtfor fast queries - Composite Indexes:
(userId, createdAt)for history views - Denormalization: User data duplicated in analysis docs for fast reads
Edge Caching
- Static Pages: Homepage, marketing pages (CDN cached)
- Dynamic Pages: Dashboard, analysis views (no cache)
- API Routes: None (all Server Actions)
Monitoring & Observability
Planned Implementation
Error Tracking
Sentry for client and server error monitoring
Analytics
Vercel Analytics for performance, PostHog for product analytics
Logging
Structured logging with Pino, log aggregation in Datadog/LogRocket
Uptime Monitoring
UptimeRobot or Pingdom for availability checks
Technology Choices Rationale
Why Next.js 15?
Why Next.js 15?
- Server Components: Reduced JS bundle, better SEO
- Server Actions: Type-safe RPC without API routes
- App Router: Modern routing with layouts
- Vercel Deployment: First-class hosting integration
- TypeScript: Type safety across stack
Why Google Genkit?
Why Google Genkit?
- AI-First Framework: Purpose-built for LLM apps
- Tool Support: Built-in tool calling patterns
- Type Safety: Full TypeScript support
- Observability: Trace logging out of the box
- Gemini Integration: Native Google AI support
Why Firebase?
Why Firebase?
- Rapid Development: Auth + DB in one SDK
- Security Rules: Declarative, auditable access control
- Real-time: Live updates (future feature)
- Scalability: Managed service, auto-scaling
- Cost: Free tier generous, pay-as-you-go
Why Firecrawl?
Why Firecrawl?
- Quality: Better than raw scraping libraries
- Reliability: Handles anti-bot measures
- Markdown Output: Clean, parseable content
- Rate Limits: Generous free tier
- Search + Scrape: Combined functionality
Next Steps
AI Orchestration
Deep dive into Genkit flows and AI architecture
Data Layer
Firestore schema and security rules explained
External Integrations
How we integrate Firecrawl, Twitter, and Gemini APIs
Installation
Set up your own instance
