Introduction

Connect is a premium, CodeCanyon-quality multi-tenant SaaS Employee Database Management System built using Laravel 12 and the elegant Tabler.io (Bootstrap 5) UI framework. Designed with a sleek dark-by-default, theme-aware HSL styling matching auth.glix.ae, Connect provides organizations with full-featured HR capabilities under a flexible subscription-based business model.

Key Architectural Detail: Connect implements single-database multi-tenancy using a custom, lightweight tenant_id column scoping strategy, making it clean and easy to maintain.

Core Features

Installation

Connect comes with an interactive 5-step installer wizard that makes setting up the platform extremely simple.

Prerequisites

Step-by-Step Server Setup

  1. Extract the files into your local directory (e.g. c:\xampp\htdocs\src\glix.ae\edocs.glix.ae).
  2. Configure a local virtual host pointing to the public/ folder of the project (e.g., http://edocs.glix.ae).
  3. Navigate to http://edocs.glix.ae in your browser. Since the application is not yet installed, you will be redirected automatically to the installer wizard at http://edocs.glix.ae/install.

The Installer Steps

SSO Setup

Connect is configured to delegate authentication entirely to auth.glix.ae using the custom glix/sso-client SDK. This means local login forms are omitted in favor of modern, secure, and centralized sign-on.

OAuth App Configuration

Log in to your admin panel on auth.glix.ae and create a new client credential using the details below:

Setting Required Value / Format
Client Type Confidential / PKCE Supported
Redirect URI http://edocs.glix.ae/sso/callback
Allowed Scopes openid profile email
Redirect URIs: Always ensure the SSO client's Redirect URI matches your local virtual host configuration exactly, including http:// or https:// protocols.

Multi-Tenancy

Multi-tenancy is handled via a single-database design. Every model that belongs to a tenant utilizes the custom BelongsToTenant trait.

namespace App\Traits;

use App\Scopes\TenantScope;

trait BelongsToTenant
{
    protected static function bootBelongsToTenant()
    {
        static::creating(function ($model) {
            if (app()->bound('tenant') && !$model->tenant_id) {
                $model->tenant_id = app('tenant')->id;
            }
        });

        static::addGlobalScope(new TenantScope);
    }
}

This adds automatic tenant_id assignments and appends global filters to all database queries. You can bypass the global tenant filter for super-admin views by calling withoutGlobalScope(TenantScope::class).

Multi-Cloud Storage

Connect supports flexible file storage systems, allowing files to be written locally or pushed to S3, Wasabi, or Bunny.net CDN.

Storage Configuration Settings

Tenant Admins can specify their preferred disk in Settings. Starter/Professional plan data will fall back to local disk or a shared S3 bucket, while Enterprise plan tenants can input their own AWS S3, Wasabi bucket, or Bunny.net credentials dynamically:

The storage engine resolves credentials dynamically at runtime using App\Services\StorageDiskResolver, compiling filesystem configurations on the fly for each request.

Plans & Billing

Connect uses plan-based subscriptions billed in AED (UAE Dirham). Key subscription plans defined in the database include:

Feature Starter Professional Enterprise
Monthly Cost Free 99 AED 299 AED
Max Employees 10 100 Unlimited
Allowed Departments 3 Unlimited Unlimited
Storage Limit 100 MB 5 GB Unlimited
Dynamic Cloud Storage No (Local Only) No (Local Only) Yes (S3, Wasabi, Bunny)

Employee Module

The core Employee directory contains comprehensive profile management with high-performance Excel imports/exports and Intervention Image avatar compression.

Tabbed Profile Layout

An employee profile includes 6 distinct tabs:

  1. Personal: General demographic fields, date of birth, gender, marital status.
  2. Address: Present and permanent residential addresses.
  3. Emergency Contacts: Family/friend names and phone numbers.
  4. Education: Academic credentials and diplomas.
  5. Experience: Previous professional work history.
  6. Documents: Uploaded ID proofs, contracts, and certifications.

Leave Management

Connect implements automatic yearly leave balances and a multi-level approval flow for leave requests.

Self-Healing Balances

To prevent database sync errors when employees are added or imported, the system uses a self-healing initialization method. If an employee applies for leave or views their profile, the system automatically checks if leave balance rows exist for the current year. If not, it self-heals by initializing default balances based on the tenant's leave policies.

Payroll Processing

The payroll module enables HR managers to define salary templates, assign structures, process monthly payroll runs, and download PDF payslips.

DomPDF Grid Compatibility: Since DomPDF has limited support for CSS grid and flexbox, the Connect payslip download layout uses classic, robust HTML table elements, ensuring 100% accurate rendering and clean margins on PDF outputs.

Onboarding Checklist

Connect helps organize new hire tasks via Onboarding/Offboarding templates.

GitHub Auto-Updater

Connect supports a premium self-updating SaaS architecture. System administrators can update Connect directly from the web panel, checking releases from the GitHub repository.

How it works:

  1. Admins click "System Updates" in Settings.
  2. The system queries the private GitHub Releases API using a secure PAT.
  3. If a newer semantic version is available, it displays the Release Markdown Changelog.
  4. Clicking "Update Now" triggers:
    • An automatic codebase backup stored in storage/app/backups/.
    • Downloading the zip package.
    • Overwriting outdated system files (excluding local storage, logs, and `.env`).
    • Running migrations, updating composer optimization, and caching routes.
# Check for updates via CLI
php artisan connect:check-update

# Run system update
php artisan connect:update

# Rollback to the latest working backup
php artisan connect:rollback

Troubleshooting

1. The website redirects to /install in a loop.

This means the lock file is missing or PHP does not have permission to write to storage. Ensure storage/ folder permissions are set to read/write/execute (775/777) for web server execution.

2. Single Sign-On throws "Client Redirect URI Mismatch".

Your local virtual host name or protocol differs from the Redirect URI registered on auth.glix.ae. Verify that the URL matches character-by-character.

3. Charts are blank or not rendering.

Ensure your browser is connected to the internet to load ApexCharts from the CDN script, and verify that you have configured at least one active department or approved leave request.