diff --git a/README.md b/README.md
deleted file mode 100644
index 9e1d842..0000000
--- a/README.md
+++ /dev/null
@@ -1,129 +0,0 @@
-Watch Application System in Python
-==================================
-
-Introduction
-------------
-
-Currently in its infancy wasp-os provides only a little more than a simple
-digital clock application for [PineTime](https://www.pine64.org/pinetime/)
-together with access to the MicroPython REPL for interactive testing and
-tweaking. However it keeps time well and has enough power saving
-functions implemented that it can survive for well over 72 hours between
-charges so even at this early stage it is functional as a wearable
-timepiece.
-
-Wasp-os includes a robust bootloader based on the Adafruit NRF52
-Bootloader. It has been extended to make it robust for development on
-form-factor devices without a reset button, power switch, SWD debugger
-or UART. This allows us to confidently develop on sealed devices relying
-only on BLE for updates.
-
-Videos
-------
-
-[![An M2 pre-release running on Pine64 PineTime](https://img.youtube.com/vi/YktiGUSRJB4/0.jpg)](https://www.youtube.com/watch?v=YktiGUSRJB4)\
-[An M2 pre-release running on Pine64 PineTime](https://www.youtube.com/watch?v=YktiGUSRJB4)
-
-[![How to develop wasp-os python applications on a Pine64 PineTime](https://img.youtube.com/vi/tuk9Nmr3Jo8/0.jpg)](https://www.youtube.com/watch?v=tuk9Nmr3Jo8)\
-[How to develop wasp-os python applications on a Pine64 PineTime](https://www.youtube.com/watch?v=tuk9Nmr3Jo8)
-
-[![Developing for Pine64 PineTime using wasp-os and MicroPython](https://img.youtube.com/vi/kf1VHj587Mc/0.jpg)](https://www.youtube.com/watch?v=kf1VHj587Mc)\
-[Developing for Pine64 PineTime using wasp-os and MicroPython](https://www.youtube.com/watch?v=kf1VHj587Mc)
-
-Documentation
--------------
-
-Wasp-os is has [extensive
-documentation](https://daniel-thompson.github.io/wasp-os/) which includes a
-detailed [Applicaiton Writer's
-Guide](https://daniel-thompson.github.io/wasp-os/appguide.html) to help you get
-started coding for wasp-os as quickly as possible.
-
-Building from a git clone
--------------------------
-
-Get the code from
-[https://github.com/daniel-thompson/wasp-os](https://github.com/daniel-thompson/wasp-os) .
-
-~~~
-pip3 install --user click serial pyserial
-make submodules
-make softdevice
-make -j `nproc` BOARD=pinetime all
-~~~
-
-Note: *You will need a toolchain for the Arm Cortex-M4. wasp-os is developed and tested using the [GNU-RM toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) (9-2019-q4) from Arm.*
-
-Note #2: *There are known problems with toolchains older than gcc-7.3 due to problems with link-time-optimization (which is enabled by default)*
-
-Installing
-----------
-
-Note: *If you have a new PineTime then it will have been delivered with
-flash protection enabled. You must disable the flash protection before
-trying to program it.*
-
-Use an SWD programmer to install `bootloader.hex` to the PineTime. This
-file is an Intel HEX file containing both the bootloader and the Nordic
-SoftDevice. Be careful to disconnect cleanly from the debug software
-since just pulling out the SWD cable will mean the nRF52 will still
-believe it is being debugged (and won't properly enter deep sleep
-modes).
-
-To install using Android device:
-
-* Copy `micropython.zip` to your Android device and download nRF Connect
- for Android if you do not already have it.
-* In nRF Connect, choose settings and reduce the DFU packet count from
- 10 to 4.
-* Connect to PineDFU using nRFConnect, click the DFU button and send
- `micropython.zip` to the device.
-
-To install using Linux and ota-dfu:
-
-* Look up the MAC address for your watch (try: `sudo hcitool lescan`).
-* Use ota-dfu to upload `micropython.zip` to the device. For example:
- `tools/ota-dfu/dfu.py -z micropython.zip -a A0:B1:C2:D3:E3:F5 --legacy`
-
-At the end of this process your watch will show the time (03:00) together
-with a date and battery meter. When the watch goes into power saving mode
-you can use the side button to wake it again.
-
-At this point you will also be able to use the Nordic UART Service to
-access the MicroPython REPL, although currently you must send ^C to
-interrupt the program that updates the watch display.
-
-Just for fun try:
-
-~~~
-^C
-import demo
-demo.run()
-# After watching the demo for a bit...
-^C
-wasp.app.draw(watch)
-wasp.system.run()
-~~~
-
-To set the time and restart the main application:
-
-~~~
-^C
-watch.rtc.set_localtime((yyyy, mm, dd, HH, MM, SS))
-wasp.system.run()
-~~~
-
-Or just use:
-~~~
-./tools/wasptool --rtc
-~~~
-which can run these commands automatically.
-
-As mentioned above there are many drivers and features still to be
-developed, see the [TODO list](TODO.md) for current status.
-
-Screenshots
------------
-
-![wasp-os digital clock app running on PineTime](res/clock_app.jpg)
-
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..fe62bbe
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,147 @@
+Watch Application System in Python
+==================================
+
+Introduction
+------------
+
+Currently in its infancy wasp-os provides only a little more than a simple
+digital clock application for `PineTime `_
+together with access to the MicroPython REPL for interactive testing and
+tweaking. However it keeps time well and has enough power saving
+functions implemented that it can survive for well over 72 hours between
+charges so even at this early stage it is functional as a wearable
+timepiece.
+
+Wasp-os includes a robust bootloader based on the Adafruit NRF52
+Bootloader. It has been extended to make it robust for development on
+form-factor devices without a reset button, power switch, SWD debugger
+or UART. This allows us to confidently develop on sealed devices relying
+only on BLE for updates.
+
+Videos
+------
+
+.. image:: https://img.youtube.com/vi/YktiGUSRJB4/0.jpg
+ :target: https://www.youtube.com/watch?v=YktiGUSRJB4
+ :alt: An M2 pre-release running on Pine64 PineTime
+
+`An M2 pre-release running on Pine64 PineTime `_
+
+.. image:: https://img.youtube.com/vi/tuk9Nmr3Jo8/0.jpg
+ :target: https://www.youtube.com/watch?v=tuk9Nmr3Jo8
+ :alt: How to develop wasp-os python applications on a Pine64 PineTime
+
+`How to develop wasp-os python applications on a Pine64 PineTime `_
+
+.. image:: https://img.youtube.com/vi/kf1VHj587Mc/0.jpg
+ :target: https://www.youtube.com/watch?v=kf1VHj587Mc
+ :alt: Developing for Pine64 PineTime using wasp-os and MicroPython
+
+`Developing for Pine64 PineTime using wasp-os and MicroPython `_
+
+Documentation
+-------------
+
+Wasp-os is has `extensive documentation `_
+which includes a detailed `Applicaiton Writer's Guide
+`_ to help you
+get started coding for wasp-os as quickly as possible.
+
+Building from a git clone
+-------------------------
+
+Get the code from
+`https://github.com/daniel-thompson/wasp-os `_ .
+
+.. code-block:: sh
+
+ pip3 install --user click serial pyserial
+ make submodules
+ make softdevice
+ make -j `nproc` BOARD=pinetime all
+
+.. note::
+
+ You will need a toolchain for the Arm Cortex-M4. wasp-os is developed and
+ tested using the `GNU-RM toolchain
+ `_
+ (9-2019-q4) from Arm.
+
+ There are known problems with toolchains older than gcc-7.3 due to problems
+ with link-time-optimization (which is enabled by default).
+
+Installing
+----------
+
+Use an SWD programmer to install ``bootloader.hex`` to the PineTime. This
+file is an Intel HEX file containing both the bootloader and the Nordic
+SoftDevice. Be careful to disconnect cleanly from the debug software
+since just pulling out the SWD cable will mean the nRF52 will still
+believe it is being debugged (and won't properly enter deep sleep
+modes).
+
+.. note::
+
+ If you have a new PineTime then it will have been delivered with flash
+ protection enabled. You must disable the flash protection before trying to
+ program it.
+
+To install using Android device:
+
+* Copy ``micropython.zip`` to your Android device and download nRF Connect
+ for Android if you do not already have it.
+* In nRF Connect, choose settings and reduce the DFU packet count from
+ 10 to 4.
+* Connect to PineDFU using nRFConnect, click the DFU button and send
+ ``micropython.zip`` to the device.
+
+To install using Linux and ota-dfu:
+
+* Look up the MAC address for your watch (try: ``sudo hcitool lescan``\ ).
+* Use ota-dfu to upload ``micropython.zip`` to the device. For example:
+ ``tools/ota-dfu/dfu.py -z micropython.zip -a A0:B1:C2:D3:E3:F5 --legacy``
+
+At the end of this process your watch will show the time (03:00) together
+with a date and battery meter. When the watch goes into power saving mode
+you can use the side button to wake it again.
+
+At this point you will also be able to use the Nordic UART Service to
+access the MicroPython REPL, although currently you must send ^C to
+interrupt the program that updates the watch display.
+
+Just for fun try:
+
+.. code-block:: python
+
+ ^C
+ import demo
+ demo.run()
+ # After watching the demo for a bit...
+ ^C
+ wasp.app.draw(watch)
+ wasp.system.run()
+
+To set the time and restart the main application:
+
+.. code-block:: python
+
+ ^C
+ watch.rtc.set_localtime((yyyy, mm, dd, HH, MM, SS))
+ wasp.system.run()
+
+Or just use:
+
+.. code-block:: sh
+
+ ./tools/wasptool --rtc
+
+which can run these commands automatically.
+
+As mentioned above there are many drivers and features still to be
+developed, see the `TODO list `_ for current status.
+
+Screenshots
+-----------
+
+.. image:: res/clock_app.jpg
+ :alt: wasp-os digital clock app running on PineTime
diff --git a/TODO.md b/TODO.md
deleted file mode 100644
index 6d7d2f6..0000000
--- a/TODO.md
+++ /dev/null
@@ -1,110 +0,0 @@
-# Roadmap
-
-## M1: Dumb watch feature parity
-
-The focus for M1 is to get wasp-os both to meet feature parity with a dumb
-watch and to have a bootloader and watchdog strategy that is robust enough
-to allow a PineTime case to be confidently glued shut.
-
-### Bootloader
-
- * [X] Basic board ports (PineTime, DS-D6, 96Boards Nitrogen)
- * [X] OTA application update
- * [X] Enable watchdog before starting the application
- * [X] Splash screen
- * [X] Ignore start button for first few seconds
-
-### MicroPython
-
- * [X] Basic board ports (PineTime, DS-D6, 96Boards Nitrogen)
- * [X] Long press reset (conditional feeding of the watchdog)
- - [X] Feed dog from REPL polling loop
- - [X] Feed dog from a tick interrupt
-
-### Wasp-os
-
- * [X] Display driver
- - [X] Display initialization
- - [X] Bitmap blitting
- - [X] RLE coder and decoder
- - [X] Optimized RLE inner loops
- * [X] Backlight driver
- * [X] Button driver (polling)
- * [X] Battery/charger driver
- * [X] Simple clock and battery level application
- * [X] Basic (WFI) power saving
- * [X] Implement simple RTC for nrf52
-
-## M2: Great developer experience
-
-The focus for M2 is to make development faster and easier by providing
-a file system and file transfer code. This allows much faster
-development cycles compared to full downloads of frozen modules.
-Additionally support for multiple event-driven applications will be
-added during M2 to further help developers by providing example
-applications.
-
-### Bootloader
-
- * [X] OTA bootloader update
- * [X] RTC time measurement whilst in bootloader
-
-### MicroPython
-
- * [X] SPI FLASH driver
- * [X] Enable LittleFS on SPI FLASH (at boot)
- * [X] BLE file transfer
-
-### Wasp-os
-
- * [X] Add dd/mm/yyyy support to RTC
- * [X] Button driver (interrupt based)
- * [X] Touch sensor driver
- * [X] Event driven application framework
- * [X] Stopwatch app
- * [X] Settings app
- * [X] PC-hosted simulation platform
- * [X] Documentation
- - [X] Sphinx framework and integration with github.io
- - [X] Document bootloader protocols
- - [X] Application writer's guide
- - [X] Write full docstring documentation for all wasp-os components
- * [X] Application Launcher
- * [X] Debug notifications
- * [o] Multi-colour RLE images
- - [X] Optimized "2-bit" RLE encoder and decoder
- - [ ] Logarithmic RBG332 <-> RGB56516bit color space conversion
-
-## M3: Smartwatch
-
-At M3 we start to build out full fitness tracking and notification
-functionality.
-
-### Bootloader
-
- * [ ] Stay in bootloader after battery run down
- * [ ] Implement power off support (no splash screen)
-
-### Micropython
-
- * [ ] Use SoftDevice sleep logic
- * [ ] Automatically enter SPI flash power saving mode
-
-### Wasp-os
-
- * [ ] Enable heart rate sensor
- - [ ] HRS3300 driver
- - [ ] HRS data post-processing
- - [ ] Heart rate counter app
- * [ ] Notifications
- - [ ] BLE notification protocol
- - [ ] Notification popups
- - [ ] Notification app (show notification history)
- - [ ] Find a recommended Android app
- * [ ] Step counting
- - [ ] BMA421 driver
- - [ ] Step counter app
- * [ ] Documentation
- - [ ] Debugging and troubleshooting guide
- - [ ] Screenshots for bootloader and all applications
- - [ ] Improve the install guide
diff --git a/TODO.rst b/TODO.rst
new file mode 100644
index 0000000..7eee712
--- /dev/null
+++ b/TODO.rst
@@ -0,0 +1,136 @@
+Roadmap
+=======
+
+M1: Dumb watch feature parity
+-----------------------------
+
+The focus for M1 is to get wasp-os both to meet feature parity with a dumb
+watch and to have a bootloader and watchdog strategy that is robust enough
+to allow a PineTime case to be confidently glued shut.
+
+Bootloader
+~~~~~~~~~~
+
+* [X] Basic board ports (PineTime, DS-D6, 96Boards Nitrogen)
+* [X] OTA application update
+* [X] Enable watchdog before starting the application
+* [X] Splash screen
+* [X] Ignore start button for first few seconds
+
+MicroPython
+~~~~~~~~~~~
+
+* [X] Basic board ports (PineTime, DS-D6, 96Boards Nitrogen)
+* [X] Long press reset (conditional feeding of the watchdog)
+
+ * [X] Feed dog from REPL polling loop
+ * [X] Feed dog from a tick interrupt
+
+Wasp-os
+~~~~~~~
+
+* [X] Display driver
+
+ * [X] Display initialization
+ * [X] Bitmap blitting
+ * [X] RLE coder and decoder
+ * [X] Optimized RLE inner loops
+
+* [X] Backlight driver
+* [X] Button driver (polling)
+* [X] Battery/charger driver
+* [X] Simple clock and battery level application
+* [X] Basic (WFI) power saving
+* [X] Implement simple RTC for nrf52
+
+M2: Great developer experience
+------------------------------
+
+The focus for M2 is to make development faster and easier by providing
+a file system and file transfer code. This allows much faster
+development cycles compared to full downloads of frozen modules.
+Additionally support for multiple event-driven applications will be
+added during M2 to further help developers by providing example
+applications.
+
+Bootloader
+~~~~~~~~~~
+
+* [X] OTA bootloader update
+* [X] RTC time measurement whilst in bootloader
+
+MicroPython
+~~~~~~~~~~~
+
+* [X] SPI FLASH driver
+* [X] Enable LittleFS on SPI FLASH (at boot)
+* [X] BLE file transfer
+
+Wasp-os
+~~~~~~~
+
+* [X] Add dd/mm/yyyy support to RTC
+* [X] Button driver (interrupt based)
+* [X] Touch sensor driver
+* [X] Event driven application framework
+* [X] Stopwatch app
+* [X] Settings app
+* [X] PC-hosted simulation platform
+* [X] Documentation
+
+ * [X] Sphinx framework and integration with github.io
+ * [X] Document bootloader protocols
+ * [X] Application writer's guide
+ * [X] Write full docstring documentation for all wasp-os components
+
+* [X] Application Launcher
+* [X] Debug notifications
+* [o] Multi-colour RLE images
+
+ * [X] Optimized "2-bit" RLE encoder and decoder
+ * [ ] Logarithmic RBG332 <-> RGB56516bit color space conversion
+
+M3: Smartwatch
+--------------
+
+At M3 we start to build out full fitness tracking and notification
+functionality.
+
+Bootloader
+~~~~~~~~~~
+
+* [ ] Stay in bootloader after battery run down
+* [ ] Implement power off support (no splash screen)
+
+Micropython
+~~~~~~~~~~~
+
+* [ ] Use SoftDevice sleep logic
+* [ ] Automatically enter SPI flash power saving mode
+
+Wasp-os
+~~~~~~~
+
+* [ ] Enable heart rate sensor
+
+ * [ ] HRS3300 driver
+ * [ ] HRS data post-processing
+ * [ ] Heart rate counter app
+
+* [ ] Notifications
+
+ * [ ] BLE notification protocol
+ * [ ] Notification popups
+ * [ ] Notification app (show notification history)
+ * [ ] Find a recommended Android app
+
+* [ ] Step counting
+
+ * [ ] BMA421 driver
+ * [ ] Step counter app
+
+* [ ] Documentation
+
+ * [ ] Debugging and troubleshooting guide
+ * [ ] Screenshots for bootloader and all applications
+ * [ ] Improve the install guide
diff --git a/docs/README.md b/docs/README.md
deleted file mode 120000
index 32d46ee..0000000
--- a/docs/README.md
+++ /dev/null
@@ -1 +0,0 @@
-../README.md
\ No newline at end of file
diff --git a/docs/README.rst b/docs/README.rst
new file mode 120000
index 0000000..89a0106
--- /dev/null
+++ b/docs/README.rst
@@ -0,0 +1 @@
+../README.rst
\ No newline at end of file
diff --git a/docs/TODO.md b/docs/TODO.md
deleted file mode 120000
index 15d039a..0000000
--- a/docs/TODO.md
+++ /dev/null
@@ -1 +0,0 @@
-../TODO.md
\ No newline at end of file
diff --git a/docs/TODO.rst b/docs/TODO.rst
new file mode 120000
index 0000000..d3893d7
--- /dev/null
+++ b/docs/TODO.rst
@@ -0,0 +1 @@
+../TODO.rst
\ No newline at end of file