Back to Projects

Full-Stack & Cloud Platform

ReceiptHub

An intelligent expense and reimbursement platform with automated OCR receipt parsing, Telegram Bot submissions, and a Spring Boot management dashboard.

Project Overview

Developed for NTU's Internet & Web Applications Development module (IN6206), ReceiptHub digitizes corporate expense workflows. Employees snap receipt photos via Telegram Bot with automated OCR extraction, while finance administrators review, audit, and approve claims through a secure Spring Boot and Thymeleaf dashboard with event-driven notifications.

Key Architecture & Contributions

  • Built an event-driven Spring Boot 3 (Java 21) backend with asynchronous Spring Events for real-time Telegram notifications.
  • Integrated OCR.space API with Resilience4j circuit breakers for resilient automated receipt text extraction.
  • Implemented S3-compatible cloud storage with MinIO and containerized the multi-service stack using Docker Compose.
  • Configured role-based access control (ADMIN/EMPLOYEE), CSRF protection, and session security using Spring Security.
  • Engineered responsive, server-rendered web dashboards using Thymeleaf, Tailwind CSS, and MySQL persistence.
ReimbursementService.java
Source Preview
@Service
@RequiredArgsConstructor
public class ReimbursementService {
    private final ReimbursementRequestRepository repository;
    private final ApplicationEventPublisher eventPublisher;

    @Transactional
    public ReimbursementRequest reviewRequest(Long id, Long adminId, RequestStatus status, String notes) {
        ReimbursementRequest req = repository.findById(id)
            .orElseThrow(() -> new EntityNotFoundException("Request not found"));
        
        req.setStatus(status);
        req.setReviewNotes(notes);
        req.setReviewedBy(adminId);
        req.setReviewedAt(LocalDateTime.now());
        
        ReimbursementRequest saved = repository.save(req);
        eventPublisher.publishEvent(new ReimbursementReviewedEvent(saved));
        return saved;
    }
}