# EDR Admin Portal (Backoffice) Comprehensive admin portal for the Ethio-Djibouti Railway passenger management system. Built with Next.js 14, TypeScript, and Tailwind CSS with full dark mode support and EDR branding. ## 🚀 Enhanced Features ### Complete Admin Module Coverage - **Overview** - Dashboard with KPIs, revenue trends, and real-time metrics - **Operations** - Bookings, Passengers, Tickets, Live Tracking, Agent Operations - **Master Data** - Stations, Routes, Fleet Management, Schedules, Seat Classes - **Financial** - Pricing & Fares, Payments, Wallet Management, Promotions - **Customer Services** - Loyalty Program, Support Center, Notifications, Food & Dining - **Security & Compliance** - Fraud Detection, Verifayda Integration, Audit Logs - **Analytics & Reports** - Comprehensive reporting and operational analytics - **System** - Settings and configuration management ### UI/UX Enhancements - **EDR Branding** - Official blue, orange, and red color scheme - **Dark Mode** - Full dark mode support with theme persistence - **Collapsible Sidebar** - Space-efficient navigation with categorized sections - **Responsive Design** - Mobile-first approach with adaptive layouts - **Loading States** - Skeleton loaders and async action feedback - **Interactive Components** - Sortable tables, action buttons, modals ### Technical Features - **Real API Integration** - Connected to all EDR passenger API endpoints - **Functional CRUD Operations** - Add, edit, delete with optimistic updates - **Advanced Data Tables** - Sorting, filtering, pagination, bulk actions - **Form Validation** - Client-side validation with error handling - **State Management** - Zustand for auth and theme state - **Query Management** - React Query for server state and caching - **Type Safety** - Full TypeScript coverage with EDR domain types ## 📋 Prerequisites - Node.js >= 20.x - pnpm >= 9.x - EDR Passenger API running on http://localhost:4000 ## 🛠️ Installation ### 1. Install Dependencies From the monorepo root: ```bash pnpm install ``` Or from the backoffice directory: ```bash cd apps/edr-passenger-web/backoffice pnpm install ``` ### 2. Environment Configuration Copy the environment template: ```bash cp .env.example .env.local ``` Edit `.env.local`: ```bash # API Configuration NEXT_PUBLIC_API_URL=http://localhost:4000 # IAM Configuration (Corporate Authentication) NEXT_PUBLIC_IAM_ENABLED=false NEXT_PUBLIC_IAM_API_URL=https://iam.tria-plc.com/api ``` ### 3. Start Development Server From the backoffice directory: ```bash pnpm dev ``` Or from the monorepo root: ```bash pnpm --filter @edr/passenger-backoffice run dev ``` The admin portal will be available at: **http://localhost:3001** ## 🔑 Login Credentials Use these demo credentials to access the admin portal: | Email | Password | Role | |-------|----------|------| | admin@edr-platform.com | admin123 | Admin | **Note:** This is a stub authentication flow. TODO: Integrate with real backend auth endpoint. ## 📁 Enhanced Project Structure ``` backoffice/ ├── src/ │ ├── app/ # Next.js App Router pages │ │ ├── dashboard/ # Dashboard with KPIs │ │ ├── bookings/ # Booking management │ │ ├── passengers/ # Passenger management │ │ ├── stations/ # Station master data │ │ ├── routes/ # Route management │ │ ├── fleet/ # Train & coach management │ │ ├── schedules/ # Trip schedules │ │ ├── seat-classes/ # Seat class configuration │ │ ├── pricing/ # Fare rules & pricing │ │ ├── payments/ # Payment management │ │ ├── tickets/ # Ticket operations │ │ ├── agents/ # Agent operations │ │ ├── loyalty/ # Loyalty program │ │ ├── wallet/ # Wallet management │ │ ├── promotions/ # Promotion management │ │ ├── support/ # Customer support │ │ ├── notifications/ # Notification center │ │ ├── fraud/ # Fraud detection │ │ ├── verifayda/ # ID verification │ │ ├── audit/ # Audit logs │ │ ├── live/ # Live tracking │ │ ├── food/ # Food & dining │ │ ├── reports/ # Analytics & reports │ │ ├── operational-reports/ # Operational reports │ │ ├── settings/ # System settings │ │ └── login/ # Authentication │ ├── components/ │ │ ├── layout/ # Layout components │ │ │ ├── Sidebar.tsx # Collapsible navigation │ │ │ └── Header.tsx # Top header │ │ ├── dashboard/ # Dashboard components │ │ │ └── StatCard.tsx # KPI cards │ │ └── ui/ # Enhanced UI components │ │ ├── DataTable.tsx # Advanced data table │ │ ├── ActionButton.tsx # Loading button │ │ ├── Badge.tsx # Status badges │ │ ├── Modal.tsx # Modal dialogs │ │ └── Pagination.tsx # Pagination │ ├── lib/ │ │ ├── api/ # Comprehensive API layer │ │ │ ├── index.ts # All EDR API services │ │ │ ├── bookings.ts # Booking operations │ │ │ ├── passengers.ts # Passenger operations │ │ │ ├── routes.ts # Route operations │ │ │ └── dashboard.ts # Dashboard data │ │ ├── api-client.ts # Axios client │ │ ├── auth-store.ts # Authentication state │ │ ├── theme-store.ts # Dark mode state │ │ └── utils.ts # Utility functions │ ├── types/ │ │ ├── index.ts # Main types │ │ └── edr.ts # EDR domain types │ └── styles/ │ └── globals.css # Enhanced styles with dark mode ├── .env.example # Environment template ├── .env.local # Local environment ├── next.config.js # Next.js configuration ├── tailwind.config.js # Enhanced Tailwind config ├── tsconfig.json # TypeScript configuration └── package.json # Dependencies ``` ## 🎨 EDR Design System ### Color Palette - **Primary Blue**: #2563eb (EDR Blue) - **Secondary Orange**: #f97316 (EDR Orange) - **Accent Red**: #ef4444 (EDR Red) - **Success**: #10b981 - **Warning**: #f59e0b - **Danger**: #ef4444 ### Components #### Enhanced DataTable ```tsx {item.status} }, ]} actions={[ { label: 'Edit', onClick: handleEdit, variant: 'secondary', icon: Edit }, { label: 'Delete', onClick: handleDelete, variant: 'danger', icon: Trash2 }, ]} loading={isLoading} /> ``` #### ActionButton with Loading ```tsx Create Item ``` ## 🔌 Complete API Integration ### Available Services - `stationsApi` - Station CRUD operations - `fleetApi` - Train and coach management - `schedulesApi` - Trip schedule operations - `seatsApi` - Seat management and blocking - `bookingsApi` - Booking lifecycle management - `passengersApi` - Passenger operations - `paymentsApi` - Payment processing - `ticketsApi` - Ticket operations - `agentsApi` - Agent management - `loyaltyApi` - Loyalty program - `walletApi` - Wallet operations - `promotionsApi` - Promotion management - `supportApi` - Customer support - `notificationsApi` - Notification system - `fraudApi` - Fraud detection - `verifaydaApi` - ID verification - `auditApi` - Audit logging - `liveApi` - Live tracking - `seatClassesApi` - Seat class management - `foodApi` - Food & dining ### Real Data Integration All components use real API endpoints: ```tsx const { data, isLoading } = useQuery({ queryKey: ['stations', filters], queryFn: () => stationsApi.getAll(filters), }); const createMutation = useMutation({ mutationFn: stationsApi.create, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['stations'] }); setShowModal(false); }, }); ``` ## 🌙 Dark Mode Support Full dark mode implementation with: - System preference detection - Manual toggle in sidebar - Persistent theme storage - Semantic color variables - Smooth transitions ## 📱 Responsive Design - Mobile-first approach - Collapsible sidebar on mobile - Adaptive table layouts - Touch-friendly interactions - Responsive grid systems ## 🔐 Enhanced Security - JWT token management - Automatic token refresh - Role-based access control - Audit trail logging - Fraud detection integration ## 🚀 Performance Optimizations - React Query caching - Optimistic updates - Lazy loading - Code splitting - Image optimization ## 📊 Advanced Features ### Functional CRUD Operations - Create, Read, Update, Delete for all entities - Form validation and error handling - Optimistic UI updates - Bulk operations support ### Data Management - Advanced filtering and search - Sortable columns - Pagination with page size options - Export functionality - Real-time updates ### User Experience - Loading states and skeletons - Toast notifications - Confirmation dialogs - Keyboard shortcuts - Accessibility compliance ## 🎯 Available Scripts ```bash # Development pnpm dev # Start dev server on port 3001 # Build pnpm build # Build for production # Production pnpm start # Start production server # Linting pnpm lint # Run ESLint # Type Checking pnpm type-check # Run TypeScript compiler ``` ## 🚀 Deployment ### Build for Production ```bash pnpm build ``` ### Start Production Server ```bash pnpm start ``` ### Environment Variables for Production Ensure these are set in production: - `NEXT_PUBLIC_API_URL` - Backend API URL - `NEXT_PUBLIC_IAM_ENABLED` - Enable IAM authentication - `NEXT_PUBLIC_IAM_API_URL` - Corporate IAM API URL ## 📝 Development Notes ### Adding New Pages 1. Create directory in `src/app/` 2. Add `page.tsx` and `layout.tsx` 3. Update sidebar navigation 4. Create API service if needed 5. Add types to `src/types/edr.ts` ### API Integration 1. Add service to `src/lib/api/index.ts` 2. Create types in `src/types/edr.ts` 3. Use React Query hooks in components 4. Handle loading and error states ## 🔧 Customization ### Theme Customization Update `tailwind.config.js` for custom colors: ```js theme: { extend: { colors: { edr: { blue: { /* custom blue shades */ }, orange: { /* custom orange shades */ }, red: { /* custom red shades */ }, }, }, }, } ``` ### Component Styling Use semantic color classes: ```tsx

Title

Description

``` ## 📝 TODO - [ ] Integrate with real backend authentication endpoint - [ ] Implement IAM authentication for back-office users - [ ] Add real-time WebSocket connections for live updates - [ ] Implement advanced reporting with chart exports - [ ] Add bulk operations for data management - [ ] Implement advanced search with filters - [ ] Add keyboard shortcuts for power users - [ ] Implement role-based UI permissions - [ ] Add comprehensive error boundary handling - [ ] Implement offline support with service workers ## 🤝 Contributing 1. Create a feature branch 2. Follow the established patterns 3. Add proper TypeScript types 4. Test thoroughly 5. Submit a pull request ## 📧 Support For technical support or questions: - Email: support@edr-platform.com - Backend API Docs: http://localhost:4000/api-docs --- **Built with ❤️ for Ethio-Djibouti Railway**