Full Stack Developer, FPT Software (2024) | Kevin Lan

FPT Banner

Overview

I worked in a small project team at FPT Software to complete a visa-management platform for a client. I was the core frontend developer and led many of the initial design decisions. There were also several significant backend contributions I made alongside a senior Java Spring Boot developer.

My key contributions

Here are some of the things I helped deliver over the 5 month span:

  • Built out the application frontend using Redux, Axios, Vite, and Ant Design. Converted over 200 Figma mockups into pixel-perfect interfaces
  • Streamlined frontend development by designing a custom UI component library from scratch using React & CSS Modules
  • Introduced a secure Node.js proxy server with encryption, JWT management, and session caching, which strengthened security by preventing client applications from interacting with the core API server
  • Automated a key client workflow by developing a PDF parsing/autofilling tool using Apache PDFBox capable of extracting data from both raw and XFA-based PDFs. Integrated with an email webhook, handling 1,000+ forms daily

FPT Mockup

Document & Form Processing

Our client receives thousands of emails per day, and all are funneled into the application for processing. I worked on a document/form extraction pipeline that detected PDF attachments from emails using the Gmail API and parsed them using Apache PDFBox (a free and open-source tool). The parsed form data then had to be matched to an existing user by name. Forms were split into two categories:

  1. XFA forms - These are dynamically filled using Adobe Acrobat and can be easily extracted programmatically
  2. Raw PDFs - These are PDFs generated by one of our client’s services and embed text directly into the PDF

The challenge with raw PDFs is that there is no extractable structure of key-value pairs unlike XFA forms. In addition, these forms had embedded images that also had to be extracted.

FPT 1

My solution for extracting images from raw PDFs was to use the existing layout of the embedded images and extract them based on a fixed width, height, xOffset, and yOffset within the pages. This made sense because of the fixed layout of the forms. Plus, extracting images dynamically with OCR was outside our budget anyway.

As for form fields, we also used the fixed form layout to extract fields using regex. A future improvement could be to use LLM image parsing, if budget allows.

Other cool features

Dynamic Tables

Custom-built table component supporting dynamic row resizing, pagination, searching, filtering, selection, and more. Having a reusable custom table component was key to iterating quickly over several dashboard pages that required displaying lots of tabular data. The table behavior logic is isolated from the UI look and styling in order to achieve a proper headless table component, inspired by Tanstack Table

FPT 1

Email template editing

Added an email template editor into our app to allow admins to directly edit system emails using a rich text editor.

FPT 1

Deployment

The app is deployed on Azure VMs (Ubuntu) and containerized using Docker. A deployment script abstracted away many Docker commands and allowed us to easily push/pull images, revert versions, and tail the deployed server logs.