Project: CANdidates

CANdidates is a powerful contact management desktop app optimised for job recruiters to manage job applicants.

The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 25 kLoC.

Given below are my contributions to the project.

  • New Feature: find can
    • What it does: Searches the candidate list for all candidates with fields containing all the specified keywords.
    • Justification: This feature improves the product significantly because a typical job recruiter has many candidates to handle, this feature will provide a convenient way for them to look for suitable candidates and streamline their search.
    • Highlights: This enhancement was challenging as it requires chaining of various predicates to achieve the desired outcome. An in-depth understanding of the code base is required it involves numerous other classes.


  • New Feature: find job
    • What it does: Searches the job list for all jobs with fields containing all the specified keywords.
    • Justification: This feature improves the product significantly because a typical job recruiter has many job listings to handle, this feature will provide a convenient way for them to look for suitable jobs and streamline their search.
    • Highlights: This enhancement was challenging as it requires chaining of various predicates to achieve the desired outcome. An in-depth understanding of the code base is required it involves numerous other classes.



  • Project management:
    • Managed release v1.2, v1.2.1, v1.3 (3 releases) on GitHub.
    • Ensured that project deliverables are done on time and in the right format.
    • In charge of versioning of the code, maintaining the code repository, integrating various parts of the software to create a whole.


  • Enhancements to existing features:
    • Implemented adding of candidates and jobs (Pull requests #85)
    • Implemented listing of candidates and jobs #87
    • Implemented the chaining of multiple search predicates #137
    • Wrote numerous utility classes for the purpose of testing (examples: #85, #87)
    • Wrote additional tests for existing features to increase code coverage by 12.16% (examples: #93, #126, #126, #138)
    • Forced the application to fail gracefully when data files are corrupted #269


  • Documentation:
    • Readme:
      • Maintained the readme regularly to match the project (examples: #36, #261)
    • User Guide:
      • Added documentation for the features add can and add job (examples: #118, #261)
      • Updated the feature help (examples: #118, #261)
    • Developer Guide:
      • Added documentation for the features add can and add job (examples: #134, #261)
      • Updated the design for the Storage component (examples: #134, #261)
      • Updated the redo can/undo can and redo job/undo job feature under proposed implementation #261
      • Update the Manual Testing section #309
    • Demonstration Video:


  • Community:
    • Contributed to forum discussions #68
    • Reported bugs and suggestions (examples: #247, #249, #252)
    • Reported bugs for and gave suggestions to other teams in the class (examples: PE Dry Run)


  • Tools:
    • Integrated the code coverage badge to the team repo #93