Skip to content

2025—2026Backend developer, on staffBackend / ERP

CAIS ERP

An internal ERP covering the whole leads-to-order cycle. 75,500 lines, 1,203 of 1,305 commits mine, in production with the sales team.

CAIS ERP

Overview

CAIS is a multi-tenant business system at SHELTER that follows a deal from first contact to signed work order. I am its main contributor — 1,203 of 1,305 commits, working alongside six other people — across 407 PHP files and 75,500 lines. It covers leads and sales assignment, a multi-step quotation engine with tiered cost and margin calculation, cooperation agreements (PKS) with version history and version-to-version comparison, work orders (SPK) with site assignment and field checklists, plus a wage module that follows Indonesian labour regulation: UMP, UMK, UMSK, UMSP, THR. Laravel 12 on PHP 8.2, layered so business logic lives in per-domain services rather than in controllers, token auth via Sanctum, OpenAPI docs, and Docker images shipped through GitLab CI.

The problem

A deal passes through six teams and four document types before anyone gets paid, and each handoff was a spreadsheet. Worse, the documents are legally binding: once a quotation becomes a signed agreement, its numbers cannot quietly change, and every revision has to stay auditable. Wage figures inside those documents follow regional minimum-wage rules that change annually and differ per city.

What I did

I split business logic into per-domain services — Quotation, Pks, Spk, Leads, Report, Upah — so each document type owns its own rules instead of sharing one god class. Agreements are versioned and diffed with sebastian/diff, so a reviewer sees exactly what changed between revision three and four rather than trusting a changelog. Document numbering got its own service because sequence collisions under concurrent submission were the first bug class to appear. Wage calculation reads regional rules from master data rather than constants, so a yearly minimum-wage update is a data change, not a deploy.

In the build

  • Quotation engine: multi-step, tiered approval, revision and duplication
  • Custom Single Sign-On built on Laravel Sanctum
  • Approval Dashboard monitoring quotation workflows
  • Sales Activity Dashboard tracking monthly sales progress
  • Agreement versioning with true version-to-version diff
  • Work orders with site assignment, uploads, and field checklists
  • Wage rules following UMP, UMK, UMSK, UMSP, and THR regulation
  • Document numbering service built for concurrent submission
  • Menu-level RBAC rather than flat roles
  • 60+ Eloquent models, 40 migrations, 74 test files
  • Docker images shipped through GitLab CI

Questions about this project

What is CAIS ERP?

CAIS is the internal ERP of PT Shelter Indonesia. It follows a deal from first contact to a signed work order — leads, quotations, cooperation agreements (PKS), work orders (SPK) and wage rules — and runs in production with the sales team.

What is Jalu Pradipta's role on CAIS?

He is its backend developer, on staff since 2026 after joining as an intern in 2025, and its main contributor with 1,203 of the 1,305 commits. He built the core business modules, a custom Single Sign-On on Laravel Sanctum, and the Approval and Sales Activity dashboards.

What is CAIS built with?

Laravel 12 on PHP 8.2 with MySQL, token authentication through Laravel Sanctum, OpenAPI documentation, and Docker images shipped through GitLab CI.

Stack

  • Laravel 12
  • PHP 8.2
  • MySQL
  • Laravel Sanctum
  • OpenAPI
  • Docker
  • GitLab CI
  • AWS S3