diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..4a18890
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,7 @@
+Copyright 2018 Frelia (@execfera)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
index e69de29..fdc6145 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,165 @@
+# charasort
+A web based character sorter. Allows users to run through a manual merge sort of their favorite
+characters from a set.
+
+**Features**
+ * Entirely client side, no backend server required.
+ * Filtering out characters based on JSON based filters.
+ * Shareable links of sorter results.
+ * Versioning of sorter data - you may want to add characters and resources over time. Versioning keeps shareable links valid even if the base character data is changed.
+
+The version in this repo is built for characters from the [Touhou Project](https://en.wikipedia.org/wiki/Touhou_Project)
+game series, but the sorter can be easily edited to create any custom sorter desired.
+
+## Related Sorters
+Several others have created other sorters based on other concepts and series, see them [here](https://github.com/execfera/charasort/wiki)!
+
+## Creating Your Own Sorter
+This is a list of things you need to change for your sorter, for each file.
+
+ * `index.html`
+ * Sorter name: Change under `starting start button` and the `
` tags.
+ * Starting banner images: 120px x 180px, under `left sort image` and `right sort image`.
+ * OpenGraph tags: `og:site_name`, `og:description` and `og:image` will show up on embeds when linked to social media such as Facebook, Twitter and Discord.
+ * Sorter info: Insert whatever you like under the `info` tag.
+ * Website icon: Remember to get your own `favicon.ico`!
+
+ * `src/js/data.js`
+
+ Change `imageRoot` if you are not uploading your images to imgur.
+
+ * `src/js/data/YYYY-MM-DD.js`
+
+ Creating your own set of data is relatively simple. First, change the `dataSetVersion` date to the date when you are creating the dataset. Example: `dataSetVersion = 2018-02-20`. The actual filename does not matter, it is just for your own easy reference.
+
+ Further down, each file comprises of two sets of data: `characterData` and `options`.
+
+ `characterData` is an array of objects filled with character data. Its layout is as follows.
+
+ ```
+ {
+ name: string,
+ img: string,
+ opts: {
+ key1: boolean | string[],
+ key2: boolean | string[],
+ ...
+ }
+ }
+ ```
+
+ Parameters:
+
+ * `name`: The name of the character to be displayed. **Required.**
+ * `img`: An image filename of the character, in 120px x 180px, to be added to `imageRoot` in `data.js`. **Required.**
+ * `opts`: An object of 'options' that will be used to filter out characters that will be used. Further explanation below. **Required.**
+
+ Example:
+
+ ```
+ {
+ name: "Flandre Scarlet",
+ img: "OhaDcnc.png",
+ opts: {
+ series: ["book", "EoSD", "StB"],
+ stage: ["ex"],
+ loli: true
+ }
+ }
+ ```
+
+ `options` is an array of objects that can take either two forms. The first form is a **Basic Filter**. The Basic Filter, when selected, removes any character that matches its criteria. Its layout is as follows.
+
+ ```
+ {
+ name: string,
+ key: string,
+ tooltip?: string, // optional
+ checked?: boolean, // optional
+ }
+ ```
+
+ Parameters:
+
+ * `name`: The name of the option to be displayed. **Required.**
+ * `key`: A shorthand reference, used to refer to it in the character data. **Required.**
+ * `tooltip`: Some optional information that appears when you hover over the option. If not provided, defaults to the option's name.
+ * `checked`: If set to `true`, this option will be checked when your sorter starts. If not provided, defaults to `false`.
+
+ Example:
+
+ ```
+ {
+ name: 'Filter Lolis',
+ key: 'loli',
+ tooltip: 'Check this if you want to remove lolis from being listed.'
+ checked: true,
+ }
+ ```
+
+ In this example, checking this option would remove the example 'Flandre Scarlet' above from the list of sorted characters, since she has `loli` set to `true`. The `checked` option is true, so in this sorter, it would be enabled by default.
+
+ The second form is a **Nested Inclusion Filter**. The Nested Inclusion Filter has a few sub-options under it. When selected, any options under it that are *not* selected will be excluded from the sort. Its layout is similar to the Basic Filter, except with an extra `sub` part, which lists the sub-options.
+
+ ```
+ {
+ name: string,
+ key: string,
+ tooltip?: string, // optional
+ checked?: boolean, // optional
+ sub: [
+ {
+ name: string,
+ key: string,
+ tooltip?: string, // optional
+ checked?: boolean, // optional
+ },
+ {
+ name: string,
+ key: string,
+ tooltip?: string, // optional
+ checked?: boolean, // optional
+ },
+ ...
+ ]
+ }
+ ```
+
+ This option will be often the only one you may need, since it is easy to use it for filtering by series.
+
+ Example:
+
+ ```
+ {
+ name: 'Filter by Series Appearance',
+ key: 'series',
+ tooltip: 'Check this if you want to filter out certain series.'
+ checked: true,
+ sub: [
+ { name: 'Books & CDs', key: 'book' },
+ { name: 'Embodiment of Scarlet Devil', key: 'EoSD' },
+ { name: 'Perfect Cherry Blossom', key: 'PCB' },
+ ]
+ }
+ ```
+
+ In this case, this would create a "Filter by Series Appearance" option, with the three listed sub-options. "Flandre Scarlet" above has both `book` and `EoSD` under `series`, so unless you uncheck both "Books & CDs" and "Embodiment of Scarlet Devil", she would still appear in the sort.
+
+## Updating Your Own Sorter
+
+When you need to add more characters to your sorter, you must create a new data file with a new date, and include it in your `index.html` file under the `` line, while keeping your previous data files also included.
+
+The script will automatically get the latest version, but will retain the previous versions in case someone keeps a shareable link from one of the previous versions.
+
+## Credits
+
+ * [html2canvas](https://github.com/niklasvh/html2canvas/) for image generation.
+ * [seedrandom](https://github.com/davidbau/seedrandom) for PRNG used in character array shuffling.
+ * [lz-string](https://github.com/pieroxy/lz-string) for shareable link compression.
+ * [SpinKit](http://tobiasahlin.com/spinkit/) for loading animation.
+ * [thsort](http://mainyan.sakura.ne.jp/thsort.html) for the original inspiration.
+
+## Known Issues
+
+ * Does not work with CloudFlare's Rocket Loader.
+ * Breaks on older versions of IE and mobile Safari, due to various incompatibilities.
diff --git a/charasort b/charasort
new file mode 160000
index 0000000..8a44c34
--- /dev/null
+++ b/charasort
@@ -0,0 +1 @@
+Subproject commit 8a44c3480a9659449fae46d55fb966ce1a410a33
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..344ca09
--- /dev/null
+++ b/index.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+ GuP Character Sorting
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+