Skip to main content

Command Palette

Search for a command to run...

Building Monitra: How AI Tools Accelerated Development of a Modern Observability Platform

Updated
7 min read
Building Monitra: How AI Tools Accelerated Development of a Modern Observability Platform

INTRODUCTION

As developers, we've all been there: spending hours debugging API issues, manually checking logs across multiple terminals, and wishing we had better visibility into our applications. Commercial monitoring tools like Datadog and New Relic exist, but they come with hefty price tags ($15-50/user/month) and often require complex setup or platform-specific access (like Vercel Pro).

This is the story of how I built Monitra - a lightweight, AI-powered monitoring/observability platform that solves these problems, and how AI development tools (Cursor, ChatGPT, Claude) accelerated the entire process.

═══════════════════════════════════════════════════════════════════

THE PROBLEM

What We Were Missing

  1. NO VERCEL ACCESS: Many developers deploy to platforms without built-in observability

  2. EXPENSIVE TOOLS: Commercial solutions cost $180-600/year per developer

  3. COMPLEX SETUP: Heavy agents, infrastructure changes, learning curves

  4. LIMITED VISIBILITY: Most tools only show metadata, not full request/response data

  5. NO AI ASSISTANCE: Manual analysis of logs and errors

The Vision

A self-hosted, lightweight observability platform that:

  • Requires only few lines of code to integrate

  • Captures complete request/response data

  • Provides AI-powered error analysis

  • Works without platform dependencies

  • Costs nothing to run

═══════════════════════════════════════════════════════════════════

THE DEVELOPMENT JOURNEY

Phase 1: Architecture & Planning (ChatGPT)

I started by using CHATGPT 4 to design the architecture. The key questions were:

  • How to make instrumentation non-intrusive?

  • What data should we capture?

  • How to structure the database?

  • What's the best way to integrate with Next.js?

CHATGPT PROMPT:

Design a lightweight observability SDK for Next.js that: 1. Captures request/response data without performance impact 2. Works with middleware for automatic instrumentation 3. Stores data in MongoDB with efficient querying 4. Provides a dashboard for visualization

The AI suggested:

  • SDK-based approach (vs heavy agents)

  • Middleware-first automatic instrumentation

  • MongoDB for flexible schema

  • Next.js full-stack for single deployment

Phase 2: Rapid Development (Cursor AI)

With the architecture in place, I used CURSOR AI as my primary IDE for 70% of the code generation.

KEY FEATURES BUILT WITH CURSOR:

  1. SDK INSTRUMENTATION: "Create a Next.js SDK that wraps API route handlers and captures request/response data, errors, and console logs with correlation IDs"

  2. REQUEST/RESPONSE CAPTURE: "Implement request body and response body capture with size limits and proper cloning to avoid interfering with original handlers"

  3. CONSOLE LOG INTERCEPTION: "Override console.log, console.error, etc. to capture logs during API calls and associate them with correlation IDs"

  4. DASHBOARD UI: "Build a modern dashboard with tables, charts, and expandable detail sections using the provided design tokens"

CURSOR'S IMPACT:

  • Generated entire SDK structure in minutes

  • Created reusable UI components

  • Suggested TypeScript types automatically

  • Refactored code with single commands

Phase 3: AI Integration (Claude + ChatGPT)

For the AI-powered features, I used CLAUDE for planning and CHATGPT for implementation.

CLAUDE'S ROLE:

  • Designed the AI prompt structure

  • Suggested fallback mechanisms

  • Planned the natural language query interface

CHATGPT'S ROLE:

  • Generated OpenRouter API integration code

  • Created prompt templates for error analysis

  • Designed JSON response parsing logic

EXAMPLE AI FEATURE - ERROR EXPLANATION:

// Prompt engineered with ChatGPT const prompt = `Explain this API error in simple, developer-friendly terms. Error Details: [route, method, status, error message, stack trace] Request Data: [headers, body] Response Data: [body] Console Logs: [captured logs]

