Moved documentation files into a new docs/ directory and added a documentation index (docs/README.md). Updated the main README with improved project and documentation details. Set explicit API environment variables in Dockerfile for production. Enhanced next.config.mjs with improved API_BASE_URL handling and logging for better deployment clarity.
8.7 KiB
Analytics System Documentation
Overview
The analytics system provides comprehensive insights into store performance, sales trends, customer behavior, and order management. It supports both vendors and staff users (sub-users) with appropriate access controls and server-side rendering for optimal performance.
Features
🔐 Multi-User Support
- Vendors: Access their own store analytics automatically
- Staff/Sub-Users: Access store analytics by providing a
storeIdparameter via URL or cookies - Role-based Access: Different permissions for different user types
- Server-side Rendering: Initial data fetched server-side for better performance
📊 Analytics Dashboard
- Overview Metrics: Total revenue, orders, customers, and products
- Revenue Trends: Time-based revenue analysis with interactive charts
- Product Performance: Top-selling products with stock status
- Customer Insights: Customer segmentation and behavior analysis
- Order Analytics: Order status distribution and processing times
🎯 Key Metrics
- Total and monthly revenue
- Order completion rates
- Customer acquisition and retention
- Product performance rankings
- Average order processing times
API Endpoints
Authentication
All endpoints require authentication using the new protectStore middleware:
// For vendors (automatic store access)
GET /api/analytics/overview
// For staff users (requires storeId parameter)
GET /api/analytics/overview?storeId=store_id_here
Available Endpoints
1. Analytics Overview
GET /api/analytics/overview
Returns comprehensive overview metrics including:
- Order statistics (total, completed, pending, completion rate)
- Revenue data (total, monthly, weekly, average order value)
- Product count
- Unique customer count
- User type (vendor/staff)
2. Revenue Trends
GET /api/analytics/revenue-trends?period=30&storeId=optional
Returns daily revenue and order trends for the specified period.
3. Product Performance
GET /api/analytics/product-performance?storeId=optional
Returns top-performing products with sales metrics and stock status.
4. Customer Insights
GET /api/analytics/customer-insights?storeId=optional
Returns customer segmentation and top customer analysis.
5. Order Analytics
GET /api/analytics/order-analytics?period=30&storeId=optional
Returns order status distribution and processing time analysis.
Frontend Implementation
Server-Side Rendering
The analytics page uses server-side rendering for optimal performance:
// app/dashboard/analytics/page.tsx
export default async function AnalyticsPage({
searchParams,
}: {
searchParams: { storeId?: string };
}) {
const storeId = searchParams.storeId;
const initialData = await getAnalyticsOverviewServer(storeId);
return <AnalyticsDashboard initialData={initialData} />;
}
Store Selection for Staff Users
Staff users can select which store to view analytics for:
// URL-based store selection
/dashboard/analytics?storeId=store_id_here
// StoreSelector component for easy store switching
<StoreSelector />
Components
AnalyticsDashboard
Main dashboard component with tabs for different analytics views.
Props:
initialData: Initial analytics overview data (server-side fetched)
Features:
- Key metrics cards with trend indicators
- Tabbed interface for different analytics views
- Refresh functionality
- User type indicator (Vendor/Staff View)
StoreSelector
Client-side component for staff users to select stores.
Features:
- Input field for store ID
- URL-based navigation
- Current store display
- Error handling and validation
RevenueChart
Displays revenue trends over time with interactive charts.
Props:
timeRange: Time period for analysis (7, 30, 90 days)
ProductPerformanceChart
Shows top-performing products in a table format.
CustomerInsightsChart
Displays customer segmentation and top customers.
OrderAnalyticsChart
Shows order status distribution and daily trends.
Props:
timeRange: Time period for analysis
MetricsCard
Reusable component for displaying individual metrics.
Props:
title: Metric titlevalue: Metric valuedescription: Metric descriptionicon: Lucide icon componenttrend: Trend direction ("up", "down", "neutral")trendValue: Trend description
Sub-User (Staff) Support
Authentication Flow
- Staff users authenticate using their staff credentials
- When accessing analytics, they must provide a
storeIdparameter - The system verifies the store exists and grants access
- All analytics data is filtered by the specified store
Access Methods
Staff users can access store analytics in multiple ways:
- URL Parameter:
/dashboard/analytics?storeId=store_id_here - Store Selector: Use the StoreSelector component to choose a store
- Cookies: Store ID can be stored in cookies for persistence
Frontend Integration
The analytics service automatically handles both user types:
// Server-side (for initial load)
const data = await getAnalyticsOverviewServer(storeId);
// Client-side (for refreshes and updates)
const data = await getAnalyticsOverviewWithStore();
Usage Examples
Basic Analytics Access
// Server-side rendering
import { getAnalyticsOverviewServer } from '@/lib/server-api';
const overview = await getAnalyticsOverviewServer(storeId);
// Client-side updates
import { getAnalyticsOverviewWithStore } from '@/lib/services/analytics-service';
const overview = await getAnalyticsOverviewWithStore();
Staff User with Specific Store
// Navigate to analytics with store ID
router.push(`/dashboard/analytics?storeId=${storeId}`);
// Or use the store selector component
<StoreSelector />
Revenue Trends with Time Range
import { getRevenueTrendsWithStore } from '@/lib/services/analytics-service';
// Get 30-day revenue trends
const trends = await getRevenueTrendsWithStore('30');
Data Structure
AnalyticsOverview
interface AnalyticsOverview {
orders: {
total: number;
completed: number;
pending: number;
completionRate: string;
};
revenue: {
total: number;
monthly: number;
weekly: number;
averageOrderValue: number;
};
products: {
total: number;
};
customers: {
unique: number;
};
userType?: 'vendor' | 'staff';
}
RevenueData
interface RevenueData {
_id: {
year: number;
month: number;
day: number;
};
revenue: number;
orders: number;
}
ProductPerformance
interface ProductPerformance {
productId: string;
name: string;
image: string;
unitType: string;
currentStock: number;
stockStatus: string;
totalSold: number;
totalRevenue: number;
orderCount: number;
averagePrice: number;
}
Security Considerations
Access Control
- Vendors can only access their own store data
- Staff users must provide valid storeId parameter
- All requests are authenticated and authorized
- Store ownership is verified for staff access
Data Privacy
- Customer data is anonymized in analytics
- No sensitive information is exposed
- All data is filtered by store ownership
Error Handling
The system provides comprehensive error handling:
- 401 Unauthorized: Invalid or missing authentication → Redirect to login
- 400 Bad Request: Missing storeId for staff users → Show store selector
- 403 Forbidden: Access denied to specific store
- 404 Not Found: Store not found
- 500 Server Error: Internal server errors
All errors are displayed to users via toast notifications in the frontend.
Performance Optimization
- Server-side data fetching for initial load
- Client-side caching for subsequent requests
- Efficient database queries with proper indexing
- Pagination for large datasets
- Real-time data refresh capabilities
- Optimized rendering with React Suspense
Backend Implementation
Middleware
protectStore: Handles both vendors and staff usersprotectVendorOnly: Vendor-specific routesprotectStaffOnly: Staff-specific routes
Database Queries
- Uses
storeIdfor consistent data filtering - Aggregation pipelines for complex analytics
- Proper indexing for performance
- Time-based filtering for trends
Future Enhancements
- Real-time analytics updates
- Export functionality for reports
- Advanced filtering and date range selection
- Custom dashboard configurations
- Email reports and notifications
- Comparative analytics (period-over-period)
- Predictive analytics and forecasting
- Multi-store comparison for staff users