Hey there, future interns! Since you are here, we assumed that you are also a student, like us, who is starting your internship search.
Welcome to InternBook, your go-to companion in the exciting journey of applying for internships!
Who Are We? 🤝
We are a dynamic team of five students who have been in your shoes, feeling the struggle of juggling multiple internship
applications while trying to keep track of every detail. We get it - those Excel spreadsheets might seem like a good idea
@@ -65,43 +65,43 @@
Ensure you have Java 11 installed in your computer. If you do not have it installed, download it from here.
Not sure if you have Java 11 downloaded, here's how to check.
Copy the file to the folder you want to use as the home folder for your InternBook.
💡 TIP: Create a folder with internBook.jar so that the data files created will be stored in the same folder.
Check our FAQ to see how to open it in your terminal.
Open a command terminal, cd into the folder you put the jar file in, and use the java -jar internBook.jar command to run the application.
💡 TIP:
-If you are struggling to figure out the path to cd into, you can use the File Explorer in your OS to copy the file path and directly cd to that.
Alternatively, you can simply navigate to the file location the File Explorer and double-click on the application to run.
A GUI similar to the one displayed below should appear in a few seconds. Note how the app already contains some sample data.
Try out a command!
+If you are struggling to figure out the path to cd into, you can use the File Explorer in your OS to copy the file path and directly cd to that.
Alternatively, you can simply navigate to the file location the File Explorer and double-click on the application to run.
A GUI similar to the one displayed below should appear in a few seconds. Note how the app already contains some sample data.
Try out a command!
For instance, typing help and pressing Enter will open the help window.
You can also try out the following commands:
list : Lists all contacts.
add -n Company -e company@gmail.com -t Role: Adds a company contact with name Company, email company@gmail.com and tag Role.
delete 1 : Deletes the contact with index 1.
exit : Exits the app.
Refer to the Features below for details of each command.
Features
Notes about the command format:
Words in UPPER_CASE are the inputs to be supplied by the user.
e.g. in add -n COMPANY, COMPANY is the input which can be used as add -n DBS.
Fields in square brackets are optional.
e.g -n COMPANY [-p PHONE_NUMBER] can be used as -n DBS -p 61234567 or as -n DBS.
Field with … after them can be used multiple times.
e.g. -t TAG… can be used as -t Software Engineer, -t Software Engineer -t Data Analyst etc.
Fields can be in any order.
e.g. if the command specifies -n COMPANY -t Software Engineer, -t Software Engineer -n COMPANY is also acceptable.
Extraneous parameters for commands that do not take in inputs (such as help, list, exit and clear) will be ignored.
-e.g. if the command specifies help 123, it will be interpreted as help.
❗️ Important: Dates will only show in the GUI if both start date and end date are present.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
Viewing help : help
Shows a pop-up window of our user guide for easier access.
Names should only have alphanumeric characters and spaces
Email
Compulsory
-e
Emails should be of the format local-part@domain and adhere to the following constraints: 1. The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-). The local-part may not start or end with any special characters. The local-part may not have consecutive special characters. 2. This is followed by a '@' and then a domain name. The domain name is made up of domain labels separated by periods. The domain name must: - end with a domain label at least 2 characters long - have at least 2 domain labels separated by a dot (.) - have each domain label start and end with alphanumeric characters - have each domain label consist of alphanumeric characters, separated only by hyphens, if any.
Tag (Can be used as roles)
Compulsory
-t
Multiple tags are allowed Tags should only have alphanumeric characters and "/" Tags should not start or end with "/" Tags are case insensitive and the first alphabet of each word will be capitalised
Phone
Optional
-p
Phone numbers should be 3 or more digits
Start Date
Optional
-d1
Dates should be in the form YYYY-MM-DD Start date must be earlier than or equals to end date
End Date
Optional
-d2
Dates should be in the form YYYY-MM-DD End date must be later than or equal to start date
add -n Tiktok -t Data Analyst -e tiktok@example.com -p 61234567 -t AI Engineer
ℹ️ Remark:
We allow the adding of duplicate companies with different start dates and end dates.
This is fully intended and not a bug as this can allow users to keep track of different application windows of the same role in the same company.
Check out our FAQ to understand how we distinguish duplicate entries.
Start date can be added without the end date, and vice versa. However, when either dates are not entered, the record will
-not show the dates. As shown below.
Here are the steps to add a company with examples of error messages and how to deal with them:
Error: Incorrect email format.
-
+e.g. if the command specifies help 123, it will be interpreted as help.
❗️ Important: Dates will only show in the GUI if both start date and end date are present.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
Viewing help : help
Shows a pop-up window of our user guide for easier access.
Names should only have alphanumeric characters and spaces
Email
Compulsory
-e
Emails should be of the format local-part@domain and adhere to the following constraints: 1. The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-). The local-part may not start or end with any special characters. The local-part may not have consecutive special characters. 2. This is followed by a '@' and then a domain name. The domain name is made up of domain labels separated by periods. The domain name must: - end with a domain label at least 2 characters long - have at least 2 domain labels separated by a dot (.) - have each domain label start and end with alphanumeric characters - have each domain label consist of alphanumeric characters, separated only by hyphens, if any.
Tag (Can be used as roles)
Compulsory
-t
Multiple tags are allowed Tags should only have alphanumeric characters and "/" Tags should not start or end with "/" Tags are case insensitive and the first alphabet of each word will be capitalised
Phone
Optional
-p
Phone numbers should be 3 or more digits
Start Date
Optional
-d1
Dates should be in the form YYYY-MM-DD Start date must be earlier than or equals to end date
End Date
Optional
-d2
Dates should be in the form YYYY-MM-DD End date must be later than or equal to start date
add -n Tiktok -t Data Analyst -e tiktok@example.com -p 61234567 -t AI Engineer
ℹ️ Remark:
We allow the adding of duplicate companies with different start dates and end dates.
This is fully intended and not a bug as this can allow users to keep track of different application windows of the same role in the same company.
Check out our FAQ to understand how we distinguish duplicate entries.
Start date can be added without the end date, and vice versa. However, when either dates are not entered, the record will
+not show the dates. As shown below.
Here are the steps to add a company with examples of error messages and how to deal with them:
Correction: Remove non-alphanumeric characters, except "/". However, it should not begin or end with "/". We apologise
+
Correction: Remove non-alphanumeric characters, except "/". However, it should not begin or end with "/". We apologise
for the confusing error message and have reported it under known issues.
Edits the company at the specified INDEX. The index refers to the index number shown in the displayed intern book. The index must be a positive integer 1, 2, 3, …
At least one of the optional fields must be provided.
Only the fields provided will be updated i.e fields not provided will retain their original value.
When editing tags, the existing tags of the company will be removed i.e adding of tags is not cumulative.
Field
Optional/Compulsory
Flag
Remarks
Company Name
Optional
-n
Names should only have alphanumeric characters and spaces
Email
Optional
-e
Emails should be of the format local-part@domain and adhere to the following constraints: 1. The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-). The local-part may not start or end with any special characters. The local-part may not have consecutive special characters. 2. This is followed by a '@' and then a domain name. The domain name is made up of domain labels separated by periods. The domain name must: - end with a domain label at least 2 characters long - have at least 2 domain labels separated by a dot (.) - have each domain label start and end with alphanumeric characters - have each domain label consist of alphanumeric characters, separated only by hyphens, if any.
Tag (Can be used as roles)
Optional
-t
Multiple tags are allowed Tags should only have alphanumeric characters and "/" Tags should not start or end with "/"b
Phone
Optional
-p
Phone numbers should be 3 or more digits
Start Date
Optional
-d1
Dates should be in the form YYYY-MM-DD Start date must be earlier than or equal to end date
End Date
Optional
-d2
Dates should be in the form YYYY-MM-DD End date must be later than or equal to start date
Examples:
edit 1 -p 91234567 -e dbs_hr@example.com Edits the phone number and email address of the 1st company in the currently displayed list to be 91234567 and dbs_hr@example.com respectively.
edit 2 -n Meta -t Engineer Edits the name of the 2nd company to be Meta and change the tags to Engineer only.
Here are the steps to edit the fields of a company:
Edits the company at the specified INDEX. The index refers to the index number shown in the displayed intern book. The index must be a positive integer 1, 2, 3, …
At least one of the optional fields must be provided.
Only the fields provided will be updated i.e fields not provided will retain their original value.
When editing tags, the existing tags of the company will be removed i.e adding of tags is not cumulative.
Field
Optional/Compulsory
Flag
Remarks
Company Name
Optional
-n
Names should only have alphanumeric characters and spaces
Email
Optional
-e
Emails should be of the format local-part@domain and adhere to the following constraints: 1. The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-). The local-part may not start or end with any special characters. The local-part may not have consecutive special characters. 2. This is followed by a '@' and then a domain name. The domain name is made up of domain labels separated by periods. The domain name must: - end with a domain label at least 2 characters long - have at least 2 domain labels separated by a dot (.) - have each domain label start and end with alphanumeric characters - have each domain label consist of alphanumeric characters, separated only by hyphens, if any.
Tag (Can be used as roles)
Optional
-t
Multiple tags are allowed Tags should only have alphanumeric characters and "/" Tags should not start or end with "/"b
Phone
Optional
-p
Phone numbers should be 3 or more digits
Start Date
Optional
-d1
Dates should be in the form YYYY-MM-DD Start date must be earlier than or equal to end date
End Date
Optional
-d2
Dates should be in the form YYYY-MM-DD End date must be later than or equal to start date
Examples:
edit 1 -p 91234567 -e dbs_hr@example.com Edits the phone number and email address of the 1st company in the currently displayed list to be 91234567 and dbs_hr@example.com respectively.
edit 2 -n Meta -t Engineer Edits the name of the 2nd company to be Meta and change the tags to Engineer only.
Here are the steps to edit the fields of a company:
Input: edit 1 -n Amazon
Before:
After:
Input: edit 1 -e alphabet@example.com
Before:
After:
Input: edit 1 -t UI/UX Designer
Before:
After:
Input: edit 1 -p 91234567
Before:
After:
Input: edit 1 -d1 2024-04-15 -d2 2024-05-01
Before:
After:
💡 TIP:
When editing the dates of an application, it is recommended to edit both start and end dates.
If only one of the date is edited, and the record is not showing anything, please refer to our FAQ.
Locating companies and tags by keywords: find
Finds companies whose names or tags begin with the given keyword.
Format: find KEYWORD
The search is case-insensitive. e.g Google will match google
The order of the keyword matters. e.g. Software Engineer will not match Engineer Software
Only the name and tags are searched.
The result screen will display all the tags and names that match the keyword.
e.g. Software will return a Company with name Software XYZ as well as a Company with tag Software Engineer.
Only Companies/Tags or its words beginning with the keyword will be returned.
e.g. Test will return Test Engineer or QA Tester, but not QATester.
If there is a space in the keyword, it searches for a substring that matches with the whole word
-e.g. Software Engineer will return Software Engineering but not Software Developer or Staff Engineer.
Examples:
find Google returns google and Google
find software returns Software Company and companies with tags matching software
Deleting a company : delete
Deletes the specified company from the InternBook.
Format: delete INDEX
Deletes the company at the specified INDEX.
The index refers to the index number shown in the currently displayed intern book.
The index must be a positive integer 1, 2, 3, …
Error messages will be displayed when:
+e.g. Software Engineer will return Software Engineering but not Software Developer or Staff Engineer.
Examples:
find Google returns google and Google
find software returns Software Company and companies with tags matching software
Deleting a company : delete
Deletes the specified company from the InternBook.
Format: delete INDEX
Deletes the company at the specified INDEX.
The index refers to the index number shown in the currently displayed intern book.
The index must be a positive integer 1, 2, 3, …
Error messages will be displayed when:
The index is out of bounds.
Examples:
delete 2 deletes the 2nd company in the intern book.
find Google followed by delete 1 deletes the 1st company in the results of the find command.
💡TIP:
If you know what company you want to delete, you should search for it by using find COMPANY, followed by delete INDEX
instead of going through all entries to look for the company.
Marking a company : mark
Marks the specified company as applied.
Format: mark INDEX
Marks the company at the specified INDEX as applied.
The index refers to the index number shown in the currently displayed intern book.
The index must be a positive integer 1, 2, 3, …
Error messages will be displayed when:
-
The company at the specified INDEX is already marked.
The index is out of bounds.
Examples:
mark 2 marks the 2nd company in the listed intern book if it is unmarked.
find Google followed by mark 1 marks the 1st company in the results of the find command, if it is unmarked.
💡 TIP:
+
The company at the specified INDEX is already marked.
The index is out of bounds.
Examples:
mark 2 marks the 2nd company in the listed intern book if it is unmarked.
find Google followed by mark 1 marks the 1st company in the results of the find command, if it is unmarked.
💡 TIP:
After applying to a company, you should find COMPANY then mark INDEX instead of going through all entries to look
for the company.
Unmarking a company : unmark
Marks the specified company as not applied.
Format: unmark INDEX
Marks the company at the specified INDEX as not applied.
The index refers to the index number shown in the currently displayed intern book.
The index must be a positive integer 1, 2, 3, …
Error messages will be displayed when:
-
The company at the specified INDEX is already unmarked.
The index is out of bounds.
Examples:
unmark 2 unmarks the 2nd company in the listed intern book if it is marked.
find Google followed by unmark 1 unmarks the 1st company in the results of the find command, if it is marked.
Sorting the list : sort
Sorts the list in specific order.
Format: sort PREF
Sorts the company with the given PREF.
PREF refers to the preference the user can choose from.
There is currently 3 preference:
-
a - sorts list in ascending alphanumerical order of company name followed by ascending end date (if present)
s - sorts list in ascending order of application start date followed by ascending alphanumerical order
e - sorts list in ascending order of application end date followed by ascending alphanumerical order
Field
Optional/Compulsory
Remarks
Sort Preference
Compulsory
Choose between "a", "s" or "e" to choose sorting preference
Examples:
sort a
sort s
sort e
ℹ️ Remarks:
After sorting by start date or end date, if you notice that there are companies without dates displayed interspersed
+
The company at the specified INDEX is already unmarked.
The index is out of bounds.
Examples:
unmark 2 unmarks the 2nd company in the listed intern book if it is marked.
find Google followed by unmark 1 unmarks the 1st company in the results of the find command, if it is marked.
Sorting the list : sort
Sorts the list in specific order.
Format: sort PREF
Sorts the company with the given PREF.
PREF refers to the preference the user can choose from.
There is currently 3 preference:
+
a - sorts list in ascending alphanumerical order of company name followed by ascending end date (if present)
s - sorts list in ascending order of application start date followed by ascending alphanumerical order
e - sorts list in ascending order of application end date followed by ascending alphanumerical order
Field
Optional/Compulsory
Remarks
Sort Preference
Compulsory
Choose between "a", "s" or "e" to choose sorting preference
Examples:
sort a
sort s
sort e
ℹ️ Remarks:
After sorting by start date or end date, if you notice that there are companies without dates displayed interspersed
between companies with their dates displayed, please refer to our FAQ.
After adding an application or editing the dates of an application, the sort command has to be run again,
for it to be sorted.
Setting reminders : reminder
Set the number of days until the end date of an application and receive reminders about approaching deadlines.
A separate reminder window as shown below, will pop up the next time you launch the app. Companies, whose end date is NUMOFDAYS away from current
-date, and have yet to be marked as applied, will show up.
Format: reminder -r NUMOFDAYS
Save your preference into preferences.json file.
The applications are sorted according to ascending end dates.
The NUMOFDAYS must be a positive integer or "off" to turn off the reminder
Field
Optional/Compulsory
Flag
Remarks
Reminder Period
Compulsory
-r
Reminder period should be a positive integer or "off" to turn off the reminder
The off is case-insensitive. e.g reminder -r OFF works too.
Examples:
reminder -r 7
reminder -r off
Steps to set a reminder:
Input: reminder -r 30
The next time the app is launched, the reminder window will appear.
-
If there are no applications outstanding, the reminder window below is shown.
-
💡TIP:
+date, and have yet to be marked as applied, will show up.
Format: reminder -r NUMOFDAYS
Save your preference into preferences.json file.
The applications are sorted according to ascending end dates.
The NUMOFDAYS must be a positive integer or "off" to turn off the reminder
Field
Optional/Compulsory
Flag
Remarks
Reminder Period
Compulsory
-r
Reminder period should be a positive integer or "off" to turn off the reminder
The off is case-insensitive. e.g reminder -r OFF works too.
Examples:
reminder -r 7
reminder -r off
Steps to set a reminder:
Input: reminder -r 30
The next time the app is launched, the reminder window will appear.
+
If there are no applications outstanding, the reminder window below is shown.
+
💡TIP:
To switch off reminder, simply key reminder -r off.
Clearing all entries : clear
Clears all entries from the intern book.
Format: clear
Exiting the program : exit
Exits the program.
Format: exit
Saving the data
InternBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Editing the data file
InternBook data are saved automatically as a JSON file [JAR file location]/data/internBook.json. Advanced users are welcome to update data directly by editing that data file.
Caution:
If your changes to the data file makes its format invalid, InternBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
Furthermore, certain edits can cause the InternBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.
Future Enhancements
Notes 📔
@@ -119,9 +119,9 @@
In cases where a company's name, phone number, or email address matches existing entries in our system, we prompt the
user to confirm whether they wish to create a new record or append to an existing one.
FAQ
Q: How do I transfer my data to another Computer? A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous InternBook home folder.
Q: How do I check if I am on JDK 11? A: For MAC users, open up your Terminal, and for Windows users, open up your Command Prompt.
Type in java -version and you will see the java version.
Q: How do I navigate to my folder on my terminal? A: For Windows user:
Open Windows File Explorer.
Navigate to the parent folder of the target folder and double-click into it (the folder you want to open a command window into)
-
Click on the file explorer address bar of the folder you are in and copy the File Path (e.g. C:\Users\PC\Downloads\internBook)
+
Click on the file explorer address bar of the folder you are in and copy the File Path (e.g. C:\Users\PC\Downloads\internBook)
and type "cmd" and press enter.
-
For Mac users:
Open Finder.
Navigate to the parent folder of the target folder but do not double-click into it (the folder you want to open a terminal window into)
Right-Click on the folder and hover over Services (At the bottom), Click New Terminal at Folder.
If there is no such option, you will have to go to your Settings > Keyboard > Keyboard Shortcuts... > Services > Files and Folders > Tick New Terminal At Folder
Now try again,
A Terminal at the folder location will pop up.
Q: Why are my dates missing in the GUI? A: Ensure that you have keyed in the start date and end date for the internship application. If only one date is present,
+
For Mac users:
Open Finder.
Navigate to the parent folder of the target folder but do not double-click into it (the folder you want to open a terminal window into)
Right-Click on the folder and hover over Services (At the bottom), Click New Terminal at Folder.
If there is no such option, you will have to go to your Settings > Keyboard > Keyboard Shortcuts... > Services > Files and Folders > Tick New Terminal At Folder
Now try again,
A Terminal at the folder location will pop up.
Q: Why are my dates missing in the GUI? A: Ensure that you have keyed in the start date and end date for the internship application. If only one date is present,
it will not show in the GUI. You can edit them accordingly.
Q: What causes the occurrence of multiple records for companies sharing the same name, email, phone, and tag? A: We apologise for the confusion. Please refer to known issues. Different application records may
be stored if there are distinctions in their name, phone number, email address, start date, end date, or tags. However,
if only the start date or end date is available, those dates won't be displayed, potentially leading to confusion.
Q: Can different companies be tagged to the same email address? A: Yes, it's possible. We permit multiple company names to share the same email address. For instance, consider
@@ -132,7 +132,7 @@
address, tags, start date, and end date as an existing entry. If all these fields matches, the system flags it as a duplicate,
preventing the addition of such an application.
Q: Why do applications with no dates appear between sorted applications by start or end date? A: We apologise for the confusion caused. This occurs because some applications may have only a start date or an end
date entered, causing them not to display any dates. However, when sorting by start date, applications with only a start
-date will also be considered in the sorting process.
Known issues
When using multiple screens, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the preferences.json file created by the application before running the application again.
Only when both start and end dates are present, will the date be shown in the GUI. If only one of the dates is present, the sorts will take them into account while sorting, leading to misleading errors such as the one below.
Only when both start and end dates are present, will the date be shown in the GUI, this allows users to seemingly add in duplicate companies when in fact the start/end dates are different.
Duplicate tags, are allowed to be added into the same company, however they will still only show unique tags.
Error messages for tags, due not account for the fact that tags cannot begin and end with "/".
-
Due to the colour scheme, the text displayed within the command box may be difficult to discern.
-
CommandResult for sort a is not fully accurate. It should state "Sorted all entries in alphanumerical order" instead.
-
reminder -r NUMOFDAYS e.g., reminder -r 7, reminder -r off
Clear
clear
Exit
exit
+date will also be considered in the sorting process.
Known issues
When using multiple screens, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the preferences.json file created by the application before running the application again.
Only when both start and end dates are present, will the date be shown in the GUI. If only one of the dates is present, the sorts will take them into account while sorting, leading to misleading errors such as the one below.
Only when both start and end dates are present, will the date be shown in the GUI, this allows users to seemingly add in duplicate companies when in fact the start/end dates are different.
Duplicate tags, are allowed to be added into the same company, however they will still only show unique tags.
Error messages for tags, due not account for the fact that tags cannot begin and end with "/".
+
Due to the colour scheme, the text displayed within the command box may be difficult to discern.
+
CommandResult for sort a is not fully accurate. It should state "Sorted all entries in alphanumerical order" instead.
+