diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,12 +1,22 @@
 # Revision history for shine
 
-## 0.1.0.0  -- 2016-04-20
+## 0.2.0.4  -- 2020-01-04
 
-* First version.
+* Docs updates, mainly about handling assets
+* Moved the failing "tests" to the new shine-examples package
 
+## 0.2.0.3  -- 2018-07-11
+
+* Misc bugfixes
+* Misc docs updates
+
 ## 0.2.0.0  -- 2017-06-23
 
-* Changed WIndow to Document in some places
+* Changed Window to Document in some places
 * Use Double for everything
 * Use the new ghcjs-dom types
+
+## 0.1.0.0  -- 2016-04-20
+
+* First version.
 
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2016-2018 Francesco Gazzetta
+Copyright (c) 2016-2019 Francesco Gazzetta
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
 
 Heavily inspired by [gloss](http://gloss.ouroborus.net/).
 
-**demo** (compiled tests) [here](http://fgaz.github.io/shine/tests)
+**demo** (compiled shine-examples) [here](http://fgaz.github.io/shine/shine-examples)
 
 ## Compiling
 
@@ -88,8 +88,8 @@
 
 ```haskell
 main :: IO ()
-    {- get the context, see before -}
-    draw ctx concentricCircles
+    {- omitted: get the context, see before -}
+    render ctx concentricCircles
 ```
 
 #### `animate`
@@ -106,7 +106,7 @@
 
 main :: IO ()
 main =  do
-    {- get the context, see before -}
+    {- omitted: get the context, see before -}
     animate ctx 30 animation
 ```
 
@@ -121,7 +121,7 @@
 -- left mouse button is pressed
 main :: IO ()
 main = do
-    {- get the context and the document, see before -}
+    {- omitted: get the context and the document, see before -}
     play ctx doc 30 initialState draw handleInput step
   where
     -- our state represents the state of the left mouse button
@@ -134,4 +134,29 @@
     handleInput _ = id -- catch-all for all other events
     step _ = id -- our state does not depend on time
 ```
+
+### Examples
+
+See the [`shine-examples`](./shine-examples) package
+([Hackage](https://hackage.haskell.org/package/shine-examples)).
+
+### Handling assets
+
+Handling assets with ghcjs and the browser is somewhat tricky.
+
+The usual way of doing it for normal haskell programs is to use
+[`data-files`](https://www.haskell.org/cabal/users-guide/developing-packages.html#pkg-field-data-files).
+Unfortunately, this work by either hardcoding an absolute path in the executable,
+which will not work when the program is put on a server in a different path,
+or with an environment variable override (`$pkgname_datadir`),
+which will not work because
+[environment variables do not exist in the browser](https://github.com/ghcjs/shims/blob/de9560ee1fb8d1ca58c12da20c71a778eb08f3db/src/environment.js#L155).
+
+So, for now, the solution is to explicitly specify absolute or relative paths
+in the source code, and then to manyully copy the assets to the appropriate
+location after building/deploying the code.
+This is what I did in the `animated-shapes` demo for the peppers image.
+
+Relevant cabal ticket, discussing a possible new way of handling assets:
+https://github.com/haskell/cabal/issues/6096#issuecomment-570784857
 
diff --git a/shine.cabal b/shine.cabal
--- a/shine.cabal
+++ b/shine.cabal
@@ -1,12 +1,12 @@
 name: shine
-version: 0.2.0.3
+version: 0.2.0.4
 cabal-version: >=1.8
 build-type: Simple
 license: MIT
 license-file: LICENSE
-copyright: (c) 2016-2018 Francesco Gazzetta
+copyright: (c) 2016-2019 Francesco Gazzetta
 author: Francesco Gazzetta
-maintainer: Francesco Gazzetta <francygazz@gmail.com>
+maintainer: Francesco Gazzetta <fgaz@fgaz.me>
 stability: experimental
 homepage: https://github.com/fgaz/shine
 bug-reports: https://github.com/fgaz/shine/issues
@@ -32,23 +32,11 @@
                      Graphics.Shine.Render
     build-depends: base >=4.11 && <4.13,
                    ghcjs-dom >=0.9 && <0.10,
-                   ghcjs-prim,
+                   ghcjs-prim >=0.1 && <0.2,
                    keycode >=0.2 && <0.3,
-                   time,
-                   mtl,
-                   transformers
+                   time >=1.8 && <1.10,
+                   mtl >=2.2 && <2.3,
+                   transformers >=0.5 && <0.6
     hs-source-dirs: src
     ghc-options: -O2 -Wall
 
- --TODO run this in an actual window
-test-suite test-shine-animateeverything
-    type:       exitcode-stdio-1.0
-    main-is:    everything.hs
-    hs-source-dirs: tests
-    build-depends: base, ghcjs-dom, shine
-
-test-suite test-shine-simpleinteraction
-    type:       exitcode-stdio-1.0
-    main-is:    simpleInteraction.hs
-    hs-source-dirs: tests
-    build-depends: base, ghcjs-dom, shine
diff --git a/tests/everything.hs b/tests/everything.hs
deleted file mode 100644
--- a/tests/everything.hs
+++ /dev/null
@@ -1,47 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-import Graphics.Shine
-import Graphics.Shine.Image
-import Graphics.Shine.Picture
-
-import GHCJS.DOM (currentDocumentUnchecked)
-
-#if defined(ghcjs_HOST_OS)
-run :: a -> a
-run = id
-#elif defined(MIN_VERSION_jsaddle_wkwebview)
-import Language.Javascript.JSaddle.WKWebView (run)
-#else
-import Language.Javascript.JSaddle.WebKitGTK (run)
-#endif
-
-animation :: ImageData -> Double -> Picture
-animation img x =
-    Translate (75+x'/2) 15 (RectF (150+x') 30)
-    <> Colored (Color 255 0 0 1.0) (Translate 15 (75+x'/2) $ Rect 30 (150+x'))
-    <> Colored (Color 200 200 0 1.0) (Translate 660 30 $ RectF 120 60)
-    <> Colored (Color 100 100 (floor x') 1.0) (Translate 600 340 $ RectF 120 240)
-    <> Translate (150+x') 150 (circle 100)
-    <> Translate 140 120 (circle (80+x'))
-    <> Line 400 400 10 x'
-    <> Colored (Color 255 0 0 1.0) (Translate 800 500 $ CircleF (x'/10))
-    <> foldMap (Translate 300 300 . circle) [1,5..x']
-    <> Translate 350 350 (Rotate (x'/200) $ RectF 150 30)
-    <> Translate 100 500 (Image Original img)
-    <> Colored (Color 0 0 255 1) -- blue pentagon
-           (Translate 200 500
-               (Polygon [ (-110,-80)
-                        , (50,-120)
-                        , (140,20)
-                        , (30,140)
-                        , (-120,80)
-                        ]))
-    <> Translate 600 500 (Text "20px Sans" CenterAlign (Just 300) "The quick brown fox jumps over the lazy dog")
-  where x' = sin (x*3) *100 +100
-
-main :: IO ()
-main = run $ do
-    doc <- currentDocumentUnchecked
-    ctx <- fixedSizeCanvas doc 800 600
-    img <- makeImage "httpS://placehold.it/200x70/afa"
-    animate ctx 30 $ animation img
diff --git a/tests/simpleInteraction.hs b/tests/simpleInteraction.hs
deleted file mode 100644
--- a/tests/simpleInteraction.hs
+++ /dev/null
@@ -1,30 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-import Graphics.Shine
-import Graphics.Shine.Input
-import Graphics.Shine.Picture
-
-import GHCJS.DOM (currentDocumentUnchecked)
-
-#if defined(ghcjs_HOST_OS)
-run :: a -> a
-run = id
-#elif defined(MIN_VERSION_jsaddle_wkwebview)
-import Language.Javascript.JSaddle.WKWebView (run)
-#else
-import Language.Javascript.JSaddle.WebKitGTK (run)
-#endif
-
-main :: IO ()
-main = run $ do
-    doc <- currentDocumentUnchecked
-    ctx <- fixedSizeCanvas doc 800 600
-    play ctx doc 30 initialState draw handleInput step
-  where
-    initialState = False
-    draw False = Empty
-    draw True = RectF 300 300
-    handleInput (MouseBtn BtnLeft Down _) = const True
-    handleInput (MouseBtn BtnLeft Up _) = const False
-    handleInput _ = id
-    step _ = id
