LinkedIn Clone

service-integration-guide • 12/31/2025

SERVICE INTEGRATION GUIDE

Linkedin Admin Panel

This document provides detailed information about how the Linkedin Admin Panel integrates with backend services, including configuration, API communication patterns, and service-specific implementation details.

Architectural Design Credit and Contact Information

The architectural design of this service integration is credited to Mindbricks Genesis Engine.

We encourage open communication and welcome any questions or discussions related to the architectural aspects of this service integration.

Documentation Scope

This guide covers the complete integration architecture between the Linkedin Admin Panel and its backend services. It includes configuration management, API communication patterns, authentication flows, and service-specific implementation details.

Intended Audience

This documentation is intended for frontend developers, DevOps engineers, and system integrators who need to understand, configure, or extend the admin panel's service integration capabilities.

Service Integration Architecture

Overview

The admin panel integrates with backend services through service-specific HTTP clients. Each service is configured via environment variables and uses its own Axios instance for API communication.

Integration Components

Service Configuration

  • Service URLs configured via environment variables
  • Service-specific Axios instances for API communication

API Communication

  • Basic HTTP client instances per service
  • Simple error handling through response interceptors

Service Configuration

Environment Variables

The admin panel uses environment variables to configure service endpoints and integration settings:

Core Configuration

# Application Configuration
VITE_APP_NAME="Linkedin Admin Panel"
VITE_APP_VERSION="1.1.43"
VITE_ASSETS_DIR="/assets"

**Service Endpoints**

```bash
# JobApplication Service
VITE_JOBAPPLICATION_SERVICE_URL="https://jobApplication-api.linkedin.prod.mindbricks.com"

```bash
# Networking Service
VITE_NETWORKING_SERVICE_URL="https://networking-api.linkedin.prod.mindbricks.com"

```bash
# Company Service
VITE_COMPANY_SERVICE_URL="https://company-api.linkedin.prod.mindbricks.com"

```bash
# Content Service
VITE_CONTENT_SERVICE_URL="https://content-api.linkedin.prod.mindbricks.com"

```bash
# Messaging Service
VITE_MESSAGING_SERVICE_URL="https://messaging-api.linkedin.prod.mindbricks.com"

```bash
# Profile Service
VITE_PROFILE_SERVICE_URL="https://profile-api.linkedin.prod.mindbricks.com"

