Skip to content

Spearheaded the development of a versatile CRM system, handling 5000+ daily transactions and reducing scheduling conflicts by 75%. Integrated secure payment processing supporting multiple methods, boosting transaction success rates by 50%.

Notifications You must be signed in to change notification settings

Mr1n8L/EngageHub-A_Dynamic_Customer_Relations_Hub

Repository files navigation

EngageHub CRM

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. !

Table of Contents

Features

  • 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.

Technology Stack

  • Frontend: React.js, Apollo Client, Redux
  • Backend: Spring Boot, Netflix DGS (GraphQL)
  • Database: PostgreSQL, Redis, Elasticsearch
  • Infrastructure: Docker, Kubernetes, Jenkins/GitHub Actions

Architecture

EngageHub CRM follows a microservices architecture to ensure scalability, performance, and maintainability. The high-level architecture includes the following components:

  1. Client Layer: React.js with Apollo Client for frontend, utilizing Redux for state management.
  2. Backend Layer: Spring Boot with Netflix DGS for GraphQL API, modular microservices architecture.
  3. Database Layer: PostgreSQL for primary structured data, Redis for caching, Elasticsearch for search functionalities.
  4. Infrastructure Layer: Docker for containerization, Kubernetes for orchestration, Jenkins/GitHub Actions for CI/CD.

Project Structure

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

Getting Started

Prerequisites

  • Java 21 or higher
  • Gradle 8 or higher
  • Docker and Docker Compose
  • PostgreSQL database

Installation

  1. Clone the repository:

    git clone https://github.com/your-username/engagehub-crm.git
    cd engagehub-crm
  2. Build the project:

    ./gradlew build
  3. Run Docker Compose:

    docker-compose up --build
  4. Access the application:

    • GraphQL Playground: http://localhost:8080/graphql

Running the Application

Running Locally

  1. Start PostgreSQL: Ensure PostgreSQL is running and create a database for the application.

  2. Configure application properties: Update the database configurations in application.properties for each service.

  3. Run each service:

    ./gradlew :service-name:bootRun

Running with Docker

  1. Build Docker images:

    docker-compose build
  2. Start containers:

    docker-compose up

Contributing

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.

License

This project is licensed under the MIT License. See the LICENSE file for details.

About

Spearheaded the development of a versatile CRM system, handling 5000+ daily transactions and reducing scheduling conflicts by 75%. Integrated secure payment processing supporting multiple methods, boosting transaction success rates by 50%.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •