Skip to content
Project Programming

SIMPEG

By Romi Fadli, S.Kom. 10 min read v2 Software Design
On this page
Employees and administrators use the Web App, which talks to the Core API; the Core API uses storage, regions, face and preview services, sends documents to the Aurograf signing platform, sends logs and traces to the log stack, and imports from the old system

SIMPEG is the personnel information system of the City Government of South Tangerang: one system for the records, careers and services of every civil servant across the city's agencies. Employees keep their own data up to date and follow their salary steps, promotions and retirement; administrators in each agency and the city's personnel office work on exactly their part of the organisation; and every rule the system applies is taken from the regulation that sets it. It is an internal application, used by the city's staff rather than the public.

I have led its development since 2023, and the current generation — a new Laravel core and a new Vue interface — is entirely my own work, from the data model to the screens.

At a glance

ClientDiskominfo Kota Tangerang Selatan (the city's communication and informatics office), which manages the city's applications; operated by the city's personnel office, BKPSDM
RoleSolution architect since 2023, leading the team — quality assurance, backend developers, a UI developer, DevOps and DevSecOps — and the lead backend developer, writing the main API myself
PeriodSince 2023
Version2
StatusIn development — an internal application without a public address
StackLaravel and PHP, Vue and TypeScript, Rust, Python; PostgreSQL, Redis, S3-compatible storage; OpenTelemetry, Elasticsearch and Kibana; Docker
Who it is for, what I did, and where it stands.

My role as the solution architect

On SIMPEG I work first as the solution architect. The domain master for personnel is the city's personnel agency, BKPSDM, so that is where the work begins: I learn how personnel administration runs and the regulations behind it, listen to what the agency needs and to what goes wrong for its staff today, and translate that into an architecture.

  • Choosing the technologies the system is built on.
  • Designing a modular architecture and breaking its functions into separate modules.
  • Designing how it is deployed and operated.
  • Dividing the work across the team: quality assurance, backend developers, a UI developer, DevOps and DevSecOps.
  • Reviewing what quality assurance and DevSecOps find, and feeding the fixes back into the architecture and into the team's workflow.

Alongside that I am part of the team as a backend engineer, on the module where a mistake would cost the most: the main API that every other part of the system depends on.

The challenge

A city government employs thousands of civil servants across dozens of agencies, and almost everything about them is governed by regulation: their pay, their salary steps, their promotions, their retirement age, the structure of the agency they work in. The city already had a personnel system, built by another team, but its data had never been held to a standard and many of its rules had been written into code years earlier and had quietly gone out of date.

The new system had to bring that data across without losing it, apply the rules as they stand on any given date rather than as they stood when someone last edited the code, and serve three very different groups at once — employees looking after their own records, administrators in each agency, and the personnel office that oversees them all — each seeing only their own part of the organisation.

What it does

A. Lets employees look after their own records

Every employee has a portal on the phone and the desktop: their profile, family, career and competence history, and what needs their attention. They change their data by proposing a change with its supporting documents, follow each proposal until it is approved or returned, and open salary-step, promotion and retirement services with the documents each one requires.

B. Gives administrators the complete record

Administrators keep personal data, placements, families and more than twenty kinds of career history, review employees' proposals, take salary-step, promotion and retirement cases through their decisions, and receive a draft decree whose every figure comes from the records.

C. Keeps the organisation as it was on any date

Each agency's structure and position map belongs to the regulation that set it and takes effect on its own date. The whole government can be drawn as it stood on any day, and the number of people in each position is calculated from their appointments.

D. Applies rules taken from regulations

Salary tables are kept per regulation with their effective dates, retirement age comes from the position held, and a person's legal status changes automatically when the events the regulations define begin and end.

E. Scopes every piece of access

Access is granted as a role at a scope — the whole city, one agency, or one unit such as a school — requested and approved by different people, limited in time, and following the national civil-service agency's circular on managing access to personnel systems.

F. Reports, reminds and invites

Reports cover the employee list, the seniority list, recapitulations, staffing and more, each filtered by the reader's scope. Reminders of upcoming due dates go out by e-mail, and invitations to create an account are sent in daily batches.

G. Verifies identities and has documents signed

An account holder's identity is verified with their identity card and a live face challenge. Documents that need a signature are signed on Aurograf, the city's digital signature platform, with SIMPEG as one of its external clients.

H. Brings the old data across

Records from the previous system are imported phase by phase from a read-only copy, repeatably, with a report of every problem found and no personal data in that report.

Standards it follows

StandardWhat it guarantees hereWhere it lives
OAuth 2.0 and OpenID Connect, with PKCEsign-in through an external single sign-on without a client secret in the browserCore API, Web App
JSON Web Tokensone token format every service can verify on its ownCore API
TOTP (RFC 6238)two-factor authentication with any authenticator appCore API, Web App
Presigned URLs, AWS Signature Version 4files move between browsers and storage without passing through the coreOSW
W3C Trace Context and OpenTelemetryone trace from the user's request through every serviceevery module
ISO 8583 and ISO 4217every amount is an integer in the currency's minor unitCore API, Web App
National civil-service circular on access managementaccess requested and approved, the verifier is not the approver, grants last at most two yearsCore API
Civil-service regulations on pay, rank, retirement and allowanceseach rule applied is the one in force on the date in questionCore API
WAI-ARIAnavigation that announces the current page and has touch targets large enough for a phoneWeb App
The standards SIMPEG complies with, what each one guarantees, and the module that carries it.

How it is built

SIMPEG is a core API and a web application surrounded by specialised services, each with its own version and release cycle. The core holds the personnel rules and data; storage, regional data, the face challenge and document previews are reusable modules I also use in other projects; and signing is handed to the city's signing platform.

Employees and administrators use the Web App, which talks to the Core API; the Core API uses storage, regions, face and preview services, sends documents to the Aurograf signing platform, sends logs and traces to the log stack, and imports from the old system
One core and one interface, four reusable services, an external signing platform, and the old system as a read-only source.

The core API: employee records and histories, proposals, services and decisions, rules from regulations, the organisation chart and scoped access.

The web application employees and administrators work in.

The storage service every document and attachment passes through.

The regional data service behind every address.

The live face challenge used during identity verification.

The renderer that gives every uploaded document its preview.

The city's signing platform, on which SIMPEG's documents are signed.

How it is delivered and operated

Every module runs as its own container stack with a versioned image, so the core, the interface and each service can be released on their own schedule. The trace of every request is collected in one place together with the logs, so a question about any record or any slow screen can be answered from evidence. The move from the old system is itself part of operations: the import runs in phases that can be repeated safely as the old system keeps changing until the switch.

Where every trace and log of the platform ends up.

Key decisions

Reuse what already exists. Storage, regional data, the face challenge and document previews are modules I built to be shared between projects, so SIMPEG uses them as they are rather than growing its own copies. The personnel system only contains what is truly about personnel.

Signing belongs to the signing platform. The city already runs a digital signature platform with its own chain of trust. SIMPEG does not hold certificates or sign anything itself: it registers each signing stage with that platform as an external client, and receives the signed document back.

The old data comes across in phases. The previous system's database is read without ever being written to, each phase can be run again safely, and every problem is reported rather than silently fixed or allowed to stop the import.

Rules come from the regulations themselves. I read the regulations rather than copy the old system's behaviour; what a regulation changes is stored as data with its effective date, and the code that applies it names the regulation it implements.

Money has one convention. Every amount, from a salary table to a decree, is an integer in hundredths of a rupiah, the same convention I use in every system I build.

The organisation chart stays relational and versioned. The chart is master data for employees, positions and access, so it lives in the same relational database, in versions that each agency adopts on its own date.

Access follows the organisation and the national guidance. Each grant names its scope, is requested and approved by different people, and ends on its own.

Employees change their own data, and a reviewer approves it. Rather than administrators typing every change, employees propose corrections with their documents, through the same validation an administrator's edit goes through, and a reviewer decides. The people who know the facts best enter them, and nothing reaches the record unchecked.

History

SIMPEG replaces an older personnel system built by another team, which now serves only as the source of the data being brought across. My work on the new system began in 2023, and its current generation — a new Laravel core and a new Vue interface — was rebuilt by the team to my design, with the core API written by me.

Status

SIMPEG is in development and the work is ongoing. This page will grow with it as new parts of the system are released.

Terms

Agency
A department of the city government, such as an education or health office, with its own structure and employees.
Personnel office
The city's office that oversees civil servants across every agency and operates the system day to day.
Salary step
The periodic increase in a civil servant's basic salary that follows from their years of service in a rank.
Decree
The official document that records a decision about an employee, such as a new salary step.
Single sign-on
One account that lets a person sign in to many applications without a separate password for each.

Technologies covered

  • PHP
  • Python
  • Rust
  • TypeScript
  • Laravel
  • Vue
  • Elasticsearch
  • PostgreSQL
  • Redis
  • Docker
  • Kibana
  • OpenTelemetry
  • ISO 8583

About the author

Photo of Romi Fadli

Romi Fadli, S.Kom.

Solution Architect · Backend Engineer · Embedded Systems

In my day job I work as a solution architect. I design the system, lead the team that builds it — quality assurance, backend developers, a UI developer, DevOps and DevSecOps — and write the most critical modules myself, such as a certificate authority, a long-term PDF signer, and the core API of a personnel system.

I work across the whole stack that a running system actually needs. On the hardware side that means PCB design, microcontrollers, and embedded firmware — including RISC-V boards running FreeRTOS and Embassy, speaking MQTT over mutually authenticated TLS on a microcontroller with 64 KB of SRAM.

Most of my day-to-day work is software: Rust backends and API modules built on Clean Architecture, an OAuth2/OpenID Connect authorization server written from scratch, PAdES document signing, and certificate authorities — root CAs, timestamping authorities, and OCSP responders. I also build the frontends that sit on top of them.

Running all of that means infrastructure: Docker Compose stacks, networking, Mikrotik and RADIUS, observability with OpenTelemetry, and a steady habit of writing command-line tools and utilities for Linux when the existing ones do not fit.

Share

Enjoyed this?

Get an email when a new article is published.

Related Articles

One definition in the middle feeds both a phone layout with stacked cards and a bottom bar, and a desktop layout with a top menu and a table

The Vue browser application of a civil-service personnel system: a self-service portal where employees keep their records and propose changes, and administration of a versioned organisation chart, reference data and accounts — built from a few shared definitions, not a page per record.

9 min read Read more →
The core API at the centre, fed by storage, address, face and preview services, with documents sent across a boundary to an external signing platform

The Laravel core of a civil-service personnel system: employee records and career histories, self-service proposals with review, salary-step, promotion and retirement decisions, rules taken from regulations, a versioned organisation chart, and access scoped down to a single unit.

11 min read Read more →