Welcome to the EngageHub CRM project! EngageHub CRM is a versatile customer relationship management platform designed for various industries such as gyms, salons, restaurants, clinics, and more. This project uses a microservices architecture with Spring Boot, Netflix DGS for GraphQL, PostgreSQL for the database, Redis for caching, and Elasticsearch for search functionalities. !
- Features
- Technology Stack
- Architecture
- Project Structure
- Getting Started
- Running the Application
- Contributing
- License
- Appointment and Booking Management: Online booking, calendar management, and automated reminders.
- Customer Profiles and Management: Advanced customer search, detailed profiles, and loyalty programs.
- Review and Feedback System: Integrated reviews, moderation tools, and analytics.
- Payment Processing: Secure payments, multiple payment methods, and invoice generation.
- QR Code Integration: Easy access, promotions, and mobile integration.
- Marketing and Communication: Campaign management, customer segmentation, and push notifications.
- Customer Support and Engagement: Real-time chat support, ticketing system, and FAQ knowledge base.
- Analytics and Reporting: Sales and bookings reports, performance metrics, and predictive analytics.
- Frontend: React.js, Apollo Client, Redux
- Backend: Spring Boot, Netflix DGS (GraphQL)
- Database: PostgreSQL, Redis, Elasticsearch
- Infrastructure: Docker, Kubernetes, Jenkins/GitHub Actions
EngageHub CRM follows a microservices architecture to ensure scalability, performance, and maintainability. The high-level architecture includes the following components:
- Client Layer: React.js with Apollo Client for frontend, utilizing Redux for state management.
- Backend Layer: Spring Boot with Netflix DGS for GraphQL API, modular microservices architecture.
- Database Layer: PostgreSQL for primary structured data, Redis for caching, Elasticsearch for search functionalities.
- Infrastructure Layer: Docker for containerization, Kubernetes for orchestration, Jenkins/GitHub Actions for CI/CD.
engagehub/
├── build/
│ └── ...
├── client/
│ └── ...
├── gradle/
│ └── ...
├── server/
│ ├── api-gateway/
│ │ ├── bin/
│ │ ├── build/
│ │ ├── gradle/
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── engagehub/
│ │ │ │ │ └── api/
│ │ │ │ │ ├── dgs/
│ │ │ │ │ ├── model/
│ │ │ │ │ ├── repository/
│ │ │ │ │ └── resolver/
│ │ │ │ └── resources/
│ │ │ │ └── application.yml
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── Dockerfile
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── settings.gradle
│ ├── appointment-service/
│ │ ├── bin/
│ │ ├── build/
│ │ ├── gradle/
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── engagehub/
│ │ │ │ │ └── api/
│ │ │ │ │ ├── dgs/
│ │ │ │ │ │ └── AppointmentDataFetcher.java
│ │ │ │ │ ├── model/
│ │ │ │ │ │ └── Appointment.java
│ │ │ │ │ ├── repository/
│ │ │ │ │ │ └── AppointmentRepo.java
│ │ │ │ │ └── resolver/
│ │ │ │ │ └── AppointmentResolver.java
│ │ │ └── resources/
│ │ │ └── schema/
│ │ │ └── schema.graphqls
│ │ │ └── application.yml
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── Dockerfile
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── settings.gradle
│ ├── authentication-service/
│ │ ├── bin/
│ │ ├── build/
│ │ ├── gradle/
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── engagehub/
│ │ │ │ │ └── api/
│ │ │ │ │ ├── dgs/
│ │ │ │ │ ├── model/
│ │ │ │ │ ├── repository/
│ │ │ │ │ └── resolver/
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── Dockerfile
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── settings.gradle
│ ├── business-service/
│ │ ├── bin/
│ │ ├── build/
│ │ ├── gradle/
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── engagehub/
│ │ │ │ │ └── api/
│ │ │ │ │ ├── dgs/
│ │ │ │ │ │ └── BusinessDataFetcher.java
│ │ │ │ │ ├── model/
│ │ │ │ │ │ └── Business.java
│ │ │ │ │ ├── repository/
│ │ │ │ │ │ └── BusinessRepo.java
│ │ │ │ │ └── resolver/
│ │ │ │ │ └── BusinessResolver.java
│ │ │ └── resources/
│ │ │ └── schema/
│ │ │ └── schema.graphqls
│ │ │ └── application.yml
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── Dockerfile
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── settings.gradle
│ ├── customer-service/
│ │ ├── bin/
│ │ ├── build/
│ │ ├── gradle/
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── engagehub/
│ │ │ │ │ └── api/
│ │ │ │ │ ├── dgs/
│ │ │ │ │ ├── model/
│ │ │ │ │ ├── repository/
│ │ │ │ │ └── resolver/
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── Dockerfile
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── settings.gradle
│ ├── payment-service/
│ │ ├── bin/
│ │ ├── build/
│ │ ├── gradle/
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── engagehub/
│ │ │ │ │ └── api/
│ │ │ │ │ ├── dgs/
│ │ │ │ │ ├── model/
│ │ │ │ │ ├── repository/
│ │ │ │ │ └── resolver/
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── Dockerfile
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── settings.gradle
│ └── review-service/
│ ├── bin/
│ ├── build/
│ ├── gradle/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── engagehub/
│ │ │ │ └── api/
│ │ │ │ ├── dgs/
│ │ │ │ │ └── ReviewDataFetcher.java
│ │ │ │ ├── model/
│ │ │ │ │ └── Review.java
│ │ │ │ ├── repository/
│ │ │ │ │ └── ReviewRepo.java
│ │ │ │ └── resolver/
│ │ │ │ └── ReviewResolver.java
│ │ │ └── resources/
│ │ │ └── schema/
│ │ │ └── schema.graphqls
│ │ │ └── application.yml
│ ├── .gitignore
│ ├── build.gradle
│ ├── Dockerfile
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle
├── docker-compose.yml
├── settings.gradle
└── build.gradle
- Java 21 or higher
- Gradle 8 or higher
- Docker and Docker Compose
- PostgreSQL database
-
Clone the repository:
git clone https://github.com/your-username/engagehub-crm.git cd engagehub-crm
-
Build the project:
./gradlew build
-
Run Docker Compose:
docker-compose up --build
-
Access the application:
- GraphQL Playground:
http://localhost:8080/graphql
- GraphQL Playground:
-
Start PostgreSQL: Ensure PostgreSQL is running and create a database for the application.
-
Configure application properties: Update the database configurations in
application.properties
for each service. -
Run each service:
./gradlew :service-name:bootRun
-
Build Docker images:
docker-compose build
-
Start containers:
docker-compose up
Contributions are welcome! Please fork the repository and create a pull request with your changes. Make sure to follow the coding guidelines and include relevant tests.
This project is licensed under the MIT License. See the LICENSE file for details.