Project: NeoBook

NeoBook is a desktop application for NUS students to better manage their contacts and the events they have scheduled with them. The user interacts with it using a CLI, and it has a GUI created with JavaFX.

Given below are my contributions to the project.

  • New Feature: Added the ability to switch between UI tabs (PR #105).
    • What it does: allows the user to switch between the Address Book, Events, and Me tabs using the tab command.
    • Justification: clicking the buttons in the tab bar requires the user’s hands to leave the keyboard; the tab command alleviates this by duplicating the functionality in the command line.
    • Highlights: this feature integrates two types of input methods, necessitating a single source of truth in the model for a cohesive user experience.
  • New Feature: Added light and dark modes (PR #129)
    • Justification: most contemporary applications have light and dark modes.
    • Highlights: this feature required extensive use of CSS variables to propagate the theme colours throughout the UI.
  • Code contributed: RepoSense.

  • Project management:
    • Initialised team organisation and tP repository
    • Created PR to the module’s master branch
    • Enabled issue tracker and GitHub Actions (for CI and codecov)
    • Maintained the issue tracker and milestones
    • Set up and adapted the project website for NeoBook
    • Triaged issues from PE-D
  • Enhancements to existing features:
    • Redesigned the GUI
      • Changed the layout (PRs #39, #56, #57, #59, #62, #74, #87, #96, #107, #131).
      • Split the single contacts list panel into list and details panels to accommodate the increased number of information fields without cluttering the list.
      • Moved the command box and result display to the bottom of the window, borrowing familiarity from popular desktop messaging applications.
      • Added a tabbed view for the events and “me” panels to avoid cluttering the screen space, while borrowing familiarity from the widely used Outlook desktop client.
      • Added a system of CSS styling options to increase code reuse.
        • Labels have a series of font sizes (h1..h6, p).
        • Paddings have predefined styling (e.g., pt for top padding, pa-l for “all except left” padding).
        • The backgrounds for labels and panes have 3 colour types: normal, accented, and muted. Generally, muted is used for background components, while accented is used in components containing information useful to the user.
    • Enhanced the help window with the list of all commands (PR #181).
      • The list uses the MESSAGE_USAGE from each of the commands, making it consistent with the help messages that show up in the result display.
    • Added extensive testing for new models and command parsers (PRs #271, #272).
      • Improved code coverage by ~10%.
      • Fixed several correctness bugs.
  • Documentation:
  • Community:
  • Tools:
    • Integrated a third party library (CalendarFX) to the project (PR #122), but subsequently removed it due to bugs and usability issues.