← Back to projects

Case Study · System Architecture

Vehicle Inspection & Insurance Management Platform

A full-stack business platform that connects modern web workflows with a long-running legacy insurance system without replacing the existing desktop operation.

My role

Full-stack product development & system architecture

Stack

Angular 17 · NestJS · gRPC · Redis · PostgreSQL · SQL Server · LINE LIFF · Docker

The problem

The business needed a web platform for staff operations and customer self-service, but its existing desktop application and SQL Server data could not simply be removed or rewritten. The challenge was to add modern workflows while keeping the legacy system operating normally.

What I built

I built a hybrid platform with Angular Web and LINE LIFF clients, a NestJS API Gateway, JWT + Redis session handling, and dedicated backend services for customers, policy/tax, LIFF, documents, notifications, and legacy SQL Server access. New application state is persisted through the PostgreSQL service into Neon PostgreSQL, while the legacy service reads the existing SQL Server source of truth without replacing the Delphi Desktop application.

My contributions

  • Designed and implemented hybrid data access between the legacy SQL Server system and new PostgreSQL workflows.
  • Built backend services and gRPC communication across the platform.
  • Implemented customer and vehicle search workflows, including license-plate and province matching with regression tests.
  • Built staff and customer workflows across the web platform and LINE LIFF.
  • Implemented dashboards, insurance/tax workflows, documents, notifications, and branch-aware operations.
  • Added health checks, smoke tests, deployment configuration, and security controls for production use.

Architecture

Key technical decisions

Keep legacy writes untouched

The existing desktop application continues its normal SQL Server writes and updates.

Separate old and new data paths

Legacy information is read through the bridge, while new web workflows use PostgreSQL.

Use gRPC between services

Internal service-to-service communication stays explicit and structured as the platform grows.

Keep the gateway as the API boundary

The frontend and LINE LIFF clients communicate with the NestJS API Gateway, which provides the REST entry point to the backend services.

Challenges & solutions

Legacy system integration

The existing desktop application and SQL Server database were still part of daily operations. I introduced a legacy bridge so the new platform could read existing data without forcing a full rewrite or migration.

Hybrid data flow

Some information remained in SQL Server while new workflows used PostgreSQL. I kept the data paths explicit and separated, then composed the required data at the application layer.

Search across systems

Customer and vehicle searches had to work with legacy records and new data. I implemented hybrid search behavior and added regression tests around license-plate and province matching.

Production operations

The platform needed more than feature development, so I added health checks, smoke tests, deployment configuration, and security controls to make the system easier to operate safely.

Engineering work

  • Hybrid customer and vehicle search across legacy SQL Server and new PostgreSQL data.
  • License-plate and province matching with regression tests for search behavior.
  • Customer and staff workflows through the web platform and LINE LIFF.
  • Dashboards, insurance/tax workflows, documents, notifications, and branch-aware operations.
  • Production-oriented health checks, smoke tests, deployment configuration, and security controls.

Result

The platform gives staff a modern web workspace and gives customers self-service experiences through Web and LINE, while the existing desktop operation and SQL Server data remain usable. The result is a controlled path from legacy infrastructure to modern services without requiring an all-at-once migration.

Product & system views

Dashboard
Dashboard
Staff check-in
Staff check-in
Customer LIFF
Customer LIFF
Customer dashboard
Customer dashboard
Staff LIFF
Staff LIFF
LINE promotion
LINE promotion