From 5335417dc3c360509fe51c0a68ccedce1af51915 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 21:43:13 -0800
Subject: [PATCH 01/15] feat(tour) content struct

this way, ID's can be managed separately from the content
---
 tour/content/content.go | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 tour/content/content.go

diff --git a/tour/content/content.go b/tour/content/content.go
new file mode 100644
index 00000000000..fd4e81f9c87
--- /dev/null
+++ b/tour/content/content.go
@@ -0,0 +1,6 @@
+package content
+
+type Content struct {
+	Title string
+	Text  string
+}

From 8f6d6653ba5e612d3647a47fc19fdd728464b498 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 21:53:13 -0800
Subject: [PATCH 02/15] feat(tour) initial content

@jbenet please review

If this is a desirable format, I will put in the rest so we can start to
make incrementatl progress on the actual copy.

Separated content from topic so Ids can be seen and modified without
excessive scrolling. Hopefully will make it easy to re-order content.
---
 tour/all.go                  | 20 +++++++++++++-------
 tour/content/introduction.go | 19 +++++++++++++++++++
 tour/tour.go                 |  6 +++---
 3 files changed, 35 insertions(+), 10 deletions(-)
 create mode 100644 tour/content/introduction.go

diff --git a/tour/all.go b/tour/all.go
index 50a9b092204..5c9bd95e3ff 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -1,6 +1,10 @@
 package tour
 
