Skip to content
Back to experience highlights

Experience highlights

IMS

The internal HR platform used across iMedia24, covering time tracking, time off, tasks, benefits, and day-to-day team operations. Kotlin/Spring Boot backend and Next.js frontend, running on GCP.

  • kotlin
  • spring
  • next.js
  • typescript
  • gcp

One reusable bulk-actions framework, adopted across four admin tables.

Simplified workflow

  1. Application features
  2. Pub/Sub events
  3. Notification delivery
Notifications are published as events, keeping notification delivery separate from feature code.

Problem

The platform's notification module was tied into feature code, so adding a new notification type meant touching the features that triggered it. Acting on multiple table rows at once was also handled per screen rather than through a shared mechanism.

My role

I work across the stack on the platform: the Kotlin/Spring Boot backend, the Next.js frontend, and the GitHub Actions deployment path to GCP. I rewrote the notification module and worked on the table bulk actions framework.

Solution

  • Rewrote the notification module on top of Pub/Sub so notifications are published as events rather than sent inline.
  • Built a bulk-actions framework on top of the shared table: a selection column, eligibility rules per action, a confirmation and review dialog, and sequential or batched execution with per-row error reporting.
  • Built backend and frontend features with unit and integration test coverage.
  • Deployed to GCP (Cloud Run, Cloud SQL, Pub/Sub) via GitHub Actions.

Results

  • Notification delivery performance improved after the Pub/Sub rewrite.
  • New notification types can be added without touching feature code.
  • Four admin tables — members, benefit claims, challenge attempts, and on-call reports — now run bulk actions through one shared framework.
Back to experience highlightsContact me