A comprehensive smart city management system connecting citizens, field agents, and administrators for efficient urban service delivery.
- Overview
- Features
- Architecture
- Tech Stack
- Getting Started
- Project Structure
- Notification System
- API Documentation
- Deployment
- Testing
- Contributing
- License
ISSOP (Intelligent Smart City Operations Platform) is a modern, real-time platform designed to streamline urban service management. It enables citizens to report issues, field agents to respond efficiently, and administrators to monitor and manage city operations from a centralized dashboard.
- π± Mobile App - Citizens report issues with photos and location
- π· Agent Portal - Field agents receive and manage assigned tasks
- π₯οΈ Admin Dashboard - Real-time monitoring and analytics
- π Smart Notifications - Hourly reminders and instant updates
- πΊοΈ Live Tracking - Real-time agent location and task status
- π Analytics - Comprehensive insights and performance metrics
- β Report issues with photos, location, and description
- β Track request status in real-time
- β Receive notifications when issues are resolved
- β Hourly reminders for pending requests
- β View nearby agents and estimated response time
- β Rate and review completed services
- β Receive task assignments instantly
- β Update task status (In Progress, Completed)
- β Upload completion proof with photos
- β Navigate to task locations with maps
- β Hourly reminders for assigned tasks
- β View task history and performance metrics
- β Real-time dashboard with live statistics
- β Monitor all requests and agent activities
- β Assign tasks to available agents
- β View analytics and performance reports
- β Manage users and roles (SUPERADMIN)
- β Live map with agent locations
- β Daily summary reports at 9 AM
- β Alert notifications for urgent issues
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ISSOP Platform β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Mobile β β Admin β β Backend β β
β β App β β Dashboard β β API β β
β β (React β β (Next.js) β β (Node.js) β β
β β Native) β β β β β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β β β β
β ββββββββββββββββββββ΄βββββββββββββββββββ β
β β β
β βββββββββΌβββββββββ β
β β Socket.IO β β
β β (Real-time) β β
β βββββββββ¬βββββββββ β
β β β
β ββββββββββββββββββββΌβββββββββββββββββββ β
β β β β β
β ββββββββΌββββββββ ββββββββΌββββββββ ββββββββΌββββββββ β
β β PostgreSQL β β Cloudinary β β Node-Cron β β
β β (Database) β β (Images) β β (Scheduler) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Citizen reports issue via mobile app
- Backend stores request and notifies admins
- Admin assigns task to available agent
- Agent receives notification and accepts task
- Agent updates status and uploads completion proof
- Citizen receives completion notification
- Scheduler sends hourly reminders for pending tasks
- Runtime: Node.js 20.x
- Framework: Express.js
- Database: PostgreSQL with Prisma ORM
- Real-time: Socket.IO
- Authentication: JWT (JSON Web Tokens)
- File Storage: Cloudinary
- Scheduling: node-cron
- API Docs: Swagger/OpenAPI
- Framework: Next.js 16 (React 19)
- Language: TypeScript
- Styling: Tailwind CSS
- UI Components: Radix UI + shadcn/ui
- State Management: Redux Toolkit
- Maps: Leaflet + React Leaflet
- Charts: Recharts
- Animations: Framer Motion
- Framework: React Native (Expo)
- Language: TypeScript
- Navigation: React Navigation
- State: Redux Toolkit
- Maps: React Native Maps
- Camera: Expo Camera & Image Picker
- Node.js >= 20.11.1
- npm >= 9.8.1
- PostgreSQL >= 14
- Git
git clone https://github.com/Temsegn/ISSOP-Platform.git
cd ISSOP-Platformcd Backend
# Install dependencies
npm install
# Configure environment
cp .env.example .env.local
# Edit .env.local with your credentials:
# - DATABASE_URL
# - JWT_SECRET
# - CLOUDINARY credentials
# Run database migrations
npx prisma migrate dev
# Seed database (optional)
npx prisma db seed
# Start server
npm run devBackend runs on: http://localhost:3000
cd Admin
# Install dependencies
npm install
# Environment is pre-configured in .env.local
# Points to: https://issop-platform.onrender.com/api/v1
# Start development server
npm run devAdmin Dashboard runs on: http://localhost:3000
cd mobile
# Install dependencies
npm install
# Start Expo
npm start
# Scan QR code with Expo Go app
# Or press 'a' for Android, 'i' for iOS simulatorISSOP-Platform/
βββ Backend/ # Node.js API Server
β βββ prisma/
β β βββ schema.prisma # Database schema
β β βββ seed.js # Database seeding
β βββ src/
β β βββ config/ # Configuration files
β β βββ middleware/ # Express middlewares
β β βββ modules/ # Feature modules
β β β βββ auth/ # Authentication
β β β βββ users/ # User management
β β β βββ requests/ # Request handling
β β β βββ tasks/ # Task management
β β β βββ notifications/ # Notifications
β β β βββ analytics/ # Analytics & reports
β β βββ services/ # Business logic
β β β βββ notification-scheduler.js
β β βββ app.js # Express app
β β βββ server.js # Server entry point
β βββ tests/ # Unit & integration tests
β βββ .env.example # Environment template
β βββ package.json
β
βββ Admin/ # Next.js Admin Dashboard
β βββ app/ # App router pages
β β βββ dashboard/ # Dashboard pages
β β β βββ page.tsx # Main dashboard
β β β βββ requests/ # Request management
β β β βββ users/ # User management
β β β βββ agents/ # Agent monitoring
β β β βββ analytics/ # Analytics
β β β βββ roles/ # Role management
β β β βββ settings/ # Settings
β β βββ login/ # Login page
β βββ components/ # React components
β β βββ dashboard/ # Dashboard components
β β βββ ui/ # UI components (shadcn)
β βββ lib/ # Utilities
β β βββ api.ts # API client
β β βββ socket.ts # Socket.IO client
β β βββ types.ts # TypeScript types
β βββ store/ # Redux store
β βββ .env.local # Environment config
β βββ package.json
β
βββ mobile/ # React Native Mobile App
β βββ src/
β β βββ screens/ # App screens
β β βββ components/ # React components
β β βββ navigation/ # Navigation config
β β βββ services/ # API & services
β β βββ store/ # Redux store
β β βββ utils/ # Utilities
β βββ app.json # Expo configuration
β βββ package.json
β
βββ docs/ # Documentation
βββ COMPLETE-FIXES-SUMMARY.md # All fixes summary
βββ README.md # This file
ISSOP features a comprehensive notification system with real-time delivery and scheduled reminders.
| Type | Recipient | Trigger | Frequency |
|---|---|---|---|
| Task Assignment | Agent | Request assigned | Instant |
| Status Update | Citizen | Status changes | Instant |
| Completion | Citizen | Request completed | Instant |
| Hourly Reminder | Citizen/Agent | Pending >1 hour | Every hour |
| Alert | Admin | Pending >24 hours | Every 24 hours |
| Daily Summary | Admin | Platform stats | 9:00 AM daily |
How it works:
- Cron job runs every hour at minute 0 (10:00, 11:00, 12:00, etc.)
- Checks all requests pending for more than 1 hour
- Sends reminders to:
- Citizens: "Your request has been pending for X hours. We're working on it!"
- Agents: "Reminder: Task assigned to you for X hours. Please update status."
- Admins: For requests >24 hours old
Configuration:
// Backend/src/services/notification-scheduler.js
cron.schedule('0 * * * *', async () => {
// Hourly reminder logic
});When a request is marked as COMPLETED:
β
Great news! Your request "Fix Pothole" has been completed.
Thank you for using ISSOP!
When a request is IN_PROGRESS:
π§ Your request "Fix Pothole" is now being worked on by our team.
All notifications are delivered via Socket.IO for instant updates:
// Client connects
socket.on('notification_received', (notification) => {
// Display notification in app
});
// Server sends
socketService.emitToUser(userId, 'notification_received', notification);Get Notifications:
GET /api/v1/notifications
Authorization: Bearer <token>Mark as Read:
PATCH /api/v1/notifications/:id/read
Authorization: Bearer <token>Production: https://issop-platform.onrender.com/api/v1
Local: http://localhost:3000/api/v1
All protected endpoints require JWT token:
Authorization: Bearer <your-jwt-token>POST /auth/register # Register new user
POST /auth/login # Login
GET /auth/me # Get current userGET /requests # List all requests
POST /requests # Create new request
GET /requests/:id # Get request details
PATCH /requests/:id/status # Update status
PATCH /requests/:id/assign # Assign to agentGET /users # List users
GET /users/:id # Get user details
PATCH /users/:id # Update user
DELETE /users/:id # Delete user
PATCH /users/:id/role # Update user roleGET /notifications # Get user notifications
PATCH /notifications/:id/read # Mark as readGET /analytics/summary # Dashboard statistics
GET /analytics/agents # Agent performanceInteractive API documentation available at:
http://localhost:3000/api-docs
-
Create Web Service
- Connect GitHub repository
- Select
Backendfolder - Build Command:
npm install && npx prisma generate - Start Command:
npm start
-
Environment Variables
DATABASE_URL=postgresql://... JWT_SECRET=your-secret-key CLOUDINARY_CLOUD_NAME=... CLOUDINARY_API_KEY=... CLOUDINARY_API_SECRET=... PORT=3000 -
Database
- Create PostgreSQL database on Render
- Run migrations:
npx prisma migrate deploy
-
Deploy to Vercel
cd Admin vercel -
Environment Variables
NEXT_PUBLIC_API_URL=https://issop-platform.onrender.com/api/v1 NEXT_PUBLIC_SOCKET_URL=https://issop-platform.onrender.com
-
Build for Production
cd mobile eas build --platform android eas build --platform ios -
Submit to Stores
eas submit --platform android eas submit --platform ios
cd Backend
# Run all tests
npm test
# Run with coverage
npm test -- --coverage
# Run specific test
npm test -- auth.service.test.jsTest Suites:
- Unit tests for services
- Integration tests for API endpoints
- Database tests with Prisma mock
cd Admin
# Type checking
npm run type-check
# Linting
npm run lint
# Build test
npm run buildcd mobile
# Run tests
npm test
# Type checking
npm run type-check- Report issues
- Track request status
- Receive notifications
- Rate completed services
- View assigned tasks
- Update task status
- Upload completion proof
- Navigate to locations
- View all requests
- Assign tasks to agents
- Monitor agent activities
- View analytics (area-specific)
- All ADMIN permissions
- Manage users and roles
- System-wide analytics
- Platform configuration
- Authentication: JWT with secure token storage
- Authorization: Role-based access control (RBAC)
- Data Validation: Zod schema validation
- SQL Injection: Protected by Prisma ORM
- XSS Protection: Helmet.js middleware
- CORS: Configured for specific origins
- Rate Limiting: Implemented on sensitive endpoints
- Password Hashing: bcrypt with salt rounds
- Real-time Updates: Socket.IO for instant notifications
- Caching: API response caching (30 seconds TTL)
- Database Indexing: Optimized queries with indexes
- Image Optimization: Cloudinary transformations
- Code Splitting: Next.js automatic code splitting
- Lazy Loading: Components loaded on demand
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m 'Add amazing feature' - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
- Backend: ESLint configuration
- Frontend: TypeScript strict mode
- Commits: Conventional commits format
- Tests: Required for new features
This project is licensed under the MIT License - see the LICENSE file for details.
For issues, questions, or contributions:
- GitHub Issues: Create an issue
- Documentation: Check
/docsfolder - Email: support@issop.platform
- Prisma - Modern database toolkit
- Next.js - React framework
- Socket.IO - Real-time engine
- Cloudinary - Media management
- shadcn/ui - UI components
- Render.com - Hosting platform
- Push notifications (FCM/APNS)
- Email notifications
- SMS notifications
- Multi-language support
- Dark mode for mobile app
- Offline mode support
- AI-powered task routing
- Predictive maintenance
- Citizen feedback system
- Integration with city IoT sensors
- Advanced analytics dashboard
- Mobile app for iOS
Real-time monitoring with live statistics
Citizen request submission interface
Current Version: 2.5.0
Status: β
Production Ready
Last Updated: April 8, 2026
Maintained: Yes
Built with β€οΈ for Smart Cities
