InternHunter is a CLI-centric desktop application which aids university students in applying for tech internships. It lets users manage their own customisable collection of companies, internships, internship applications and their own user profile, so that they can keep track of internships that they are interested in.

It has a GUI created with JavaFX. It is written in Java, and has about 35k LoC.

Summary of contributions

  • Code contributed: RepoSense link

  • Features and Enhancements implemented:
    • Match Command (Pull request #217)
      • What it does: Generates a list of matching internships.
      • Highlights: A key feature in our application, this command was the most challenging command to implement in our application since it does not only deal with CRUD features. This command filters down the list of internships that matches the users’ skills in the profile. Implementation of this command required a thorough consideration of design alternatives, since it required both the company and profile lists to interact with each other. Keen insight on the types of algorithms needed was also required to allow more accurate matching.
    • Delete an internship (Pull request #140)
      • What it does: Deletes an internship from the internship list.
      • Highlights: This command was particularly tricky to implement, since deleting an internship would mean that any application linked to this internship has to be deleted as well. Difficulty comes in since internship does not have any association nor dependency to the application item. Therefore, the deletion has to be done through the model instead and there is a need to create additional methods to delete an application that corresponds to this internship.
    • Apply for an internship (Pull request #132)
      • What it does: Selects an internship from a company and adds it to the list of applications.
      • Highlights: This command required careful parsing of the input since an internship can only be accessed through a company in the company list. Thus double indexing was required for the user to reference the internship and add it into the application list. Moreover, all internship applications also come with a date, which required proper parsing so that user matches to the date formats accepted in our app.
    • Added Item, ItemList and UniqueItemList classes (Pull request #98)
      • Justification: By adding the idea of a general Item class and the generic Item lists, it paved the way for the general code structure of our application, as this helped to greatly reduce code duplication and allowed for smooth interaction between the 4 data types in the model, logic and storage component.
    • View an application (Pull request #152)
      • What it does: Allows the user to view an application in full detail
    • Delete an application (Pull request #140)
    • Update an application (Pull request #152)
    • Created and maintained the ApplicationItem and InternshipItem classes and fields in the model. (Pull request #98)
    • Refactor the code to match application (Pull request #284)
    • Created general wrapper regex classes for items in the model (Pull request #126)
    • Created GeneralParserUtil to hold common parsing methods for all classes (Pull request #152)
    • Contributed significantly to improving the test coverage (Pull requests #156, #169, #180, #192, #220, #341 #355)
  • Documentation:
    • User Guide:
      • Added documentation for all commands in application, i.e. add, delete, edit, view, find, list. (Pull requests: #78, #125)
      • Added documentation for match internships command (Pull requests: #282)
    • Developer Guide:
      • Added implementation details and UML diagrams for Command implementation (Pull request #214)
      • Added implementation details and UML diagrams for Logic component (Pull request #276)
      • Added implementation details and UML diagrams for Match Command feature (Pull request #282)
      • Added glossary section and some use cases (Pull request #85)
  • Team-based tasks:
    • Update readme and landing page (Pull requests #81, #162)
    • Setup codecov for the team so that we can track our code coverage and work on remaining tests (Pull request #60, #357)
    • Setup codacy for the team so that we can track our code quality (Pull request #397)
    • Managed the issue tracker (Link to the 70 issues I created) and milestones on GitHub
  • Community: