Index: README.md
===================================================================
--- README.md	(revision f021aa0c189bfba675e150915c6e9f08812f61c3)
+++ README.md	(revision d7c72f6cab53c531dde7c6ac9a9450a0c16b2fcc)
@@ -117,4 +117,44 @@
   - `idx_invoice_notifications_processed`: Partial index for unprocessed notifications
 
+### SQL Views
+
+The application uses SQL VIEWs to simplify common queries and improve maintainability:
+
+#### `invoice_summary`
+
+- **Purpose**: Shows invoice info with client and company names
+- **What it does**: Joins Invoice, Client, and Tenant tables to display invoice details with client name and company name
+- **Usage**: Makes it easier to see which client each invoice belongs to without writing complex JOINs
+
+```sql
+SELECT * FROM invoice_summary WHERE invoice_status = 'PENDING';
+```
+
+#### `client_totals`
+
+- **Purpose**: Shows total amounts for each client
+- **What it does**: Groups invoices by client and calculates total paid, pending, overdue amounts
+- **Usage**: Provides a quick overview of each client's financial status
+
+```sql
+SELECT * FROM client_totals ORDER BY total_invoiced DESC;
+```
+
+#### API Integration
+
+The views are used in API endpoints to provide simplified data access:
+
+- `src/app/api/clients/summary/route.ts`: Uses `client_totals` view for client financial summaries
+- `src/app/api/invoices/totals/route.ts`: Uses `invoice_summary` view for invoice analytics
+
+#### Benefits
+
+- **Simpler queries**: No need to write complex JOINs every time
+- **Consistent data**: Same calculation logic everywhere
+- **Easier to maintain**: Change the view, all queries get updated
+- **Better performance**: Database can optimize the view
+
+The views are implemented in `sql/03_business_views.sql`.
+
 ## Troubleshooting
 
Index: sql/02_client_email_index.sql
===================================================================
--- sql/02_client_email_index.sql	(revision f021aa0c189bfba675e150915c6e9f08812f61c3)
+++ sql/02_client_email_index.sql	(revision d7c72f6cab53c531dde7c6ac9a9450a0c16b2fcc)
@@ -16,3 +16,3 @@
 
 -- Update table statistics for query planner optimization
-ANALYZE "Client"; 
+ANALYZE "Client";
Index: sql/03_business_views.sql
===================================================================
--- sql/03_business_views.sql	(revision d7c72f6cab53c531dde7c6ac9a9450a0c16b2fcc)
+++ sql/03_business_views.sql	(revision d7c72f6cab53c531dde7c6ac9a9450a0c16b2fcc)
@@ -0,0 +1,39 @@
+-- =====================================================
+-- 1. INVOICE SUMMARY VIEW
+-- =====================================================
+-- Shows basic invoice info with client name for easier querying
+
+CREATE OR REPLACE VIEW invoice_summary AS
+SELECT 
+    i.id,
+    i.invoice_number,
+    i.invoice_status,
+    i.invoice_total_amount,
+    i.invoice_currency,
+    i.invoice_issue_date,
+    i.invoice_due_date,
+    c.name as client_name,
+    c.email as client_email,
+    t.company_name as company_name
+FROM "Invoice" i
+JOIN "Client" c ON i.client_id = c.id
+JOIN "Tenant" t ON i.tenant_id = t.id;
+
+-- =====================================================
+-- 2. CLIENT TOTALS VIEW
+-- =====================================================
+-- Shows total amounts for each client (paid, pending, overdue)
+
+CREATE OR REPLACE VIEW client_totals AS
+SELECT 
+    c.id as client_id,
+    c.name as client_name,
+    c.email as client_email,
+    COUNT(i.id) as total_invoices,
+    SUM(CASE WHEN i.invoice_status = 'PAID' THEN i.invoice_total_amount ELSE 0 END) as total_paid,
+    SUM(CASE WHEN i.invoice_status = 'PENDING' THEN i.invoice_total_amount ELSE 0 END) as total_pending,
+    SUM(CASE WHEN i.invoice_status = 'OVERDUE' THEN i.invoice_total_amount ELSE 0 END) as total_overdue,
+    SUM(i.invoice_total_amount) as total_invoiced
+FROM "Client" c
+LEFT JOIN "Invoice" i ON c.id = i.client_id
+GROUP BY c.id, c.name, c.email;
Index: src/app/api/clients/summary/route.ts
===================================================================
--- src/app/api/clients/summary/route.ts	(revision d7c72f6cab53c531dde7c6ac9a9450a0c16b2fcc)
+++ src/app/api/clients/summary/route.ts	(revision d7c72f6cab53c531dde7c6ac9a9450a0c16b2fcc)
@@ -0,0 +1,46 @@
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from 'src/lib/prisma';
+import { authenticateRequest } from 'src/lib/auth-middleware';
+
+// Simple API endpoint using SQL VIEWs
+export async function GET(request: NextRequest) {
+  try {
+    // Authenticate the request
+    const authResult = await authenticateRequest(request);
+    if (authResult instanceof NextResponse) {
+      return authResult;
+    }
+    const { userId, tenantId } = authResult;
+
+    // Use the simple client_totals view
+    const clientSummary = await prisma.$queryRaw`
+      SELECT 
+        client_name,
+        client_email,
+        total_invoices,
+        total_paid,
+        total_pending,
+        total_overdue,
+        total_invoiced
+      FROM client_totals
+      WHERE client_id IN (
+        SELECT id FROM "Client" WHERE tenant_id = ${tenantId}
+      )
+      ORDER BY total_invoiced DESC
+    `;
+
+    return NextResponse.json({
+      success: true,
+      data: clientSummary,
+      message: 'Client summary using SQL VIEW',
+    });
+  } catch (error) {
+    console.error('Error fetching client summary:', error);
+    return NextResponse.json(
+      {
+        error: 'Internal Server Error',
+      },
+      { status: 500 }
+    );
+  }
+}