```bash
# Auth Service
VITE_AUTH_SERVICE_URL="https://auth-api.linkedin.prod.mindbricks.com"

API Communication Patterns

HTTP Client Configuration

Service-Specific Axios Instances

import axios from 'axios';
import { CONFIG } from 'src/global-config';

const jobApplicationAxiosInstance = axios.create({ 
  baseURL: CONFIG.jobApplicationServiceUrl
});

jobApplicationAxiosInstance.interceptors.response.use(
  (response) => response,
  (error) => Promise.reject((error.response && error.response.data) || 'Something went wrong!')
);

export default jobApplicationAxiosInstance;
import axios from 'axios';
import { CONFIG } from 'src/global-config';

const networkingAxiosInstance = axios.create({ 
  baseURL: CONFIG.networkingServiceUrl
});

networkingAxiosInstance.interceptors.response.use(
  (response) => response,
  (error) => Promise.reject((error.response && error.response.data) || 'Something went wrong!')
);

export default networkingAxiosInstance;
import axios from 'axios';
import { CONFIG } from 'src/global-config';

const companyAxiosInstance = axios.create({ 
  baseURL: CONFIG.companyServiceUrl
});

companyAxiosInstance.interceptors.response.use(
  (response) => response,
  (error) => Promise.reject((error.response && error.response.data) || 'Something went wrong!')
);

export default companyAxiosInstance;
import axios from 'axios';
import { CONFIG } from 'src/global-config';

const contentAxiosInstance = axios.create({ 
  baseURL: CONFIG.contentServiceUrl
});

contentAxiosInstance.interceptors.response.use(
  (response) => response,
  (error) => Promise.reject((error.response && error.response.data) || 'Something went wrong!')
);

export default contentAxiosInstance;
import axios from 'axios';
import { CONFIG } from 'src/global-config';

const messagingAxiosInstance = axios.create({ 
  baseURL: CONFIG.messagingServiceUrl
});

messagingAxiosInstance.interceptors.response.use(
  (response) => response,
  (error) => Promise.reject((error.response && error.response.data) || 'Something went wrong!')
);

export default messagingAxiosInstance;
import axios from 'axios';
import { CONFIG } from 'src/global-config';

const profileAxiosInstance = axios.create({ 
  baseURL: CONFIG.profileServiceUrl
});

profileAxiosInstance.interceptors.response.use(
  (response) => response,
  (error) => Promise.reject((error.response && error.response.data) || 'Something went wrong!')
);

export default profileAxiosInstance;
import axios from 'axios';
import { CONFIG } from 'src/global-config';

const authAxiosInstance = axios.create({ 
  baseURL: CONFIG.authServiceUrl
});

authAxiosInstance.interceptors.response.use(
  (response) => response,
  (error) => Promise.reject((error.response && error.response.data) || 'Something went wrong!')
);

export default authAxiosInstance;

Service Endpoints

JobApplication Service Endpoints

export const jobApplicationEndpoints = {
    
    
        jobPosting: {
            
                
                updateJobPosting: '/v1/jobpostings/:jobPostingId'
            
                ,
                deleteJobPosting: '/v1/jobpostings/:jobPostingId'
            
                ,
                getJobPosting: '/v1/jobpostings/:jobPostingId'
            
                ,
                listJobPostings: '/v1/jobpostings'
            
                ,
                createJobPosting: '/v1/jobpostings'
            
        },
    
        jobApplication: {
            
                
                deleteJobApplication: '/v1/jobapplications/:jobApplicationId'
            
                ,
                getJobApplication: '/v1/jobapplications/:jobApplicationId'
            
                ,
                updateJobApplication: '/v1/jobapplications/:jobApplicationId'
            
                ,
                createJobApplication: '/v1/jobapplications'
            
                ,
                listJobApplications: '/v1/jobapplications'
            
        }
    
};

Networking Service Endpoints

export const networkingEndpoints = {
    
    
        connection: {
            
                
                createConnection: '/v1/connections'
            
                ,
                listConnections: '/v1/connections'
            
                ,
                deleteConnection: '/v1/connections/:connectionId'
            
                ,
                getConnection: '/v1/connections/:connectionId'
            
        },
    
        connectionRequest: {
            
                
                deleteConnectionRequest: '/v1/connectionrequests/:connectionRequestId'
            
                ,
                updateConnectionRequest: '/v1/connectionrequests/:connectionRequestId'
            
                ,
                listConnectionRequests: '/v1/connectionrequests'
            
                ,
                createConnectionRequest: '/v1/connectionrequests'
            
                ,
                getConnectionRequest: '/v1/connectionrequests/:connectionRequestId'
            
        }
    
};

Company Service Endpoints

export const companyEndpoints = {
    
    
        companyFollower: {
            
                
                followCompany: '/v1/followcompany'
            
                ,
                unfollowCompany: '/v1/unfollowcompany/:companyFollowerId'
            
                ,
                listCompanyFollowers: '/v1/companyfollowers'
            
                ,
                getCompanyFollower: '/v1/companyfollowers/:companyFollowerId'
            
        },
    
        companyUpdate: {
            
                
                getCompanyUpdate: '/v1/companyupdates/:companyUpdateId'
            
                ,
                createCompanyUpdate: '/v1/companyupdates'
            
                ,
                updateCompanyUpdate: '/v1/companyupdates/:companyUpdateId'
            
                ,
                deleteCompanyUpdate: '/v1/companyupdates/:companyUpdateId'
            
                ,
                listCompanyUpdates: '/v1/companyupdates'
            
        },
    
        company: {
            
                
                createCompany: '/v1/companies'
            
                ,
                getCompany: '/v1/companies/:companyId'
            
                ,
                listCompanies: '/v1/companies'
            
                ,
                updateCompany: '/v1/companies/:companyId'
            
                ,
                deleteCompany: '/v1/companies/:companyId'
            
        },
    
        companyAdmin: {
            
                
                getCompanyAdmin: '/v1/companyadmins/:companyAdminId'
            
                ,
                removeCompanyAdmin: '/v1/removecompanyadmin/:companyAdminId'
            
                ,
                assignCompanyAdmin: '/v1/assigncompanyadmin'
            
                ,
                listCompanyAdmins: '/v1/companyadmins'
            
        }
    
};

Content Service Endpoints

export const contentEndpoints = {
    
    
        post: {
            
                
                createPost: '/v1/posts'
            
                ,
                listPosts: '/v1/posts'
            
                ,
                getPost: '/v1/posts/:postId'
            
                ,
                deletePost: '/v1/posts/:postId'
            
                ,
                updatePost: '/v1/posts/:postId'
            
                ,
                listUserPosts: '/v1/userposts'
            
        },
    
        like: {
            
                
                likePost: '/v1/likepost'
            
                ,
                listLikes: '/v1/likes'
            
                ,
                unlikePost: '/v1/unlikepost/:likeId'
            
        },
    
        comment: {
            
                
                updateComment: '/v1/comments/:commentId'
            
                ,
                createComment: '/v1/comments'
            
                ,
                listComments: '/v1/comments'
            
                ,
                getComment: '/v1/comments/:commentId'
            
                ,
                deleteComment: '/v1/comments/:commentId'
            
        }
    
};

Messaging Service Endpoints

export const messagingEndpoints = {
    
    
        message: {
            
                
                listMessages: '/v1/messages'
            
                ,
                getMessage: '/v1/messages/:messageId'
            
                ,
                updateMessage: '/v1/messages/:messageId'
            
                ,
                deleteMessage: '/v1/messages/:messageId'
            
                ,
                createMessage: '/v1/messages'
            
        },
    
        conversation: {
            
                
                updateConversation: '/v1/conversations/:conversationId'
            
                ,
                getConversation: '/v1/conversations/:conversationId'
            
                ,
                deleteConversation: '/v1/conversations/:conversationId'
            
                ,
                listConversations: '/v1/conversations'
            
                ,
                createConversation: '/v1/conversations'
            
        }
    
};

Profile Service Endpoints

export const profileEndpoints = {
    
    
        profile: {
            
                
                updateProfile: '/v1/profiles/:profileId'
            
                ,
                deleteProfile: '/v1/profiles/:profileId'
            
                ,
                listProfiles: '/v1/profiles'
            
                ,
                createProfile: '/v1/profiles'
            
                ,
                getProfile: '/v1/profiles/:profileId'
            
        },
    
        premiumsubscription: {
            
                
                deletePremuimSub: '/v1/premuimsub/:premiumsubscriptionId'
            
                ,
                createPremuimSub: '/v1/premuimsub'
            
                ,
                updatePremuimSub: '/v1/premuimsub/:premiumsubscriptionId'
            
                ,
                getPremuimSub: '/v1/premuimsub/:premiumsubscriptionId'
            
                ,
                listPremuimSub: '/v1/premuimsub'
            
                ,
                startPremiumsubscriptionPayment: '/v1/startpremiumsubscriptionpayment/:premiumsubscriptionId'
            
                ,
                refreshPremiumsubscriptionPayment: '/v1/refreshpremiumsubscriptionpayment/:premiumsubscriptionId'
            
                ,
                callbackPremiumsubscriptionPayment: '/v1/callbackpremiumsubscriptionpayment'
            
        },
    
        certification: {
            
                
                updateCertification: '/v1/certifications/:certificationId'
            
                ,
                listCertifications: '/v1/certifications'
            
                ,
                createCertification: '/v1/certifications'
            
                ,
                getCertification: '/v1/certifications/:certificationId'
            
                ,
                deleteCertification: '/v1/certifications/:certificationId'
            
        },
    
        language: {
            
                
                deleteLanguage: '/v1/languages/:languageId'
            
                ,
                updateLanguage: '/v1/languages/:languageId'
            
                ,
                listLanguages: '/v1/languages'
            
                ,
                getLanguage: '/v1/languages/:languageId'
            
                ,
                createLanguage: '/v1/languages'
            
        },
    
        sys_premiumsubscriptionPayment: {
            
                
                getPremiumsubscriptionPayment2: '/v1/premiumsubscriptionpayment2/:sys_premiumsubscriptionPaymentId'
            
                ,
                listPremiumsubscriptionPayments2: '/v1/premiumsubscriptionpayments2'
            
                ,
                createPremiumsubscriptionPayment: '/v1/premiumsubscriptionpayment'
            
                ,
                updatePremiumsubscriptionPayment: '/v1/premiumsubscriptionpayment/:sys_premiumsubscriptionPaymentId'
            
                ,
                deletePremiumsubscriptionPayment: '/v1/premiumsubscriptionpayment/:sys_premiumsubscriptionPaymentId'
            
                ,
                listPremiumsubscriptionPayments2: '/v1/premiumsubscriptionpayments2'
            
                ,
                getPremiumsubscriptionPaymentByOrderId: '/v1/premiumsubscriptionpaymentbyorderid/:orderId'
            
                ,
                getPremiumsubscriptionPaymentByPaymentId: '/v1/premiumsubscriptionpaymentbypaymentid/:paymentId'
            
                ,
                getPremiumsubscriptionPayment2: '/v1/premiumsubscriptionpayment2/:sys_premiumsubscriptionPaymentId'
            
        },
    
        sys_paymentCustomer: {
            
                
                getPaymentCustomerByUserId: '/v1/paymentcustomers/:userId'
            
                ,
                listPaymentCustomers: '/v1/paymentcustomers'
            
        },
    
        sys_paymentMethod: {
            
                
                listPaymentCustomerMethods: '/v1/paymentcustomermethods/:userId'
            
        }
    
};

Auth Service Endpoints

export const authEndpoints = {
    
    login: "/login", 
    me: "/v1/users/:userId", 
    logout: "/logout",
    
    
        user: {
            
                
                getUser: '/v1/users/:userId'
            
                ,
                updateUser: '/v1/users/:userId'
            
                ,
                updateProfile: '/v1/profile/:userId'
            
                ,
                createUser: '/v1/users'
            
                ,
                deleteUser: '/v1/users/:userId'
            
                ,
                archiveProfile: '/v1/archiveprofile/:userId'
            
                ,
                listUsers: '/v1/users'
            
                ,
                searchUsers: '/v1/searchusers'
            
                ,
                updateUserRole: '/v1/userrole/:userId'
            
                ,
                updateUserPassword: '/v1/userpassword/:userId'
            
                ,
                updateUserPasswordByAdmin: '/v1/userpasswordbyadmin/:userId'
            
                ,
                getBriefUser: '/v1/briefuser/:userId'
            
                ,
                registerUser: '/v1/registeruser'
            
        }
    
};

Authentication Integration

JWT Token Management

Basic Token Handling

// Authentication is handled through the AuthProvider context
// Tokens are managed by the JWT authentication system

Multi-Service Authentication

Service Authentication Implementation

// Basic JWT authentication is used across all services
// Authentication context is shared between services

Data Synchronization

Real-Time Updates

Data Synchronization Implementation

// Data is fetched on-demand through API calls
// No real-time synchronization is required

Optimistic Updates

Update Strategy Implementation

// Data is updated directly through API calls
// Changes are reflected immediately after successful API response

Error Handling and Resilience

Error Handling

Error Handling Implementation

// Basic error handling through Axios response interceptors
// Errors are logged and simplified for display

Retry Mechanisms

Retry Implementation

// Basic error handling through Axios interceptors
// Errors are logged and displayed to users

Service-Specific Integration Details

JobApplication Service Integration

Service Overview

  • Service Name: jobApplication
  • Display Name: JobApplication
  • Primary Purpose: Microservice handling job postings (created by recruiters/company admins), job applications (created by users), allowing job search, application submission, and status update workflows. Enforces business rules around application status, admin controls, and lets professionals apply and track job applications .within the network.

Integration Features

  • Basic CRUD operations for data objects
  • Simple error handling

Data Object Management

  • JobPosting: Job posting entity representing an open position with a company. Created/managed by company admins or recruiters. Fields include companyId, postedByUserId, title, details, requirements, employment type, salary, deadline, etc.

  • JobApplication: Record of a user applying for a specific jobPosting (tracks application/resume/status/audit). Each application is unique per user x jobPosting.

API Endpoints

  • Data Operations: Service-specific CRUD endpoints based on business logic

Configuration Requirements

VITE_JOBAPPLICATION_SERVICE_URL=https://jobApplication-api.linkedin.prod.mindbricks.com

Networking Service Integration

Service Overview

  • Service Name: networking
  • Display Name: Networking
  • Primary Purpose: Handles professional networking logic for user-to-user connections: manages connection requests, accepted relationships, listing/removal, permissions, and state transitions. Publishes connection lifecycle events for notification...

Integration Features

  • Basic CRUD operations for data objects
  • Simple error handling

Data Object Management

  • Connection: Represents a single established user-to-user professional relationship (mutual connection). One record per unordered user pair, deleted on disconnect..

  • ConnectionRequest: Tracks a user's request to connect with another user, supporting request/accept/reject/cancel, with audit timestamps.

API Endpoints

  • Data Operations: Service-specific CRUD endpoints based on business logic

Configuration Requirements

VITE_NETWORKING_SERVICE_URL=https://networking-api.linkedin.prod.mindbricks.com

Company Service Integration

Service Overview

  • Service Name: company
  • Display Name: Company
  • Primary Purpose: Handles company profiles, company admin assignments, company following, and posting company updates/news. Enables professionals to follow companies, get updates, and enables admins to manage company presence..

Integration Features

  • Basic CRUD operations for data objects
  • Simple error handling

Data Object Management

  • CompanyFollower: Tracks when a user follows a company to receive updates. Append-only, deletes for unfollow.

  • CompanyUpdate: A post/news update created by company admin and visible to followers depending on visibility.

  • Company: Represents a company profile and brand presence/pages on the network.

  • CompanyAdmin: Tracks which users are assigned as admins for a company, allowing them to manage the company page and edits.

API Endpoints

  • Data Operations: Service-specific CRUD endpoints based on business logic

Configuration Requirements

VITE_COMPANY_SERVICE_URL=https://company-api.linkedin.prod.mindbricks.com

Content Service Integration

Service Overview

  • Service Name: content
  • Display Name: Content
  • Primary Purpose: Handles creation, editing, and deletion of user posts (with attachments and visibility), user post feed aggregation, and post engagement (likes, comments). All with post-level visibility control (public/private)..

Integration Features

  • Basic CRUD operations for data objects
  • Simple error handling

Data Object Management

  • Post: A user or company-authored post in the feed, with content, optional attachments, and public/private visibility. Belongs to a user (author) and optionally a company.

  • Like: A record of a user liking a specific post. Each user can like a post only once. Used for engagement counts and activity feeds.

  • Comment: A comment on a post. Can be a top-level or a reply to another comment (via parentCommentId).

API Endpoints

  • Data Operations: Service-specific CRUD endpoints based on business logic

Configuration Requirements

VITE_CONTENT_SERVICE_URL=https://content-api.linkedin.prod.mindbricks.com

Messaging Service Integration

Service Overview

  • Service Name: messaging
  • Display Name: Messaging
  • Primary Purpose: Handles direct, private 1:1 and group messaging between users, conversation management, and message history/storage..

Integration Features

  • Basic CRUD operations for data objects
  • Simple error handling

Data Object Management

  • Message: Message posted within a conversation. Tracks content, sender, readBy, and deletedFor status per user.

  • Conversation: Messaging thread among users supporting 1:1 and group. Tracks participants, group status, and last message time.

API Endpoints

  • Data Operations: Service-specific CRUD endpoints based on business logic

Configuration Requirements

VITE_MESSAGING_SERVICE_URL=https://messaging-api.linkedin.prod.mindbricks.com

Profile Service Integration

Service Overview

  • Service Name: profile
  • Display Name: Profile
  • Primary Purpose: Handles user professional profiles, including experience, education, skills, languages, certifications, profile photo, and visibility controls. Enables recruiter search, elastic-style indexing, and profile editing, with all data linked to authenticated users..

Integration Features

  • Basic CRUD operations for data objects
  • Simple error handling

Data Object Management

  • Profile: Professional profile for a user, includes core info and arrays of experience/education/skills. One profile per user...

  • Premiumsubscription: premium subscription for a user

  • Certification: Official certification available for selection in user profile (dictionary only, not user relation).

  • Language: Official language available for selection in user profile (dictionary only, not user relation).

  • Sys_premiumsubscriptionPayment: A payment storage object to store the payment life cyle of orders based on premiumsubscription object. It is autocreated based on the source object's checkout config

  • Sys_paymentCustomer: A payment storage object to store the customer values of the payment platform

  • Sys_paymentMethod: A payment storage object to store the payment methods of the platform customers

API Endpoints

  • Data Operations: Service-specific CRUD endpoints based on business logic

Configuration Requirements

VITE_PROFILE_SERVICE_URL=https://profile-api.linkedin.prod.mindbricks.com

Auth Service Integration

Service Overview

  • Service Name: auth
  • Display Name: Auth
  • Primary Purpose: Authentication service for the project

Integration Features

  • Basic CRUD operations for data objects
  • Simple error handling

Data Object Management

  • User: A data object that stores the user information and handles login settings.

API Endpoints

  • Data Operations: Service-specific CRUD endpoints based on business logic

Configuration Requirements

VITE_AUTH_SERVICE_URL=https://auth-api.linkedin.prod.mindbricks.com

Performance Optimization

Caching Strategies

Caching Implementation

// Data is fetched on-demand through API calls
// No caching is required for current use cases

Request Batching

Request Batching Implementation

// Individual API calls are made as needed
// Each operation is handled independently

Monitoring and Logging

Service Monitoring

Monitoring Implementation

// Basic error logging through console.error
// Service health is monitored through API responses

Error Logging

Error Logging Implementation

// Basic error logging through console.error
// Errors are displayed to users through UI components