Update README
diff --git a/README.md b/README.md
index d692196..963ea7a 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,78 @@
-# Alice – painless middleware chaining for Go.
+# Alice 
+
+`Alice` provides a convenient way to chain 
+your HTTP middleware functions and the app handler.
+
+In short, it transforms `Middleware1(Middleware2(Middleware3(App)))`
+to `alice.New(Middleware1, Middleware, Middleware3).Then(App)`.
+
+### Why?
+
+None of the other middleware chaining solutions
+behaves exactly like Alice.
+
+Alice is as minimal as a chaining solution gets.
+In its essence, it's just a for loop that does the wrapping for you.
+
+### Usage
+
+Your middleware constructors should have the form of
+
+    func (http.Handler) http.Handler
+
+Some middleware provide this out of the box.
+For ones that don't, it's trivial to write one yourself.
+
+    func myStripPrefix(h http.Handler) http.Handler {
+        return http.StripPrefix("/old", h)
+    }
+
+This complete example shows the full power of Alice.
+
+	package main
+
+	import (
+		"net/http"
+		"time"
+
+		"github.com/PuerkitoBio/throttled"
+		"github.com/justinas/alice"
+		"github.com/justinas/nosurf"
+	)
+
+	func timeoutHandler(h http.Handler) http.Handler {
+		return http.TimeoutHandler(h, 1*time.Second, "timed out")
+	}
+
+	func myApp(w http.ResponseWriter, r *http.Request) {
+		w.Write([]byte("Hello world!"))
+	}
+
+	func main() {
+		th := throttled.Interval(throttled.PerSec(10), 1, &throttled.VaryBy{Path: true}, 50)
+		myHandler := http.HandlerFunc(myApp)
+
+		chain := alice.New(th.Throttle, timeoutHandler, nosurf.NewPure).Then(myHandler)
+		http.ListenAndServe(":8000", chain)
+	}
+
+Here, the request will pass [throttled](https://github.com/PuerkitoBio/throttled) first
+then an http.TimeoutHandler we've set up,
+then [nosurf](https://github.com/justinas/nosurf)
+and will finally reach our handler.
+
+Note that Alice makes **no guarantees** for
+how one or another piece of  middleware will behave.
+It does not execute all handlers sequentially
+but wraps them in one another.
+
+If a piece of middleware were to stop the chain,
+the request will not reach the inner handlers.
+This is intentional behavior.
+
+### Contributing
+
+0. Find an issue that bugs you / open a new one.
+1. Discuss.
+2. Branch off the `develop` branch, commit, test.
+3. Make a pull request / attach the commits to the issue.