Provide: 1. A clear explanation (2-3 sentences) 2. Most likely causes (3-5 bullet points) 3. Context about why this happened`;

Phase 4: Refinement & Optimization

CLAUDE helped with:

  • Code review and optimization

  • Performance improvements

  • Error handling enhancements

  • Documentation generation

═══════════════════════════════════════════════════════════════════════KEY FEATURES & IMPLEMENTATION

  1. Lightweight SDK Integration

THE CHALLENGE: Most observability tools require heavy agents (50KB+) that impact performance.

THE SOLUTION: A 2KB SDK that uses Next.js middleware for automatic instrumentation.

// Just few lines of code! import { initialize } from '@monitra/sdk';

initialize({ apiKey: process.env.MONITRA_API_KEY!, collectorUrl: 'https://your-dashboard.com/api/ingest', });

HOW AI HELPED: Cursor generated the entire middleware wrapper, request cloning logic, and event sending mechanism in one session.

  1. Complete Request/Response Visibility

THE CHALLENGE: Most tools only show metadata (route, method, status). Developers need to see actual request payloads and response bodies.

THE SOLUTION: Capture everything - headers, request body, response body, console logs - all associated with a correlation ID.

HOW AI HELPED: ChatGPT designed the data structure, Cursor implemented the capture logic with proper size limits and privacy considerations.

  1. AI-Powered Error Analysis

THE CHALLENGE: Error messages and stack traces are cryptic. Developers spend hours understanding what went wrong.

THE SOLUTION: AI analyzes error context and provides:

  • Clear explanations in plain English

  • Likely causes with context

  • Code fix suggestions

  • Prevention tips

EXAMPLE:

Error: Cannot read property 'id' of undefined

AI Explanation: "This error occurs when trying to access the 'id' property on an undefined object. Based on the request data, it appears the user lookup failed, returning undefined instead of a user object. This likely happened because the user ID in the request doesn't exist in the database."

Likely Causes: - User ID doesn't exist in database - Database query returned null/undefined - Missing validation before property access

HOW AI HELPED: Claude designed the prompt structure, ChatGPT generated the OpenRouter integration, and Cursor built the UI components.

  1. Natural Language Querying

THE CHALLENGE: Developers need to ask questions about their API performance, but most tools require complex query languages.

THE SOLUTION: Natural language interface powered by LLM.

EXAMPLE QUERIES:

  • "What's the error rate for /api/users in the last hour?"

  • "Show me the slowest API routes"

  • "Are there any authentication errors today?"

HOW AI HELPED: ChatGPT designed the prompt that converts natural language to data queries, and Cursor built the query interface.

═══════════════════════════════════════════════════════════════════════

THE NUMBERS: IMPACT & RESULTS

Development Time

  • TRADITIONAL APPROACH: Estimated 3-4 months

  • AI-ASSISTED APPROACH: 3-4 weeks

  • TIME SAVED: ~75% reduction

Code Generation

  • 70% OF CODE: Generated with AI assistance

  • 30% OF CODE: Manual implementation (business logic, integrations)

  • 100% OF ARCHITECTURE: AI-guided decisions

Real-World Impact

  • DEBUGGING TIME: 2-3 hours → 15-20 minutes (87.5% reduction)

  • ERROR DETECTION: Real-time vs manual (saves 30-60 min per incident)

  • COST SAVINGS: $180-600/year per developer vs commercial tools

  • DEVELOPER PRODUCTIVITY: 3-4 hours/week saved per developer

═══════════════════════════════════════════════════════════════════════

LESSONS LEARNED

What Worked Well

  1. AI FOR ARCHITECTURE: ChatGPT excelled at high-level design decisions

  2. AI FOR CODE GENERATION: Cursor was perfect for rapid prototyping

  3. AI FOR PLANNING: Claude helped think through edge cases

  4. ITERATIVE APPROACH: Building features one at a time with AI assistance

Challenges Overcome

  1. AI HALLUCINATION: Sometimes AI suggested non-existent APIs or patterns

    • SOLUTION: Always verify with documentation, test immediately
  2. CONTEXT LIMITS: Large codebases exceeded AI context windows

    • SOLUTION: Break into smaller modules, use clear file structure
  3. INTEGRATION COMPLEXITY: AI-generated code needed manual integration

    • SOLUTION: Use AI for components, manually integrate and test

Best Practices for AI-Assisted Development

  1. START WITH ARCHITECTURE: Use AI for high-level design first

  2. ITERATE QUICKLY: Generate, test, refine - don't overthink

  3. VERIFY EVERYTHING: AI can be wrong - always test and verify

  4. USE MULTIPLE TOOLS: Different AIs excel at different tasks

  5. DOCUMENT AS YOU GO: AI helps generate documentation too

═══════════════════════════════════════════════════════════════════════

TECHNICAL DEEP DIVE

SDK Architecture

The SDK uses a middleware-based approach that automatically instruments all API routes:

// middleware.ts export function middleware(request: NextRequest) { return monitorMiddleware(request, async () => { // Original request continues return NextResponse.next(); }); }

KEY DESIGN DECISIONS:

  • Non-blocking: Captures data asynchronously

  • Non-intrusive: Clones request/response, doesn't modify originals

  • Lightweight: Minimal overhead, ~2KB bundle size

Data Capture Strategy

  1. REQUEST INTERCEPTION: Clone request to read body without consuming stream

  2. RESPONSE INTERCEPTION: Capture response body before sending

  3. CONSOLE OVERRIDE: Temporarily override console methods during request

  4. CORRELATION IDS: Unique ID per request for log association

AI Integration Architecture

User Action → Dashboard UI → API Route → AI Module → OpenRouter API ↓ LLM Response ↓ Parse & Format ↓ Return to UI

FALLBACK STRATEGY:

  • Primary: OpenRouter API (multi-model LLM)

  • Fallback: Rule-based analysis if API unavailable

  • Error Handling: Graceful degradation, never breaks user experience

═══════════════════════════════════════════════════════════════════════

FUTURE ENHANCEMENTS

Planned Features

  1. PYTHON SDK: Extend monitoring to Python APIs

  2. REAL-TIME UPDATES: WebSocket-based live dashboard

  3. ALERTING: Email/Slack notifications for errors

  4. DISTRIBUTED TRACING: Track requests across services

  5. MOBILE SDK: Monitor mobile app API calls

AI Improvements

  1. PREDICTIVE ANALYSIS: ML-based anomaly detection

  2. AUTO-FIX SUGGESTIONS: More specific code fixes

  3. PERFORMANCE RECOMMENDATIONS: AI-suggested optimizations

  4. NATURAL LANGUAGE REPORTS: Generate reports from queries

═══════════════════════════════════════════════════════════════════════

CONCLUSION

Building Monitra with AI tools was a game-changer. What would have taken months of traditional development was completed in weeks, with 70% of code generated by AI assistants.

KEY TAKEAWAYS:

  1. AI TOOLS ACCELERATE DEVELOPMENT: But they don't replace understanding

  2. MULTIPLE TOOLS, MULTIPLE STRENGTHS: Use the right AI for the right task

  3. ITERATE QUICKLY: Generate, test, refine - don't perfect in one go

  4. REAL PROBLEMS, REAL SOLUTIONS: AI helps, but solving real problems is what matters

THE RESULT: A production-ready observability platform that developers actually want to use, built in record time with AI assistance.

═══════════════════════════════════════════════════════════════════════

TRY IT YOURSELF

Monitra is open-source and available for you to use:

  1. INSTALL THE SDK: npm install @monitra/sdk

  2. INITIALIZE: 2 lines of code

  3. MONITOR: Automatic instrumentation via middleware

  4. DEBUG: AI-powered insights in the dashboard

GITHUB: https://github.com/ZySec-AI/monitra-ai

DOCUMENTATION: https://github.com/ZySec-AI/monitra-ai/blob/main/docs/DOCUMENTATION.md

DEMO: Monitra

═══════════════════════════════════════════════════════════════════════Have questions or want to contribute? Reach out on Bhavani Ampajwalam