diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e978f658c7e19aea923b9608685cc4c1f1e8189d..fd78e1826e450f3db72037ea6cf7166d80ea955d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -54,19 +54,19 @@ like to use it yourself...it's pretty nifty). Don't worry too much about specifi
 or don't understand it, someone else will probably fix it for you as long as you've made the intent clear in some form
 of JSDoc.
 
-### Naming convention
+### Naming conventions
 
-* JS names are camelCase
-  * initial lowercase for variables and functions
-  * initial uppercase for classes and namespaces
+* JS names are camelCase `fooBar`
+  * initial lowercase for variables and functions `fooBar`
+  * initial uppercase for classes and namespaces `Foo.Bar`
   * all-caps for constants
-* CSS classes are kebob-case.
+* CSS classes are kebob-case. `foo-bar`
 
 New code should generally get organized into the `App` namespace. See `js/002-config/fc-init-js.js` for a rough outline.
 
 ## JavaScript Features
 
-* Avoid using very new Javascript features
+* Avoid using very new JavaScript features
   * Generally, we're currently targeting ECMAScript 2018, though we use a few widely-implemented ECMAScript 2019
     features, like `globalThis`.
 * Conversely, do use modern features, it's not 2010 anymore and we don't try to support Internet Explorer or anything
@@ -83,15 +83,19 @@ check.
 `ESLint` and `tsc` can be setup in most IDEs aimed at web development to show errors while editing the file.
 
 Contributions should generally not add any new sanity check errors, and it's especially important to check this if
-you're making changes to .tw files. Use `./compile.sh --dry --sanity` on *nix, or run `compile_debug+sanityCheck.bat` on
-Windows. It searches for common spelling errors and syntax errors in the twine files. Don't worry about preexisting
+you're making changes to .tw files.
+Use `./compile.sh --dry --sanity` or the short hand `./compile.sh -d -s` on linux or mac.
+On Windows run `compile_debug+sanityCheck.bat`.
+It searches for common spelling errors and syntax errors in the twine files. Don't worry about preexisting
 errors, it's not totally clean as is and there are a few false positives.
 
 # Further Reading
 
 ## Wiki Files
 
-* [Writing Guide](devNotes/scene-guide.txt)
+* Writing Guides
+  * [Twine (Twine is being phased out of the project however the concepts are still relevant.)](devNotes/scene-guide.txt)
+  * [JS](devNotes/jsEventCreationGuide.md)
 * [Exception handling](devNotes/exceptions.md)
 * [Sanity check](devNotes/exceptions.md)
 * [Slave List](devNotes/slaveListing.md)
@@ -100,6 +104,7 @@ errors, it's not totally clean as is and there are a few false positives.
   * [Eyes](devNotes/eye functions.md)
   * [Limbs](devNotes/limb functions.md)
   * [Standalone functions](devNotes/standaloneFunctions.md)
+  * [some potentially useful JS functions](devNotes/usefulJSFunctionDocumentation.txt)
 
 ## Useful issues
 
diff --git a/devNotes/jsEventCreationGuide.md b/devNotes/jsEventCreationGuide.md
new file mode 100644
index 0000000000000000000000000000000000000000..dd612dc1aae49f012de86af25f1460d998428b89
--- /dev/null
+++ b/devNotes/jsEventCreationGuide.md
@@ -0,0 +1,98 @@
+# Creating your event
+
+First decide your events name e.g. MyEvent
+```
+App.Events.MyEvent = class MyEvent extends App.Events.BaseEvent {
+	// The event only fires if the optional conditions listed in this array are meet however it can be empty.
+	eventPrerequisites() {
+			// Conditional example
+			return [
+				() => V.plot === 1
+			];
+			
+			// empty example
+			return [];
+	}
+
+	// Each position in the array correlates to conditions that a slave must meet to be selected however it can be empty.
+	actorPrerequisites() {
+		// Single slave example
+		return [
+			[
+				s => canWalk(s),
+				s => s.fetish !== "mindbroken",
+				s => s.devotion >= 50,
+				s => s.trust <= 20
+			]
+		];
+		
+		// Dual slave
+		return [
+			[
+				s => s.ID === getSlave(this.actors[0]).mother
+			]
+		];
+		// The second actor to be the first actor's mother.
+		
+		// empty example
+		return [[]];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, him, himself
+		} = getPronouns(eventSlave);
+		const {
+			HeU, heU, hisU, himU, himselfU
+		} = getNonlocalPronouns(V.seeDicks).appendSuffix('U');
+		
+		// V.nextButton is shown to the user on the side bar, e.g. V.nextButton = "Continue";
+		// V.nextLink is the next passge that will be executed, e.g. V.nextLink = "Economics";
+
+		// show slave Art
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		let t = [];
+		
+		t.push(`Event info text goes here`)
+		
+		App.Events.addParagraph(node, t);
+
+		// Event branches
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Text shown to user`, choiceA),
+			...
+		]);
+
+		function choiceA() {
+			t = [];
+
+			t.push(`choice text goes here`);
+
+			// additional code if need
+
+			// effect on slave e.g.
+			eventSlave.devotion += 4;
+			eventSlave.trust += 4;
+			return t;
+		}
+	}
+};
+```
+# Adding your event to the pool
+
+Now that your event has been created it needs to be added to the pool of possible events for it's type which for most
+ events, as well as for our example, is random individual event. 
+This pool can be found at src/events/randomEvent.js. 
+Simply add your event to the array in App.Events.getIndividualEvents.
+
+# Testing
+
+You can go to the "options page" either sideBar -> Options -> "Game Options" or the "O" key by default.
+Then go to the Debug & cheating tab and enable CheatMode.
+Once you get to "Random Individual Event" select any slave and at the bottom under DEBUG: there should be
+ a input box with "Check Prerequisites and Casting" link next to it.
+Per the example under it, place your event's full name into it e.g. App.Events.myEvent and then hit said link.
+If everything works as intended you should see output 
\ No newline at end of file
diff --git a/devNotes/Useful JS Function Documentation.txt b/devNotes/usefulJSFunctionDocumentation.txt
similarity index 100%
rename from devNotes/Useful JS Function Documentation.txt
rename to devNotes/usefulJSFunctionDocumentation.txt