Real-time IoT monitoring platform for smart grid infrastructure
A full-stack energy grid monitoring and management application built with Angular and Spring Boot. This project demonstrates modern enterprise development practices including containerization, database migrations, CI/CD pipelines, and comprehensive testing strategies.
Note: This project includes full deployment configuration for Railway (backend) and Vercel (frontend). Live deployment paused for cost optimization. See screenshots below or run locally with Docker.
📊 Dashboard & Monitoring
Real-time device monitoring with key metrics
Geolocation tracking of all devices
🔋 Device Management
Paginated device inventory with search and filters
Comprehensive device information including BMS, Meter, and Inverter data
📈 Analytics
Device performance metrics and trends
Multi-device comparison interface
🚨 Alerts & Notifications
System alerts and warnings dashboard
# Clone repository
git clone https://github.com/Ammari-Youssef/GridPulse.git
cd GridPulse
# Start all services with Docker
docker-compose up --build
# Access the application
# Frontend: http://localhost:4200
# Backend API: http://localhost:8080
# PostgreSQL: localhost:5432Demo Credentials:
Email: youssef@gridpulse.io
Password: ysf@1234
Role: Admin (full access to all features)
- Angular 19 - Modern web framework with standalone components
- Angular Material - Material Design UI components
- TailwindCSS 4 - Utility-first styling
- Apollo GraphQL - Efficient API data fetching
- Leaflet - Interactive map visualization
- TypeScript - Type-safe development
- Spring Boot 3.4.5 - Production-grade Java framework
- PostgreSQL - Relational database
- Liquibase - Version-controlled database migrations
- Spring Security + JWT - Secure authentication & authorization
- GraphQL - Flexible API query language
- Maven - Dependency management & build automation
- Docker & Docker Compose - Containerization
- GitHub Actions - CI/CD automation
- JUnit & Mockito - Unit testing
- Testcontainers - Integration testing with real databases
- JaCoCo - Code coverage reporting
- SonarQube - Static code analysis
GridPulse/
├── backend/ # Spring Boot API (Java 17)
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/ # Application code
│ │ │ └── resources/
│ │ │ ├── db/changelog/ # Liquibase migrations
│ │ │ ├── application.yml
│ │ │ └── application-prod.yml
│ │ │ └── application-dev.yml
│ │ │ └── application-seed.yml
│ │ │ └── application-docker.yml
│ │ └── test/ # Unit & integration tests
│ ├── Dockerfile
│ └── pom.xml
├── frontend/ # Angular 19 SPA
│ ├── src/
│ │ ├── app/
│ │ │ ├── core/ # Services, guards, interceptors
│ │ │ ├── features/ # Feature modules
│ │ │ ├── shared/ # Shared components
│ │ │ └── layout/ # Layout components
│ │ ├── environments/ # Environment configs
│ │ └── assets/
│ ├── Dockerfile
│ ├── package.json
│ └── angular.json
├── docs/
│ ├── screenshots/ # Application screenshots
│ ├── DEPLOYMENT.md # Deployment guide (Railway/Vercel)
│ ├── ARCHITECTURE.md # Application system design
│ ├── API.md # GraphQL API documentation
│ └── message-payloads/ # Alert message examples
├── .github/workflows/ # CI/CD pipelines
├── docker-compose.yml
└── README.md
- Node.js 18+
- Java 17+
- Maven 3.8+
- Docker & Docker Compose
1. Clone the repository:
git clone https://github.com/Ammari-Youssef/GridPulse.git
cd GridPulse2. Start with Docker (Recommended):
docker-compose up --build3. Or run services separately:
Backend:
cd backend
mvn clean install
mvn spring-boot:runFrontend:
cd frontend
npm install
ng serveAccess:
- Frontend: http://localhost:4200
- Backend API: http://localhost:8080/graphql
- GraphiQL: http://localhost:8080/graphiql
cd backend
# Run all tests
mvn test
# Run with coverage
mvn clean verify
# View coverage report
open target/site/jacoco/index.htmlcd frontend
# Run unit tests
ng test
# Run with coverage
ng test --code-coveragedocker-compose up --buildBackend:
cd backend
mvn clean package -DskipTests
# Output: target/gridpulse-backend-*.jarFrontend:
cd frontend
ng build --configuration production
# Output: dist/gridpulse/browser/This project includes full deployment configuration for:
- Backend + Database: Railway
- Frontend: Vercel
See docs/DEPLOYMENT.md for complete setup instructions.
- ✅ Real-time Monitoring - Live device status and metrics
- ✅ Interactive Maps - Geolocation tracking with clustering
- ✅ Advanced Analytics - Historical data visualization
- ✅ Alert Management - Configurable alerts and notifications
- ✅ Fleet Management - Organize devices into fleets
- ✅ User Management - Role-based access control (Admin/User)
- ✅ Responsive Design - Mobile-friendly interface
- ✅ GraphQL API - Efficient data fetching
- ✅ Database Migrations - Version-controlled schema changes
- ✅ Secure Authentication - JWT-based auth with refresh tokens
Uses environment.development.ts (localhost)
Uses environment.production.ts (deployed URLs)
See individual service READMEs for detailed configuration:
docker-compose down
# Edit docker-compose.yml to change ports
docker-compose updocker-compose down -v
docker-compose up --build# Backend
cd backend && mvn clean
# Frontend
cd frontend && rm -rf node_modules && npm install- Deployment Guide - Railway & Vercel deployment
- API Documentation - GraphQL schema & queries
- Architecture Overview - System design & tech stack
This is a portfolio project demonstrating full-stack development capabilities. Feedback and suggestions are welcome!
- Fork the repository
- Create a feature branch
- Commit your changes
- Open a Pull Request
This project is part of my portfolio and is available for educational purposes.
Youssef Ammari
- GitHub: @Ammari-Youssef
- Email: youssef.ammari.795@gmail.com
- LinkedIn: Youssef Ammari
Built with ❤️ to demonstrate modern full-stack development practices
Last Updated: January 2026














