diff --git a/lesson_04/ljmcwilliams/README.md b/lesson_04/ljmcwilliams/README.md
new file mode 100644
index 000000000..5ca25dc29
--- /dev/null
+++ b/lesson_04/ljmcwilliams/README.md
@@ -0,0 +1,59 @@
+In this lesson, I explored the differences between Java and JavaScript. Despite their similar names, these languages have distinct features.
+
+- ## Key Differences
+- ### Document Preparation:
+
+ - Java requires preparation before defining variables and functions.
+JavaScript has more flexibility with variable definitions.
+
+- ### User Input:
+
+ - In Java, I used the Scanner class to prompt the user for number input.
+This required importing Java's Scanner class.
+In JavaScript, there is no built-in Scanner class, so I used Node.js as a workaround.
+With Node.js, I utilized process.stdin for input and process.stdout for output (similar to console.log).
+
+- ### Loop Control:
+
+ - Both languages allow for loops to be exited early, but the methods differ:
+In Java, using a break statement within the loop will terminate it.
+In JavaScript, I opted for read.close(), which achieves a similar effect.
+
+- ### Variable Declaration:
+
+ - Java requires explicit declaration of variable types.
+JavaScript automatically assigns variable types.
+- ## Loop Behavior
+Both languages share similarities in loop functionality:
+
+- **For Loops**:
+ - Take three expressions.
+
+- **If Statements**:
+ - Accept a condition and can be nested.
+
+- **Java Example**
+```java
+for (int i = 2; i < userInput; i++) {
+ if ((userInput / i) == (int) (userInput / i)) {
+ System.out.println(userInput + " is not a prime number.");
+ isConditionMet = true;
+ break;
+ }
+ } if (!isConditionMet) {
+ System.out.println(userInput + " is a prime number.");
+ }
+```
+- **JavaScript Example**
+```javascript
+for (let i = 2; i < answer; i++) {
+ if ((answer / i) == parseInt(answer / i)) {
+ console.log(answer + " is not a prime number.");
+ isConditionMet = true;
+ read.close();
+ }
+ } if (!isConditionMet) {
+ console.log(answer + " is a prime number.");
+ read.close();
+ }
+```
\ No newline at end of file
diff --git a/lesson_04/ljmcwilliams/findPrimeNum.java b/lesson_04/ljmcwilliams/findPrimeNum.java
new file mode 100644
index 000000000..3b588aae5
--- /dev/null
+++ b/lesson_04/ljmcwilliams/findPrimeNum.java
@@ -0,0 +1,32 @@
+import java.util.Scanner; //This allows us to use the scanner to take in user input
+public class findPrimeNum {
+ public static void main(String[] args) {
+ Scanner objScanner = new Scanner(System.in); //A scanner named 'objScanner'
+ boolean isConditionMet = false;
+
+ /*if the condition is met, the print statement within the loop will be printed.
+ If not, the print statement after the loop will be printed*/
+
+ System.out.print("Please enter a whole number: "); //User input prompt
+ double userInput = objScanner.nextDouble(); //This reads an integer value from the user
+
+ /*to determine a number's primality, we can check to see if the division
+ of that number by 2 to (1 - that number) results in any whole number quotients.
+ Once we do the division we can compare that number to (int) number to see if the
+ values are equal.*/
+
+ /*the program should end if A: the first whole number quotient is found, indicating that
+ * indicating a number is not prime or if B: no whole number quotients are found within the
+ * range indicating the number IS prime.*/
+
+ for (int i = 2; i < userInput; i++) {
+ if ((userInput / i) == (int) (userInput / i)) {
+ System.out.println(userInput + " is not a prime number.");
+ isConditionMet = true;
+ break; //this helps jump out of the loop once this first whole number quotient instace is found
+ }
+ } if (!isConditionMet) {
+ System.out.println(userInput + " is a prime number.");
+ }
+ }
+}
\ No newline at end of file
diff --git a/lesson_04/ljmcwilliams/findPrimeNum.js b/lesson_04/ljmcwilliams/findPrimeNum.js
new file mode 100644
index 000000000..3b78c3b49
--- /dev/null
+++ b/lesson_04/ljmcwilliams/findPrimeNum.js
@@ -0,0 +1,21 @@
+const readline = require('readline'); //"require()" imports the readline module which will process the user input
+const read = readline.createInterface({
+ input: process.stdin, //this acts as an input scanner
+ output: process.stdout //this works like a normal console.log combined with a user's input
+});
+let isConditionMet = false;
+
+/* When looking at the Node.js docs, it states '.question()' displays the query (in this case the user prompt).
+It waits for an input and uses it as the first argument in a callback function (here I am using a arrow function). */
+read.question("Enter a number: ", (answer) => {
+ for (let i = 2; i < answer; i++) {
+ if ((answer / i) == parseInt(answer / i)) { //similar to the "(int)" statement in java, parseInt converts doubles to ints
+ console.log(answer + " is not a prime number.");
+ isConditionMet = true;
+ read.close(); //this works similar to a break statement in java and ends the program
+ }
+ } if (!isConditionMet) {
+ console.log(answer + " is a prime number.");
+ read.close();
+ }
+})
\ No newline at end of file
diff --git a/lesson_05/ljmcwilliams/README.md b/lesson_05/ljmcwilliams/README.md
new file mode 100644
index 000000000..4c4821222
--- /dev/null
+++ b/lesson_05/ljmcwilliams/README.md
@@ -0,0 +1,84 @@
+## User Story 1: Offline Learning Mode for Language App
+As a language learner,
I want an offline mode in the language learning app,
so I can continue learning without an internet connection.
+
+### Acceptance Criteria
+