+ home | + documentation | + download | + source +
+ diff --git a/gh-pages/manifesto.md b/gh-pages/manifesto.md
new file mode 100644
index 0000000000..bcd81a40d0
--- /dev/null
+++ b/gh-pages/manifesto.md
@@ -0,0 +1,46 @@
+---
+layout: default
+title: Neon Manifesto
+---
+
+Programming languages today are full of features, and there is a trend toward brevity.
+Brevity is highly expressive, for an expert who understands the notation.
+However, for a new learner or a casual user, brevity promotes unreadable code.
+
+## Principles of Design
+
+* Prefer keywords over punctuation
+* Good error messages
+* Avoid implicit behaviour
+* Explicit declarations
+* Single meaning per keyword/operator
+* Principle of least surprise
+* Easy lookup
+
+### Prefer keywords over punctuation
+
+Punctuation is important, but it should be used sparingly.
+
+### Good error messages
+
+Error messages should explain what is wrong, with suggestions of ways to correct the problem.
+
+### Avoid implicit behaviour
+
+There will be no hidden, implicit, or automatic calls made to code that is not expressly visible in the source.
+
+### Explicit declarations
+
+Everything is declared, and identifiers from modules are always qualified.
+
+### Single meaning per keyword/operator
+
+To the greatest reasonable extent, keywords and operators only have one meaning.
+
+### Principle of least surprise
+
+This one is hard to quantify, but it's good.
+
+### Easy lookup
+
+By using keywords instead of punctuation, and by using explicit declarations, it is easy to look up unknown things in the documentation.
diff --git a/gh-pages/motivation.md b/gh-pages/motivation.md
new file mode 100644
index 0000000000..ddb7db00ac
--- /dev/null
+++ b/gh-pages/motivation.md
@@ -0,0 +1,32 @@
+---
+layout: default
+title: Motivation
+---
+
+The primary goal of Neon is to find out whether a useful programming language can avoid some of the common errors that beginners frequently encounter in other languages.
+
+After many years of participation on [Stack Overflow](http://stackoverflow.com), one starts to recognise the same kinds of problems that beginners encounter over and over.
+Some of these errors are:
+
+* Floating point errors due to binary floating point
+* Writing `if (x = 0)` when `if (x == 0)` is intended
+* Null pointer exceptions
+* Unintended empty loop with `while (condition);`
+* Forgetting to use the return value of a function
+
+It is my opinion that these kinds of errors can be avoided by language design.
+Neon is an experiment that attempts to show that this is the case.
+
+## Influences
+
+Many languages have influenced the design or specific features of Neon. Some are:
+
+- Pascal (`:=` for assignment, `VAR` keyword, nested functions)
+- Modula-2 (upper case keywords)
+- Ada (`IN`, `OUT`, `INOUT` parameter passing modes, arbitrary base notation)
+- Python (standard library)
+- C++ (`<...>` syntax for parameterised types)
+- Prolog (`%` single line comment character)
+- Scheme (`%|...|%` block comment, Scheme uses `#|...|#`)
+
+There is also a lot of *negative* influence, where the presence of a feature in a language has the potential to be misused (eg. `if (a = b)` in C). 
diff --git a/gh-pages/overview.md b/gh-pages/overview.md
new file mode 100644
index 0000000000..5b64aa322e
--- /dev/null
+++ b/gh-pages/overview.md
@@ -0,0 +1,241 @@
+---
+layout: default
+title: Neon Overview
+---
+
+# Neon Overview
+
+The following is a brief description of Neon for experienced programmers.
+There are plenty of examples, because experienced programmers know how to read code, and can pick up concepts more quickly by reading code than by reading a description of code.
+
+Neon is a statically typed imperative language, with roots in Pascal, Modula-2, Ada, and [others](motivation.html).
+Program structure and modules are influenced by Python.
+
+    % This sample program greets the user
+    % until an empty line is entered.
+
+    LOOP
+        LET name: String := input("What is your name? ")
+        IF name = "" THEN
+            EXIT LOOP
+        END IF
+        print("Hello, \(name).")
+    END LOOP
+
+## General
+
+All identifiers are case sensitive.
+Language defined keywords are all upper case.
+Semicolons are not used.
+Identifier scope is defined by program block structure.
+Assignments have value semantics (deep copy).
+Forward declarations are not required.
+All variables must be explicitly initialised before use.
+
+## Types
+
+The scalar types are `Boolean` (`TRUE` or `FALSE`), `Number` (decimal floating point), `String` (Unicode text), `Bytes` (arbitrary blocks of bytes), and enumerations.
+Aggregate types are `RECORD` (named fields), `Array` (arbitrary size vector), and `Dictionary` (map indexed by a `String` key).
+Dynamic heap allocation is supported by a `POINTER` type.
+
+    TYPE Colour IS ENUM
+        red
+        green
+        blue
+    END ENUM
+
+    TYPE Person IS RECORD
+        name: String
+        eyes: Colour
+    END RECORD
+
+    LET b: Boolean := TRUE
+    LET n: Number := 123.456
+    LET s: String := "Hello world"
+    LET y: Bytes := HEXBYTES "00 01 02 03"
+    LET e: Colour := Colour.green
+    LET r: Person := Person("Alice", Colour.green)
+    LET a: Array
diff --git a/gh-pages/manifesto.md b/gh-pages/manifesto.md
new file mode 100644
index 0000000000..bcd81a40d0
--- /dev/null
+++ b/gh-pages/manifesto.md
@@ -0,0 +1,46 @@
+---
+layout: default
+title: Neon Manifesto
+---
+
+Programming languages today are full of features, and there is a trend toward brevity.
+Brevity is highly expressive, for an expert who understands the notation.
+However, for a new learner or a casual user, brevity promotes unreadable code.
+
+## Principles of Design
+
+* Prefer keywords over punctuation
+* Good error messages
+* Avoid implicit behaviour
+* Explicit declarations
+* Single meaning per keyword/operator
+* Principle of least surprise
+* Easy lookup
+
+### Prefer keywords over punctuation
+
+Punctuation is important, but it should be used sparingly.
+
+### Good error messages
+
+Error messages should explain what is wrong, with suggestions of ways to correct the problem.
+
+### Avoid implicit behaviour
+
+There will be no hidden, implicit, or automatic calls made to code that is not expressly visible in the source.
+
+### Explicit declarations
+
+Everything is declared, and identifiers from modules are always qualified.
+
+### Single meaning per keyword/operator
+
+To the greatest reasonable extent, keywords and operators only have one meaning.
+
+### Principle of least surprise
+
+This one is hard to quantify, but it's good.
+
+### Easy lookup
+
+By using keywords instead of punctuation, and by using explicit declarations, it is easy to look up unknown things in the documentation.
diff --git a/gh-pages/motivation.md b/gh-pages/motivation.md
new file mode 100644
index 0000000000..ddb7db00ac
--- /dev/null
+++ b/gh-pages/motivation.md
@@ -0,0 +1,32 @@
+---
+layout: default
+title: Motivation
+---
+
+The primary goal of Neon is to find out whether a useful programming language can avoid some of the common errors that beginners frequently encounter in other languages.
+
+After many years of participation on [Stack Overflow](http://stackoverflow.com), one starts to recognise the same kinds of problems that beginners encounter over and over.
+Some of these errors are:
+
+* Floating point errors due to binary floating point
+* Writing `if (x = 0)` when `if (x == 0)` is intended
+* Null pointer exceptions
+* Unintended empty loop with `while (condition);`
+* Forgetting to use the return value of a function
+
+It is my opinion that these kinds of errors can be avoided by language design.
+Neon is an experiment that attempts to show that this is the case.
+
+## Influences
+
+Many languages have influenced the design or specific features of Neon. Some are:
+
+- Pascal (`:=` for assignment, `VAR` keyword, nested functions)
+- Modula-2 (upper case keywords)
+- Ada (`IN`, `OUT`, `INOUT` parameter passing modes, arbitrary base notation)
+- Python (standard library)
+- C++ (`<...>` syntax for parameterised types)
+- Prolog (`%` single line comment character)
+- Scheme (`%|...|%` block comment, Scheme uses `#|...|#`)
+
+There is also a lot of *negative* influence, where the presence of a feature in a language has the potential to be misused (eg. `if (a = b)` in C). 
diff --git a/gh-pages/overview.md b/gh-pages/overview.md
new file mode 100644
index 0000000000..5b64aa322e
--- /dev/null
+++ b/gh-pages/overview.md
@@ -0,0 +1,241 @@
+---
+layout: default
+title: Neon Overview
+---
+
+# Neon Overview
+
+The following is a brief description of Neon for experienced programmers.
+There are plenty of examples, because experienced programmers know how to read code, and can pick up concepts more quickly by reading code than by reading a description of code.
+
+Neon is a statically typed imperative language, with roots in Pascal, Modula-2, Ada, and [others](motivation.html).
+Program structure and modules are influenced by Python.
+
+    % This sample program greets the user
+    % until an empty line is entered.
+
+    LOOP
+        LET name: String := input("What is your name? ")
+        IF name = "" THEN
+            EXIT LOOP
+        END IF
+        print("Hello, \(name).")
+    END LOOP
+
+## General
+
+All identifiers are case sensitive.
+Language defined keywords are all upper case.
+Semicolons are not used.
+Identifier scope is defined by program block structure.
+Assignments have value semantics (deep copy).
+Forward declarations are not required.
+All variables must be explicitly initialised before use.
+
+## Types
+
+The scalar types are `Boolean` (`TRUE` or `FALSE`), `Number` (decimal floating point), `String` (Unicode text), `Bytes` (arbitrary blocks of bytes), and enumerations.
+Aggregate types are `RECORD` (named fields), `Array` (arbitrary size vector), and `Dictionary` (map indexed by a `String` key).
+Dynamic heap allocation is supported by a `POINTER` type.
+
+    TYPE Colour IS ENUM
+        red
+        green
+        blue
+    END ENUM
+
+    TYPE Person IS RECORD
+        name: String
+        eyes: Colour
+    END RECORD
+
+    LET b: Boolean := TRUE
+    LET n: Number := 123.456
+    LET s: String := "Hello world"
+    LET y: Bytes := HEXBYTES "00 01 02 03"
+    LET e: Colour := Colour.green
+    LET r: Person := Person("Alice", Colour.green)
+    LET a: Array