diff --git a/boards.csv b/boards.csv
index d8bae3f..8730e09 100644
--- a/boards.csv
+++ b/boards.csv
@@ -1,6 +1,6 @@
# Raspberry Pi boards
-rpi_2b,Raspberry Pi 2 B,Raspberry Pi Foundation,bcm2836,rpi_2_defconfig,arm-linux-gnueabihf,rpi
-rpi_3b,Raspberry Pi 3 B,Raspberry Pi Foundation,bcm2837,rpi_3_defconfig,aarch64-linux-gnu,rpi
+raspberrypi_2b,Raspberry Pi 2 B,Raspberry Pi Foundation,bcm2836,rpi_2_defconfig,arm-linux-gnueabihf,rpi
+raspberrypi_3b,Raspberry Pi 3 B,Raspberry Pi Foundation,bcm2837,rpi_3_defconfig,aarch64-linux-gnu,rpi
# Allwinner A20 (sun7i) boards
bananapi_m1,Banana Pi M1,Sinovoip,sun7i,Bananapi_defconfig,arm-linux-gnueabihf,sunxi
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..ca35be0
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1 @@
+_site
diff --git a/docs/_boards/bananapi_m1.md b/docs/_boards/bananapi_m1.md
new file mode 100644
index 0000000..7917799
--- /dev/null
+++ b/docs/_boards/bananapi_m1.md
@@ -0,0 +1,8 @@
+---
+layout: board
+board_id: bananapi_m1
+board_name: Banana Pi M1
+board_maker_name: Sinovoip
+board_soc_name: Allwinner A20 (sun7i)
+board_cpu_name: ARM Cortex A7 (armv7)
+---
diff --git a/docs/_boards/bananapi_m2.md b/docs/_boards/bananapi_m2.md
new file mode 100644
index 0000000..ae745ad
--- /dev/null
+++ b/docs/_boards/bananapi_m2.md
@@ -0,0 +1,8 @@
+---
+layout: board
+board_id: bananapi_m2
+board_name: Banana Pi M2
+board_maker_name: Sinovoip
+board_soc_name: Allwinner A31 (sun6i)
+board_cpu_name: ARM Cortex A7 (armv7)
+---
diff --git a/docs/_boards/raspberrypi_2b.md b/docs/_boards/raspberrypi_2b.md
new file mode 100644
index 0000000..2f42dd8
--- /dev/null
+++ b/docs/_boards/raspberrypi_2b.md
@@ -0,0 +1,8 @@
+---
+layout: board
+board_id: raspberrypi_2b
+board_name: Raspberry Pi 2 B
+board_maker_name: Raspberry Pi Foundation
+board_soc_name: Broadcom BCM2836 (bcm2836)
+board_cpu_name: ARM Cortex A7 (armv7)
+---
diff --git a/docs/_boards/raspberrypi_3b.md b/docs/_boards/raspberrypi_3b.md
new file mode 100644
index 0000000..6434325
--- /dev/null
+++ b/docs/_boards/raspberrypi_3b.md
@@ -0,0 +1,8 @@
+---
+layout: board
+board_id: raspberrypi_3b
+board_name: Raspberry Pi 3 B
+board_maker_name: Raspberry Pi Foundation
+board_soc_name: Broadcom BCM2837 (bcm2837)
+board_cpu_name: ARM Cortex A53 (armv8)
+---
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 0000000..30b93bb
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,3 @@
+collections:
+ boards:
+ output: true
diff --git a/docs/_includes/boards.html b/docs/_includes/boards.html
new file mode 100644
index 0000000..1226c6e
--- /dev/null
+++ b/docs/_includes/boards.html
@@ -0,0 +1,20 @@
+
+
+
+ Board
+ Board maker
+ SoC
+ CPU
+
+
+
+{% for board in site.boards %}
+
+ {{ board.board_name }}
+ {{ board.board_maker_name }}
+ {{ board.board_soc_name }}
+ {{ board.board_cpu_name }}
+
+{% endfor %}
+
+
diff --git a/docs/_includes/digitalocean.html b/docs/_includes/digitalocean.html
new file mode 100644
index 0000000..04a551a
--- /dev/null
+++ b/docs/_includes/digitalocean.html
@@ -0,0 +1,6 @@
+
diff --git a/docs/_layouts/board.html b/docs/_layouts/board.html
new file mode 100644
index 0000000..cc0fa57
--- /dev/null
+++ b/docs/_layouts/board.html
@@ -0,0 +1,60 @@
+---
+layout: default
+---
+
+
+
Banana Pi
+
+
+
+
+
Board name
+
{{ page.board_name }}
+
+
+
Board maker
+
{{ page.board_maker_name }}
+
+
+
SoC
+
{{ page.board_soc_name }}
+
+
+
CPU
+
{{ page.board_cpu_name }}
+
+
+
+
+
Install instructions
+
+
+ $ wget http://debimg.johang.se/boot/boot-raspberrypi_3b .bin.gz
+ $ wget http://debimg.johang.se/debian/armhf/debian-armhf-stretch -XXXXXX.bin.gz
+ $ zcat boot-raspberrypi_3b .bin.gz debian-armhf-stretch -XXXXXX.bin.gz > sd-card.img
+ # dd if=sd-card.img of=/dev/sdXXX # ...where /dev/sdXXX is your SD card
+
+
+
When the dd command is done, put the SD card in your board and power it on. The board will boot up and assign itself an IP address using DHCP. The last part of the Debian image filename is the default root password.
+
+
+
+
+{% include digitalocean.html %}
+
+
+
+
Other boards
+{% include boards.html %}
+
+
+
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
new file mode 100644
index 0000000..9d836fd
--- /dev/null
+++ b/docs/_layouts/default.html
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+ SD card images
+
+
+
+
+
+
+
+{{ content }}
+
+
+
+
diff --git a/docs/boards.html b/docs/boards.html
new file mode 100644
index 0000000..b1dde30
--- /dev/null
+++ b/docs/boards.html
@@ -0,0 +1,17 @@
+---
+title: SD card images
+layout: default
+---
+
+
+
Supported boards
+
+
+
+{% include digitalocean.html %}
+
+
+{% include boards.html %}
+
+
+
diff --git a/docs/img/board.jpg b/docs/img/board.jpg
new file mode 100644
index 0000000..59c8035
Binary files /dev/null and b/docs/img/board.jpg differ
diff --git a/docs/img/do1.png b/docs/img/do1.png
new file mode 100755
index 0000000..0d0163b
Binary files /dev/null and b/docs/img/do1.png differ
diff --git a/docs/img/do2.png b/docs/img/do2.png
new file mode 100755
index 0000000..ee98b49
Binary files /dev/null and b/docs/img/do2.png differ
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..a362ea0
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,53 @@
+---
+title: My First Page
+layout: default
+---
+
+
+
+
+
+
+
Minimal image
+
The images contains just enough to boot up. Great for development, testing and learning.
+
+
+
+
Pure image
+
The images includes only official Debian packages, including the official Debian Linux kernel, downloaded from the offical Debian mirrors.
+
+
+
+
Up-to-date image
+
The images are rebuilt once per week to include the latest versions and security patches for each of the Debian suites.
+
+
+
+
+
+{% include digitalocean.html %}
+
+
+
+
diff --git a/rebuild-jekyll-boards b/rebuild-jekyll-boards
new file mode 100755
index 0000000..340be1b
--- /dev/null
+++ b/rebuild-jekyll-boards
@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+import csv, os, glob
+for x in glob.glob("docs/_boards/*.md"):
+ os.remove(x)
+chips = {}
+with open("chips.csv") as csvfile:
+ chipsf = csv.reader(csvfile)
+ for row in chipsf:
+ if not row:
+ continue
+ if row[0].strip().startswith("#"):
+ continue
+ chips[row[0]] = row
+with open("boards.csv") as csvfile:
+ boardsf = csv.reader(csvfile)
+ for row in boardsf:
+ if not row:
+ continue
+ if row[0].strip().startswith("#"):
+ continue
+ with open("docs/_boards/%s.md" % row[0], "w") as boardf:
+ boardf.write("---\n")
+ boardf.write("layout: board\n")
+ boardf.write("board_id: %s\n" % (row[0]))
+ boardf.write("board_name: %s\n" % (row[1]))
+ boardf.write("board_maker_name: %s\n" % (row[2]))
+ boardf.write("board_soc_name: %s %s (%s)\n" % (chips[row[3]][2],
+ chips[row[3]][1], chips[row[3]][0]))
+ boardf.write("board_cpu_name: %s (%s)\n" % (chips[row[3]][3],
+ chips[row[3]][4]))
+ boardf.write("---\n")