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
π₯ User Management & Settings
Role-based user administration
# 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













