Full-stack Java contributor
DTU × Deloitte

Consultant Matching System

A Java consultant-matching application built with Deloitte, combining LLM-assisted matching, layered architecture, and behaviour-driven testing.

APPLICATION FLOW01 / INPUTCONSULTANTINFORMATION02 / JAVALAYEREDLOGIC03 / EXTERNALLLM APIINTEGRATION04 / OUTPUTMATCHING+ PDF DOCSCUCUMBER + JUNITDETERMINISTIC TESTSREAL LLM ENDPOINTSINTEGRATION TESTSCONCEPTUAL ARCHITECTURE · NO CLIENT DATA SHOWN
Scroll to inspect the full diagram →
Consultant profile / LLM matching / tested outputArchitecture abstraction

The problem

Make consultant matching useful while keeping the application's architecture inspectable and its algorithmic behaviour testable independently of an external LLM service.

System architecture

  • A full-stack Java application with layered architecture, dependency injection, and SOLID-oriented design.
  • LLM API integration for intelligent consultant matching, with Singleton, Observer, and Strategy patterns used in the system.
  • LaTeX-based PDF export for client-ready documentation and a 12-page technical report covering architecture, testing, patterns, and trade-offs.

Engineering decisions

  • Separate deterministic matching logic from integration paths that call real LLM endpoints.
  • Use design patterns and dependency injection to keep responsibilities explicit across layers.
  • Work in two-week Scrum sprints with GitLab merge requests and code review in a five-person team.

Testing and verification

  • Cucumber and JUnit behaviour-driven tests reached 88% code coverage in the project.
  • Integration tests called real LLM endpoints; deterministic unit tests checked algorithmic correctness separately.

Limitations

  • LLM-dependent matching is subject to external service behaviour; deterministic tests do not prove response quality.
  • The collaboration's repository, report, and client data are not published here.

What I would improve next

  • Add explicit quality evaluation for LLM-assisted matches alongside code coverage.
  • Strengthen failure handling for unavailable or inconsistent external model responses.