diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8b32c4c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,55 @@
+# Updog
+
+## What's updog?
+
+Not much, you?
+
+(it's a simple, extensible uptime monitor)
+
+## Warning
+
+**Extensions will be executed with no safety checks!** Make sure an extension isn't malicious before adding it.
+
+## Docs
+
+Docs are in the `./docs/` folder, but here's a quick overview on how to use this:
+
+1. Clone this repository - or just download `updog.py`
+2. Install your extensions in the appropriate folders: `./extensions/checkers`, `./extensions/alerts` (optional), and `./extensions/logging`
+3. Create your `services.json` file, example below.
+
+```json
+{
+ "site": {
+ "name": "A Website",
+ "checker": "CheckerTemplate",
+ "checker-args": {
+ "url": "https://example.net",
+ "port": 443,
+ "lol": "CheckerTemplate ignores these options lol"
+ },
+ "rate": 60,
+ "alerts": "AlertsTemplate",
+ "alerts-args": {
+ "url": "https://example.com/webhook-url-or-whatever-goes-here",
+ "lol": "irrelevant, AlertsTemplate ignores these options lol"
+ },
+ "logging": "LoggingTemplate",
+ "logging-args": {
+ "lol": "irrelevant, LoggingTemplate ignores these options lol"
+ }
+ }
+}
+```
+
+## To-do
+
+- Add basic functionality
+ - Read `services.json` file
+ - Call the extensions
+- Add support for logging and alert extensions
+- Add maintenance windows (optionally recurring)
+
+---
+
+***All specs are still a work-in-progress, breaking changes are likely!***
diff --git a/docs/extensions/README.md b/docs/extensions/README.md
new file mode 100644
index 0000000..cf53621
--- /dev/null
+++ b/docs/extensions/README.md
@@ -0,0 +1,35 @@
+# Extensions
+
+Extensions go in the `./extensions/` folder, where exactly depends on which type of extension.
+
+- Extensions for checking status ("checkers") go in `./extensions/checkers/`
+- Extensions for alerting go in `./extensions/alerts/`
+- Extensions for logging go in `./extensions/logging/`
+
+Note that the folder name *must* be the same as the file name for the extension (excluding .py)!
+
+## Example
+
+```txt
+.
+├── extensions
+│ ├── alerts
+│ │ └── alerts_template
+│ │ └── alerts_template.py
+│ ├── checkers
+│ │ └── checker_template
+│ │ └── checker_template.py
+│ └── logging
+│ └── logging_template
+│ └── logging_template.py
+```
+
+## List of extensions
+
+There are none yet, so consider this secret a placeholder
+
+### Checkers
+
+### Alerts
+
+## Logging
\ No newline at end of file
diff --git a/docs/extensions/checkers.md b/docs/extensions/checkers.md
new file mode 100644
index 0000000..504b9a0
--- /dev/null
+++ b/docs/extensions/checkers.md
@@ -0,0 +1,62 @@
+# Uptime Checker Extensions
+
+Updog doesn't do any monitoring by itself. Instead, extensions are used to check the status of whatever thing, send alerts, and log stuff. Updog just chains them together.
+
+Example extension: [askiiart/updog-checker_template](https://git.askiiart.net/askiiart/updog-checker_template)
+
+## Folder layout
+
+Extensions need to be put in the `./extensions/checkers` folder, and the name of the file must match the name of the folder.
+
+```txt
+.
+├── extensions
+│ ├── alerts
+│ └── alerts_template
+│ └── alerts_template.py
+```
+
+## Methods
+
+`*`: indicates a method is required
+
+### `__init__()`*
+
+**Arguments**:
+
+- A dict of arguments from `checker-args` in `services.json` - For no arguments, an empty dict will be used
+
+Example:
+
+```py
+{
+ "url": "https://example.net",
+ "port": 443
+}
+```
+
+**Return**: None
+
+### `get_status()`*
+
+**Arguments**: None
+
+**Return**: An integer indicating status; the codes; what the code means is provided by [`get_return_codes()`](#get_return_codes)
+
+These values can be overriden by providing [`get_return_codes()`](#get_return_codes)
+
+### `get_return_codes()`*
+
+**Arguments**: None
+
+**Return**: A `dict` containing integers and their associated statuses.
+
+Example:
+
+```py
+{
+ 0: "Down",
+ 50: "Partial outage",
+ 100: "Up"
+}
+```
diff --git a/readme.md b/readme.md
deleted file mode 100644
index 70742a9..0000000
--- a/readme.md
+++ /dev/null
@@ -1,106 +0,0 @@
-# Updog
-
-## What's updog?
-
-Not much, you?
-
-(it's a simple, extensible uptime monitor)
-
-## Warning
-
-**Extensions will be executed with no safety checks!** Make sure an extension isn't malicious before adding it.
-
-## Uptime Checker Extensions
-
-
-
-Updog doesn't do any monitoring by itself. Instead, extensions are used to check the status of whatever thing, send alerts, and log stuff. Updog just chains them together.
-
-Some examples extensions:
-
-- [askiiart/updog-checker_template](https://git.askiiart.net/askiiart/updog-checker_template)
-- Others will be added later
-
-### Folder layout
-
-Extensions need to be put in the `./extensions/checkers` folder and the name of the file must match the name of the folder. In the future, `alerts` and `logging` folders will be added for those extensions. For now, there is only support for checkers.
-
-### Methods
-
-`*`: indicates a method is required
-
-#### `__init__()`*
-
-**Arguments**:
-
-- A dict of arguments from `checker-args` in `services.json` - For no arguments, an empty dict will be used
-
-Example:
-
-```py
-{
- "url": "https://example.net",
- "port": 443
-}
-```
-
-**Return**: None
-
-#### `get_status()`*
-
-**Arguments**: None
-
-**Return**: An integer indicating status; the codes; what the code means is provided by [`get_return_codes()`](#get_return_codes)
-
-These values can be overriden by providing [`get_return_codes()`](#get_return_codes)
-
-#### `get_return_codes()`*
-
-**Arguments**: None
-
-**Return**: A `dict` containing integers and their associated statuses.
-
-Example:
-
-```py
-{
- 0: "Down",
- 50: "Partial outage",
- 100: "Up"
-}
-```
-
-## To-do
-
-- Add basic functionality
- - Read `services.json` file:
-
-```json
-{
- "site": {
- "name": "A Website",
- "checker": "CheckerTemplate",
- "checker-args": {
- "url": "https://example.net",
- "port": 443
- },
- "rate": 60,
- "alerts": "AlertsTemplate",
- "alerts-args": {
- "url": "https://example.com/webhook-url-or-whatever-goes-here"
- },
- "logging": "LoggingTemplate",
- "logging-args": {
- "format": "irrelevant, LoggingTemplate has no options lol"
- }
- }
-}
-```
-
-The args are just passed to the extension as a `dict`, the extension handles it from there.
-
-- Add support for logging and alert extensions
-
----
-
-***All specs are still a work-in-progress, breaking changes are likely!***
diff --git a/main.py b/updog.py
similarity index 100%
rename from main.py
rename to updog.py