-import "sort"
+import (
+	"sort"
+
+	c "github.com/jbenet/go-ipfs/tour/content"
+)
 
 func init() {
 	for _, t := range allTopics {
@@ -14,13 +18,15 @@ func init() {
 // Topics contains a mapping of Tour Topic ID to Topic
 var allTopics = []Topic{
 	Topic{
-		ID:    ID("0"),
-		Title: "Hello Mars",
-		Text:  "Hello Mars",
+		ID:      ID("0.0"),
+		Content: c.IntroHelloMars,
+	},
+	Topic{
+		ID:      ID("0.1"),
+		Content: c.IntroTour,
 	},
 	Topic{
-		ID:    ID("0.1"),
-		Title: "Hello Mars 2",
-		Text:  "Hello Mars 2",
+		ID:      ID("0.2"),
+		Content: c.IntroAboutIpfs,
 	},
 }
diff --git a/tour/content/introduction.go b/tour/content/introduction.go
new file mode 100644
index 00000000000..18a819cc5e4
--- /dev/null
+++ b/tour/content/introduction.go
@@ -0,0 +1,19 @@
+package content
+
+var IntroHelloMars = Content{
+	Title: "Hello Mars",
+	Text: `
+	check things work
+	`,
+}
+
+var IntroTour = Content{
+	Title: "Hello Mars",
+	Text: `
+	how this works
+	`,
+}
+
+var IntroAboutIpfs = Content{
+	Title: "About IPFS",
+}
diff --git a/tour/tour.go b/tour/tour.go
index f983293b5de..04c840d091e 100644
--- a/tour/tour.go
+++ b/tour/tour.go
@@ -4,6 +4,7 @@ import (
 	"strconv"
 	"strings"
 
+	content "github.com/jbenet/go-ipfs/tour/content"
 	u "github.com/jbenet/go-ipfs/util"
 )
 
@@ -26,9 +27,8 @@ func (a IDSlice) Less(i, j int) bool { return a[i].LessThan(a[j]) }
 
 // Topic is a type of objects that structures a tour topic.
 type Topic struct {
-	ID    ID
-	Title string
-	Text  string
+	ID ID
+	content.Content
 }
 
 // Topics is a sorted list of topic IDs

From 8d57f507090ca1f67e7482892e3e6d9be07916e7 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 22:15:40 -0800
Subject: [PATCH 03/15] feat(tour) add file basics

keep things in one file for now
---
 tour/all.go                  | 81 ++++++++++++++++++++++++++++--------
 tour/content/content.go      |  6 ---
 tour/content/introduction.go | 19 ---------
 tour/tour.go                 |  8 +++-
 4 files changed, 70 insertions(+), 44 deletions(-)
 delete mode 100644 tour/content/content.go
 delete mode 100644 tour/content/introduction.go

diff --git a/tour/all.go b/tour/all.go
index 5c9bd95e3ff..3bb3da7779e 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -1,10 +1,6 @@
 package tour
 
-import (
-	"sort"
-
-	c "github.com/jbenet/go-ipfs/tour/content"
-)
+import "sort"
 
 func init() {
 	for _, t := range allTopics {
@@ -17,16 +13,67 @@ func init() {
 
 // Topics contains a mapping of Tour Topic ID to Topic
 var allTopics = []Topic{
-	Topic{
-		ID:      ID("0.0"),
-		Content: c.IntroHelloMars,
-	},
-	Topic{
-		ID:      ID("0.1"),
-		Content: c.IntroTour,
-	},
-	Topic{
-		ID:      ID("0.2"),
-		Content: c.IntroAboutIpfs,
-	},
+	Topic{ID: ID("0.0"), Content: IntroHelloMars},
+	Topic{ID: ID("0.1"), Content: IntroTour},
+	Topic{ID: ID("0.2"), Content: IntroAboutIpfs},
+
+	// File Basics
+	Topic{ID: ID("X.0"), Content: FileBasicsFilesystem},
+	Topic{ID: ID("X.1"), Content: FileBasicsGetting},
+	Topic{ID: ID("X.2"), Content: FileBasicsAdding},
+	Topic{ID: ID("X.3"), Content: FileBasicsDirectories},
+	Topic{ID: ID("X.3"), Content: FileBasicsDirectories},
+	Topic{ID: ID("X.4"), Content: FileBasicsMounting},
+	Topic{ID: ID("X.2"), Content: FileBasicsAdding},
+}
+
+// Introduction
+
+var IntroHelloMars = Content{
+	Title: "Hello Mars",
+	Text: `
+	check things work
+	`,
+}
+var IntroTour = Content{
+	Title: "Hello Mars",
+	Text: `
+	how this works
+	`,
+}
+var IntroAboutIpfs = Content{
+	Title: "About IPFS",
+}
+
+// File Basics
+
+var FileBasicsFilesystem = Content{
+	Title: "Filesystem",
+	Text: `
+	`,
+}
+var FileBasicsGetting = Content{
+	Title: "Getting Files",
+	Text: `ipfs cat
+	`,
+}
+var FileBasicsAdding = Content{
+	Title: "Adding Files",
+	Text: `ipfs add
+	`,
+}
+var FileBasicsDirectories = Content{
+	Title: "Directories",
+	Text: `ipfs ls
+	`,
+}
+var FileBasicsDistributed = Content{
+	Title: "Distributed",
+	Text: `ipfs cat from mars
+	`,
+}
+var FileBasicsMounting = Content{
+	Title: "Getting Files",
+	Text: `ipfs mount (simple)
+	`,
 }
diff --git a/tour/content/content.go b/tour/content/content.go
deleted file mode 100644
index fd4e81f9c87..00000000000
--- a/tour/content/content.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package content
-
-type Content struct {
-	Title string
-	Text  string
-}
diff --git a/tour/content/introduction.go b/tour/content/introduction.go
deleted file mode 100644
index 18a819cc5e4..00000000000
--- a/tour/content/introduction.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package content
-
-var IntroHelloMars = Content{
-	Title: "Hello Mars",
-	Text: `
-	check things work
-	`,
-}
-
-var IntroTour = Content{
-	Title: "Hello Mars",
-	Text: `
-	how this works
-	`,
-}
-
-var IntroAboutIpfs = Content{
-	Title: "About IPFS",
-}
diff --git a/tour/tour.go b/tour/tour.go
index 04c840d091e..58b92af30d0 100644
--- a/tour/tour.go
+++ b/tour/tour.go
@@ -4,7 +4,6 @@ import (
 	"strconv"
 	"strings"
 
-	content "github.com/jbenet/go-ipfs/tour/content"
 	u "github.com/jbenet/go-ipfs/util"
 )
 
@@ -28,7 +27,12 @@ func (a IDSlice) Less(i, j int) bool { return a[i].LessThan(a[j]) }
 // Topic is a type of objects that structures a tour topic.
 type Topic struct {
 	ID ID
-	content.Content
+	Content
+}
+
+type Content struct {
+	Title string
+	Text  string
 }
 
 // Topics is a sorted list of topic IDs

From b2323afeddca88c6a31de5711ab0a91ffa6d5482 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 22:30:30 -0800
Subject: [PATCH 04/15] refactor(tour) extract chapters

---
 tour/all.go | 46 ++++++++++++++++++++++++++++++++++------------
 1 file changed, 34 insertions(+), 12 deletions(-)

diff --git a/tour/all.go b/tour/all.go
index 3bb3da7779e..723249a1e7c 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -1,6 +1,9 @@
 package tour
 
-import "sort"
+import (
+	"fmt"
+	"sort"
+)
 
 func init() {
 	for _, t := range allTopics {
@@ -11,20 +14,33 @@ func init() {
 	sort.Sort(IDSlice(IDs))
 }
 
+var (
+	Introduction = Chapter(0)
+	FileBasics   = Chapter(1)
+	NodeBasics   = Chapter(2)
+	MerkleDag    = Chapter(3)
+	Network      = Chapter(4)
+	Daemon       = Chapter(5)
+	Routing      = Chapter(6)
+	Exchange     = Chapter(7)
+	Ipns         = Chapter(8)
+	Mounting     = Chapter(9)
+	Plumbing     = Chapter(10)
+	Formats      = Chapter(11)
+)
+
 // Topics contains a mapping of Tour Topic ID to Topic
 var allTopics = []Topic{
-	Topic{ID: ID("0.0"), Content: IntroHelloMars},
-	Topic{ID: ID("0.1"), Content: IntroTour},
-	Topic{ID: ID("0.2"), Content: IntroAboutIpfs},
+	Topic{ID: Introduction(0), Content: IntroHelloMars},
+	Topic{ID: Introduction(1), Content: IntroTour},
+	Topic{ID: Introduction(2), Content: IntroAboutIpfs},
 
-	// File Basics
-	Topic{ID: ID("X.0"), Content: FileBasicsFilesystem},
-	Topic{ID: ID("X.1"), Content: FileBasicsGetting},
-	Topic{ID: ID("X.2"), Content: FileBasicsAdding},
-	Topic{ID: ID("X.3"), Content: FileBasicsDirectories},
-	Topic{ID: ID("X.3"), Content: FileBasicsDirectories},
-	Topic{ID: ID("X.4"), Content: FileBasicsMounting},
-	Topic{ID: ID("X.2"), Content: FileBasicsAdding},
+	Topic{ID: FileBasics(1), Content: FileBasicsFilesystem},
+	Topic{ID: FileBasics(2), Content: FileBasicsGetting},
+	Topic{ID: FileBasics(3), Content: FileBasicsAdding},
+	Topic{ID: FileBasics(4), Content: FileBasicsDirectories},
+	Topic{ID: FileBasics(5), Content: FileBasicsDistributed},
+	Topic{ID: FileBasics(6), Content: FileBasicsMounting},
 }
 
 // Introduction
@@ -77,3 +93,9 @@ var FileBasicsMounting = Content{
 	Text: `ipfs mount (simple)
 	`,
 }
+
+func Chapter(number int) func(topic int) ID {
+	return func(topic int) ID {
+		return ID(fmt.Sprintf("%d.%d", number, topic))
+	}
+}

From b353f75e219f3de1cef84f51f3896c0d56444fdd Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 22:34:38 -0800
Subject: [PATCH 05/15] docs(tour) comment Chapter func

---
 tour/all.go | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tour/all.go b/tour/all.go
index 723249a1e7c..b09bd923699 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -94,6 +94,12 @@ var FileBasicsMounting = Content{
 	`,
 }
 
+// Chapter is used to define a chapter once and derive IDs for any number of
+// sections within.
+//
+// eg.
+// 		Intro := Chapter(1)
+// 		ID("1.1") == Intro(1)
 func Chapter(number int) func(topic int) ID {
 	return func(topic int) ID {
 		return ID(fmt.Sprintf("%d.%d", number, topic))

From eba22da632850bf0ba3ee57b7d4d7b5381f43631 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 22:36:00 -0800
Subject: [PATCH 06/15] docs(tour) Chapter

---
 tour/all.go | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tour/all.go b/tour/all.go
index b09bd923699..65ea92cbb6e 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -97,6 +97,8 @@ var FileBasicsMounting = Content{
 // Chapter is used to define a chapter once and derive IDs for any number of
 // sections within.
 //
+// It's designed to make it easy to re-order chapters with minimal fuss.
+//
 // eg.
 // 		Intro := Chapter(1)
 // 		ID("1.1") == Intro(1)

From 2db25a6762a0411b827a023370e815da70af0ee4 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 22:36:56 -0800
Subject: [PATCH 07/15] refactor(tour0 move chapter to it's own file

---
 tour/all.go     | 19 +------------------
 tour/chapter.go | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 18 deletions(-)
 create mode 100644 tour/chapter.go

diff --git a/tour/all.go b/tour/all.go
index 65ea92cbb6e..2deb9d64564 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -1,9 +1,6 @@
 package tour
 
-import (
-	"fmt"
-	"sort"
-)
+import "sort"
 
 func init() {
 	for _, t := range allTopics {
@@ -93,17 +90,3 @@ var FileBasicsMounting = Content{
 	Text: `ipfs mount (simple)
 	`,
 }
-
-// Chapter is used to define a chapter once and derive IDs for any number of
-// sections within.
-//
-// It's designed to make it easy to re-order chapters with minimal fuss.
-//
-// eg.
-// 		Intro := Chapter(1)
-// 		ID("1.1") == Intro(1)
-func Chapter(number int) func(topic int) ID {
-	return func(topic int) ID {
-		return ID(fmt.Sprintf("%d.%d", number, topic))
-	}
-}
diff --git a/tour/chapter.go b/tour/chapter.go
new file mode 100644
index 00000000000..6e28ec04076
--- /dev/null
+++ b/tour/chapter.go
@@ -0,0 +1,14 @@
+import "fmt"
+
+// sections within.
+//
+// It's designed to make it easy to re-order chapters with minimal fuss.
+//
+// eg.
+// 		Intro := Chapter(1)
+// 		ID("1.1") == Intro(1)
+func Chapter(number int) func(topic int) ID {
+	return func(topic int) ID {
+		return ID(fmt.Sprintf("%d.%d", number, topic))
+	}
+}

From 97f7b60186be53cbf70c3f8cda86ea37672b33cf Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 22:48:37 -0800
Subject: [PATCH 08/15] feat(tour) add node basics

---
 tour/all.go | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/tour/all.go b/tour/all.go
index 2deb9d64564..b90fd186f8b 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -38,6 +38,11 @@ var allTopics = []Topic{
 	Topic{ID: FileBasics(4), Content: FileBasicsDirectories},
 	Topic{ID: FileBasics(5), Content: FileBasicsDistributed},
 	Topic{ID: FileBasics(6), Content: FileBasicsMounting},
+
+	Topic{NodeBasics(0), NodeBasicsInit},
+	Topic{NodeBasics(1), NodeBasicsHelp},
+	Topic{NodeBasics(2), NodeBasicsUpdate},
+	Topic{NodeBasics(3), NodeBasicsConfig},
 }
 
 // Introduction
@@ -90,3 +95,26 @@ var FileBasicsMounting = Content{
 	Text: `ipfs mount (simple)
 	`,
 }
+
+// Node Basics
+
+var NodeBasicsInit = Content{
+	Title: "Basics - init",
+	Text: `
+	`,
+}
+var NodeBasicsHelp = Content{
+	Title: "Basics - help",
+	Text: `
+	`,
+}
+var NodeBasicsUpdate = Content{
+	Title: "Basics - update",
+	Text: `
+	`,
+}
+var NodeBasicsConfig = Content{
+	Title: "Basics - config",
+	Text: `
+	`,
+}

From b1e67111f387fd0582a38ac9a5083ae9d0e57b2b Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 23:22:22 -0800
Subject: [PATCH 09/15] feat(tour) merkledag chapter

---
 tour/all.go     | 23 +++++++++++++++++++++++
 tour/chapter.go |  2 ++
 2 files changed, 25 insertions(+)

diff --git a/tour/all.go b/tour/all.go
index b90fd186f8b..0fb3243f3f9 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -43,6 +43,17 @@ var allTopics = []Topic{
 	Topic{NodeBasics(1), NodeBasicsHelp},
 	Topic{NodeBasics(2), NodeBasicsUpdate},
 	Topic{NodeBasics(3), NodeBasicsConfig},
+
+	Topic{MerkleDag(0), MerkleDagIntro},
+	Topic{MerkleDag(1), MerkleDagContentAddressing},
+	Topic{MerkleDag(2), MerkleDagContentAddressingLinks},
+	Topic{MerkleDag(3), MerkleDagRedux},
+	Topic{MerkleDag(4), MerkleDagIpfsObjects},
+	Topic{MerkleDag(5), MerkleDagIpfsPaths},
+	Topic{MerkleDag(6), MerkleDagImmutability},
+	Topic{MerkleDag(7), MerkleDagUseCaseUnixFS},
+	Topic{MerkleDag(8), MerkleDagUseCaseGitObjects},
+	Topic{MerkleDag(9), MerkleDagUseCaseOperationalTransforms},
 }
 
 // Introduction
@@ -118,3 +129,15 @@ var NodeBasicsConfig = Content{
 	Text: `
 	`,
 }
+
+// Merkle DAG
+var MerkleDagIntro = Content{}
+var MerkleDagContentAddressing = Content{}
+var MerkleDagContentAddressingLinks = Content{}
+var MerkleDagRedux = Content{}
+var MerkleDagIpfsObjects = Content{}
+var MerkleDagIpfsPaths = Content{}
+var MerkleDagImmutability = Content{}
+var MerkleDagUseCaseUnixFS = Content{}
+var MerkleDagUseCaseGitObjects = Content{}
+var MerkleDagUseCaseOperationalTransforms = Content{}
diff --git a/tour/chapter.go b/tour/chapter.go
index 6e28ec04076..13235886d7c 100644
--- a/tour/chapter.go
+++ b/tour/chapter.go
@@ -1,3 +1,5 @@
+package tour
+
 import "fmt"
 
 // sections within.

From 747c9cd803865a6223b32fb319f801feb768e57c Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 23:29:20 -0800
Subject: [PATCH 10/15] feat(tour) network

---
 tour/all.go | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/tour/all.go b/tour/all.go
index 0fb3243f3f9..ce1e7136294 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -54,6 +54,13 @@ var allTopics = []Topic{
 	Topic{MerkleDag(7), MerkleDagUseCaseUnixFS},
 	Topic{MerkleDag(8), MerkleDagUseCaseGitObjects},
 	Topic{MerkleDag(9), MerkleDagUseCaseOperationalTransforms},
+
+	Topic{Network(0), Network_Intro},
+	Topic{Network(1), Network_Ipfs_Peers},
+	Topic{Network(2), Network_Daemon},
+	Topic{Network(3), Network_Routing},
+	Topic{Network(4), Network_Exchange},
+	Topic{Network(5), Network_Intro},
 }
 
 // Introduction
@@ -141,3 +148,10 @@ var MerkleDagImmutability = Content{}
 var MerkleDagUseCaseUnixFS = Content{}
 var MerkleDagUseCaseGitObjects = Content{}
 var MerkleDagUseCaseOperationalTransforms = Content{}
+
+var Network_Intro = Content{}
+var Network_Ipfs_Peers = Content{}
+var Network_Daemon = Content{}
+var Network_Routing = Content{}
+var Network_Exchange = Content{}
+var Network_Naming = Content{}

From 37ca4475cf1a3635db414185fffd0e4d0e30a9b9 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 23:38:08 -0800
Subject: [PATCH 11/15] feat(tour) routing

---
 tour/all.go | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/tour/all.go b/tour/all.go
index ce1e7136294..88d75cf944b 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -11,6 +11,16 @@ func init() {
 	sort.Sort(IDSlice(IDs))
 }
 
+// TODO move content into individual files if desired
+
+// TODO(brian): If sub-topics are needed, write recursively (as tree comprised
+// of Section nodes:
+//
+// type Section interface {
+// 	Sections() []Section
+// 	Topic() Topic
+// }
+
 var (
 	Introduction = Chapter(0)
 	FileBasics   = Chapter(1)
@@ -61,6 +71,16 @@ var allTopics = []Topic{
 	Topic{Network(3), Network_Routing},
 	Topic{Network(4), Network_Exchange},
 	Topic{Network(5), Network_Intro},
+
+	Topic{Daemon(0), Daemon_Intro},
+	Topic{Daemon(1), Daemon_Running_Commands},
+	Topic{Daemon(2), Daemon_Web_UI},
+
+	Topic{Routing(0), Routing_Intro},
+	Topic{Routing(1), Rouing_Interface},
+	Topic{Routing(2), Routing_Resolving},
+	Topic{Routing(3), Routing_DHT},
+	Topic{Routing(4), Routing_Other},
 }
 
 // Introduction
@@ -155,3 +175,13 @@ var Network_Daemon = Content{}
 var Network_Routing = Content{}
 var Network_Exchange = Content{}
 var Network_Naming = Content{}
+
+var Daemon_Intro = Content{}
+var Daemon_Running_Commands = Content{}
+var Daemon_Web_UI = Content{}
+
+var Routing_Intro = Content{}
+var Rouing_Interface = Content{}
+var Routing_Resolving = Content{}
+var Routing_DHT = Content{}
+var Routing_Other = Content{}

From 3d4143b2b6fd64cdbbcdeac8498888e5779dedec Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 23:45:59 -0800
Subject: [PATCH 12/15] feat(tour) exchange, ipns

---
 tour/all.go | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/tour/all.go b/tour/all.go
index 88d75cf944b..5f2bc4720a0 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -81,6 +81,19 @@ var allTopics = []Topic{
 	Topic{Routing(2), Routing_Resolving},
 	Topic{Routing(3), Routing_DHT},
 	Topic{Routing(4), Routing_Other},
+
+	Topic{Exchange(0), Exchange_Intro},
+	Topic{Exchange(1), Exchange_Getting_Blocks},
+	Topic{Exchange(2), Exchange_Strategies},
+	Topic{Exchange(3), Exchange_Bitswap},
+
+	Topic{Ipns(0), Ipns_Name_System},
+	Topic{Ipns(1), Ipns_Mutability},
+	Topic{Ipns(2), Ipns_PKI_Review},
+	Topic{Ipns(3), Ipns_Publishing},
+	Topic{Ipns(4), Ipns_Resolving},
+	Topic{Ipns(5), Ipns_Consistency},
+	Topic{Ipns(6), Ipns_Records_Etc},
 }
 
 // Introduction
@@ -185,3 +198,16 @@ var Rouing_Interface = Content{}
 var Routing_Resolving = Content{}
 var Routing_DHT = Content{}
 var Routing_Other = Content{}
+
+var Exchange_Intro = Content{}
+var Exchange_Bitswap = Content{}
+var Exchange_Strategies = Content{}
+var Exchange_Getting_Blocks = Content{}
+
+var Ipns_Consistency = Content{}
+var Ipns_Mutability = Content{}
+var Ipns_Name_System = Content{}
+var Ipns_PKI_Review = Content{}
+var Ipns_Publishing = Content{}
+var Ipns_Records_Etc = Content{}
+var Ipns_Resolving = Content{}

From 7436696460cc3299099cfdb5e1feb18614b9c76e Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Tue, 4 Nov 2014 23:55:24 -0800
Subject: [PATCH 13/15] docs(tour) the rest

---
 tour/all.go | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/tour/all.go b/tour/all.go
index 5f2bc4720a0..309fa7b1b74 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -94,6 +94,25 @@ var allTopics = []Topic{
 	Topic{Ipns(4), Ipns_Resolving},
 	Topic{Ipns(5), Ipns_Consistency},
 	Topic{Ipns(6), Ipns_Records_Etc},
+
+	Topic{Mounting(0), Mounting_General},
+	Topic{Mounting(1), Mounting_Ipfs},
+	Topic{Mounting(2), Mounting_Ipns},
+
+	Topic{Plumbing(0), Plumbing_Intro},
+	Topic{Plumbing(1), Plumbing_Ipfs_Block},
+	Topic{Plumbing(2), Plumbing_Ipfs_Object},
+	Topic{Plumbing(3), Plumbing_Ipfs_Refs},
+	Topic{Plumbing(4), Plumbing_Ipfs_Ping},
+	Topic{Plumbing(5), Plumbing_Ipfs_Id},
+
+	Topic{Formats(0), Formats_MerkleDag},
+	Topic{Formats(1), Formats_Multihash},
+	Topic{Formats(2), Formats_Multiaddr},
+	Topic{Formats(3), Formats_Multicodec},
+	Topic{Formats(4), Formats_Multicodec},
+	Topic{Formats(5), Formats_Multikey},
+	Topic{Formats(6), Formats_Protocol_Specific},
 }
 
 // Introduction
@@ -211,3 +230,21 @@ var Ipns_PKI_Review = Content{}
 var Ipns_Publishing = Content{}
 var Ipns_Records_Etc = Content{}
 var Ipns_Resolving = Content{}
+
+var Mounting_General = Content{} // TODO note fuse
+var Mounting_Ipfs = Content{}    // TODO cd, ls, cat
+var Mounting_Ipns = Content{}    // TODO editing
+
+var Plumbing_Intro = Content{}
+var Plumbing_Ipfs_Block = Content{}
+var Plumbing_Ipfs_Object = Content{}
+var Plumbing_Ipfs_Refs = Content{}
+var Plumbing_Ipfs_Ping = Content{}
+var Plumbing_Ipfs_Id = Content{}
+
+var Formats_MerkleDag = Content{}
+var Formats_Multihash = Content{}
+var Formats_Multiaddr = Content{}
+var Formats_Multicodec = Content{}
+var Formats_Multikey = Content{}
+var Formats_Protocol_Specific = Content{}

From 1fd5abf408f50040b932e0a576b995f7b1cc510e Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Wed, 5 Nov 2014 00:02:27 -0800
Subject: [PATCH 14/15] todo(tour) add

---
 tour/all.go | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/tour/all.go b/tour/all.go
index 309fa7b1b74..1930acb7a37 100644
--- a/tour/all.go
+++ b/tour/all.go
@@ -22,6 +22,11 @@ func init() {
 // }
 
 var (
+	// TODO bootstrapping
+
+	// TODO pinning: ensuring a block is kept in local storage (i.e. not
+	// evicted from cache).
+
 	Introduction = Chapter(0)
 	FileBasics   = Chapter(1)
 	NodeBasics   = Chapter(2)
@@ -72,6 +77,8 @@ var allTopics = []Topic{
 	Topic{Network(4), Network_Exchange},
 	Topic{Network(5), Network_Intro},
 
+	// TODO daemon - {API, API Clients, Example} how old-school http + ftp
+	// clients show it
 	Topic{Daemon(0), Daemon_Intro},
 	Topic{Daemon(1), Daemon_Running_Commands},
 	Topic{Daemon(2), Daemon_Web_UI},
@@ -82,6 +89,8 @@ var allTopics = []Topic{
 	Topic{Routing(3), Routing_DHT},
 	Topic{Routing(4), Routing_Other},
 
+	// TODO Exchange_Providing
+	// TODO Exchange_Providers
 	Topic{Exchange(0), Exchange_Intro},
 	Topic{Exchange(1), Exchange_Getting_Blocks},
 	Topic{Exchange(2), Exchange_Strategies},
@@ -170,6 +179,14 @@ var FileBasicsMounting = Content{
 
 var NodeBasicsInit = Content{
 	Title: "Basics - init",
+
+	// TODO touch on PKI
+	//
+	// This is somewhat relevant at ipfs init since the generated key pair is the
+	// basis for the node's identity in the network. A cursory nod may be
+	// sufficient at that stage, and goes a long way in explaining init's raison
+	// d'ĂȘtre.
+	// NB: user is introduced to ipfs init before ipfs add.
 	Text: `
 	`,
 }
@@ -196,7 +213,14 @@ var MerkleDagContentAddressingLinks = Content{}
 var MerkleDagRedux = Content{}
 var MerkleDagIpfsObjects = Content{}
 var MerkleDagIpfsPaths = Content{}
-var MerkleDagImmutability = Content{}
+var MerkleDagImmutability = Content{
+	Title: "Immutability",
+	Text: `
+	TODO plan9
+	TODO git
+	`,
+}
+
 var MerkleDagUseCaseUnixFS = Content{}
 var MerkleDagUseCaseGitObjects = Content{}
 var MerkleDagUseCaseOperationalTransforms = Content{}
@@ -226,7 +250,12 @@ var Exchange_Getting_Blocks = Content{}
 var Ipns_Consistency = Content{}
 var Ipns_Mutability = Content{}
 var Ipns_Name_System = Content{}
-var Ipns_PKI_Review = Content{}
+var Ipns_PKI_Review = Content{
+	Title: "PKI Review",
+	Text: `
+	TODO sign verify
+	`,
+}
 var Ipns_Publishing = Content{}
 var Ipns_Records_Etc = Content{}
 var Ipns_Resolving = Content{}

From 72414ce72c1c9bd6a08ef0fae020930a7047ec58 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Wed, 5 Nov 2014 00:04:44 -0800
Subject: [PATCH 15/15] docs(tour) chapter

---
 tour/chapter.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tour/chapter.go b/tour/chapter.go
index 13235886d7c..e7af4f582e0 100644
--- a/tour/chapter.go
+++ b/tour/chapter.go
@@ -2,13 +2,13 @@ package tour
 
 import "fmt"
 
-// sections within.
+// returns a partially applied function. 
 //
 // It's designed to make it easy to re-order chapters with minimal fuss.
 //
 // eg.
 // 		Intro := Chapter(1)
-// 		ID("1.1") == Intro(1)
+// 		ID("1.1") == Intro(1) == Chapter(1)(1)
 func Chapter(number int) func(topic int) ID {
 	return func(topic int) ID {
 		return ID(fmt.Sprintf("%d.%d", number, topic))