diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright Author name here (c) 2018
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Author name here nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# plot-light-examples
+
+[![Build Status](https://travis-ci.org/ocramz/plot-light-examples.png)](https://travis-ci.org/ocramz/plot-light-examples)
+
+TODO Description.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/app/heatmap/Main.hs b/app/heatmap/Main.hs
new file mode 100644
--- /dev/null
+++ b/app/heatmap/Main.hs
@@ -0,0 +1,96 @@
+module Main where
+
+-- import Control.Monad (forM_)
+-- import Data.Ratio
+
+import Graphics.Rendering.Plot.Light
+import Graphics.Rendering.Plot.Light.PlotTypes
+
+import qualified Data.Attoparsec.Text as A
+import qualified Data.Text as T 
+import qualified Data.Text.IO as T (readFile, writeFile)
+import Data.Scientific (Scientific, toRealFloat)
+import Text.Blaze.Svg.Renderer.String (renderSvg)
+import Text.Blaze.Svg
+
+import qualified Data.Colour.Names as C
+import qualified Data.Colour as C
+-- import qualified Data.Colour.Palette.BrewerSet as CP
+-- import qualified Data.Colour.Palette.Harmony as CH
+
+
+fname = "data/heatmap-bw"
+
+xPlot = 400
+yPlot = 300
+fnameOut = "data/heatmap-1.svg"
+
+-- fdat :: FigureData Double
+fdat = FigureData xPlot yPlot 0.1 0.8 0.1 0.9 10
+
+palette0 = palette [C.blue, C.white, C.red] 15
+
+
+-- main :: IO ()
+-- main = do
+--   dat <- T.readFile fname
+--   let pd = A.parseOnly (gridNum space) dat
+--   case pd of Left e -> error e
+--              Right d -> do
+--                   let pixels = heatmap fdat palette0 d
+--                       svg_t = svgHeader xPlot yPlot pixels
+--                   -- putStrLn $ renderSvg svg_t
+--                   T.writeFile fnameOut $ T.pack $ renderSvg svg_t 
+    
+  
+
+
+main = do
+  let 
+    p1 = Point (-2) (-2)
+    p2 = Point 2 2
+    frame = mkFrame p1 p2
+    nx = 50
+    ny = 50
+    f x y = cos ( pi * theta ) * sin r 
+      where
+      r = x'**2 + y'**2
+      theta = atan2 y' x'
+      (x', y') = (fromRational x, fromRational y)
+    lps = plotFun2 f $ meshGrid frame nx ny
+    vmin = minimum $ _lplabel <$> lps
+    vmax = maximum $ _lplabel <$> lps       
+    pixels = heatmap' fdat palette0 frame (fromIntegral nx) (fromIntegral ny) lps
+    cbar = colourBar fdat palette0 10 vmin vmax 10 TopRight 100
+    svg_t = svgHeader xPlot yPlot $ do
+      axes fdat frame 2 C.black 10 10
+      pixels
+      cbar
+  T.writeFile "data/heatmap-3.svg" $ T.pack $ renderSvg svg_t
+  
+        
+
+-- withMeshGrid :: (RealFrac a, Enum a) =>
+--     Point a -> Point a -> a -> a -> (Frame a -> [Point a] -> t) -> t
+-- withMeshGrid p1 p2 nx ny f =
+--   withFrame p1 p2 $ \fr -> let
+--   grid = meshGrid fr nx ny in f fr grid 
+
+-- withFrame p1 p2 f = f frame where
+--   frame = mkFrame p1 p2
+
+
+
+
+-- parsers
+
+-- | Parse a row of numbers, separated by `sep`
+rowNums :: A.Parser s -> A.Parser [Scientific]
+rowNums = A.sepBy A.scientific
+
+rowNumSpace :: A.Parser [Scientific]
+rowNumSpace = rowNums space
+
+-- | parse a grid of numbers, separated by `sep`
+gridNum :: A.Parser s -> A.Parser [[Scientific]]
+gridNum sep = A.sepBy (rowNums sep) A.endOfLine
diff --git a/app/scatter/Main.hs b/app/scatter/Main.hs
new file mode 100644
--- /dev/null
+++ b/app/scatter/Main.hs
@@ -0,0 +1,47 @@
+module Main where
+
+import Control.Monad (forM_)
+
+import qualified Data.Colour as C
+import qualified Data.Colour.Names as C
+import Data.Scientific (Scientific, toRealFloat)
+import qualified Data.Text as T 
+import qualified Data.Text.IO as T (readFile, writeFile)
+import Text.Blaze.Svg.Renderer.String (renderSvg)
+
+import Graphics.Rendering.Plot.Light
+import Graphics.Rendering.Plot.Light.PlotTypes
+
+xPlot = 400
+yPlot = 300
+fnameOut = "data/scatter-1.svg"
+
+fdat = FigureData xPlot yPlot 0.1 0.8 0.1 0.9 10
+
+dats = zipWith LabeledPoint p_ l_ where
+  l_ = [-5, -4 .. ]
+  p_ = zipWith Point [4,7,12,23,90,34,24,5,6,12,3] [43,23,1,23,8,11,17,25,4,5]
+
+spdata = ScatterPointData Circle 3 3 C.red
+
+
+main = do
+  let
+    frameTo = frameFromFigData fdat
+    frameFrom = frameFromPoints $ _lp <$> dats
+    vmin = minimum $ _lplabel <$> dats
+    vmax = maximum $ _lplabel <$> dats     
+    f l sz = 10/(1 + exp(-(0.3 * x)))
+      where x = l + sz
+    g _ w = w
+    h l col = C.blend l' C.blue col
+      where
+        l' = (l - vmin)/(vmax - vmin)
+    dats' = moveLabeledPointBwFrames frameFrom frameTo False True <$> dats
+    svg_t = svgHeader xPlot yPlot $ do
+      axes fdat frameFrom 2 C.black 10 10
+      scatterLP f g h spdata dats'
+      scatterLPBar fdat 50 vmin vmax 3 TopRight 100 f g h spdata
+  -- putStrLn $ renderSvg svg_t
+  T.writeFile fnameOut $ T.pack $ renderSvg svg_t
+    
diff --git a/app/timeseries/Main.hs b/app/timeseries/Main.hs
new file mode 100644
--- /dev/null
+++ b/app/timeseries/Main.hs
@@ -0,0 +1,93 @@
+{-# language OverloadedStrings #-}
+module Main where
+
+-- import Control.Arrow ((***), (&&&))
+
+import Graphics.Rendering.Plot.Light
+import Graphics.Rendering.Plot.Light.PlotTypes
+  
+import qualified Data.Attoparsec.Text as A
+import qualified Attoparsec.Time.Text as AT
+import qualified Data.Text as T 
+import qualified Data.Text.IO as T (readFile, writeFile)
+import Data.Scientific (Scientific, toRealFloat)
+import Text.Blaze.Svg.Renderer.String (renderSvg)
+import qualified Data.Colour.Names as C
+
+import Control.Applicative ((<|>))
+import Data.Time (Day, TimeOfDay)
+
+fname = "data/forex"
+
+xPlot = 400
+yPlot = 300
+fnameOut = "data/forex_plot_5.svg"
+
+fdat = FigureData xPlot yPlot 0.1 0.9 0.1 0.85 10
+
+
+main = do
+  dat <- T.readFile fname
+  let pd = A.parseOnly parseFxDataset dat
+  case pd of Left e -> error e
+             Right d -> 
+               do
+               let
+                 lps =  tspToLP fhi (\_ x -> x) <$> d
+                 -- figure = tsAxis fdat fop fcl fhi flo 1 C.black (-45) Nothing Nothing lps       
+                 figure = tsAxis' fdat flo fhi C.magenta lps
+                 svg_t = svgHeader xPlot yPlot figure
+               -- putStrLn $ renderSvg svg_t
+               T.writeFile fnameOut $ T.pack $ renderSvg svg_t
+                 where
+                   fhi = toFloat . rateHigh
+                   flo = toFloat . rateLow
+                   fop = toFloat . rateOpen
+                   fcl = toFloat . rateClose
+
+
+
+
+avgTs :: FxRow Scientific -> Float
+avgTs x = 0.5 * (h + l) where
+  h = toFloat (rateHigh x)
+  l = toFloat (rateLow x)
+
+
+
+
+
+-- Forex time series parsers - related
+
+
+
+
+
+
+
+
+
+-- * Forex dataset
+
+parseFxDataset :: A.Parser [TsPoint (FxRow Scientific)]
+parseFxDataset = A.sepBy parseFxRow A.endOfLine
+
+parseFxRow :: A.Parser (TsPoint (FxRow Scientific))
+parseFxRow = do
+  (d, t) <- parseDateTime
+  _ <- comma
+  open <- A.scientific
+  _ <- comma
+  hi <- A.scientific
+  _ <- comma
+  lo <- A.scientific
+  _ <- comma
+  close <- A.scientific
+  pure $ Tsp (Tick d t) (FxRow open hi lo close)
+
+parseDateTime :: A.Parser (Day, TimeOfDay)
+parseDateTime = do
+  d <- AT.dayInISO8601
+  _ <- space
+  t <- AT.timeOfDayInISO8601
+  return (d, t)
diff --git a/data/forex b/data/forex
new file mode 100644
--- /dev/null
+++ b/data/forex
@@ -0,0 +1,174 @@
+2017-06-26 21:00:00,1.0876,1.0880,1.0872,1.0874
+2017-06-26 20:00:00,1.0873,1.0875,1.0872,1.0875
+2017-06-26 19:00:00,1.0874,1.0875,1.0873,1.0874
+2017-06-26 18:00:00,1.0870,1.0875,1.0870,1.0875
+2017-06-26 17:00:00,1.0873,1.0873,1.0870,1.0870
+2017-06-26 16:00:00,1.0869,1.0873,1.0867,1.0873
+2017-06-26 15:00:00,1.0873,1.0876,1.0869,1.0870
+2017-06-26 14:00:00,1.0875,1.0877,1.0871,1.0873
+2017-06-26 13:00:00,1.0882,1.0883,1.0875,1.0875
+2017-06-26 12:00:00,1.0882,1.0888,1.0880,1.0885
+2017-06-26 11:00:00,1.0881,1.0882,1.0879,1.0881
+2017-06-26 10:00:00,1.0881,1.0883,1.0879,1.0881
+2017-06-26 09:00:00,1.0864,1.0879,1.0862,1.0879
+2017-06-26 08:00:00,1.0858,1.0866,1.0858,1.0862
+2017-06-26 07:00:00,1.0860,1.0862,1.0857,1.0860
+2017-06-26 06:00:00,1.0855,1.0859,1.0854,1.0859
+2017-06-26 05:00:00,1.0857,1.0859,1.0856,1.0856
+2017-06-26 04:00:00,1.0858,1.0859,1.0857,1.0857
+2017-06-26 03:00:00,1.0855,1.0859,1.0855,1.0858
+2017-06-26 02:00:00,1.0856,1.0857,1.0855,1.0855
+2017-06-26 01:00:00,1.0855,1.0858,1.0855,1.0856
+2017-06-26 00:00:00,1.0856,1.0856,1.0855,1.0856
+2017-06-25 23:00:00,1.0855,1.0856,1.0854,1.0855
+2017-06-25 22:00:00,1.0855,1.0857,1.0851,1.0855
+2017-06-25 21:00:00,1.0859,1.0863,1.0851,1.0855
+2017-06-23 20:00:00,1.0855,1.0858,1.0852,1.0852
+2017-06-23 19:00:00,1.0852,1.0855,1.0851,1.0855
+2017-06-23 18:00:00,1.0854,1.0856,1.0852,1.0852
+2017-06-23 17:00:00,1.0856,1.0856,1.0852,1.0854
+2017-06-23 16:00:00,1.0853,1.0854,1.0851,1.0854
+2017-06-23 15:00:00,1.0850,1.0853,1.0849,1.0853
+2017-06-23 14:00:00,1.0852,1.0853,1.0847,1.0848
+2017-06-23 13:00:00,1.0856,1.0859,1.0849,1.0849
+2017-06-23 12:00:00,1.0856,1.0856,1.0851,1.0854
+2017-06-23 11:00:00,1.0848,1.0856,1.0848,1.0856
+2017-06-23 10:00:00,1.0854,1.0855,1.0845,1.0848
+2017-06-23 09:00:00,1.0842,1.0852,1.0841,1.0852
+2017-06-23 08:00:00,1.0844,1.0844,1.0837,1.0843
+2017-06-23 07:00:00,1.0842,1.0848,1.0840,1.0845
+2017-06-23 06:00:00,1.0838,1.0845,1.0838,1.0842
+2017-06-23 05:00:00,1.0837,1.0839,1.0837,1.0838
+2017-06-23 04:00:00,1.0837,1.0838,1.0836,1.0837
+2017-06-23 03:00:00,1.0837,1.0837,1.0836,1.0836
+2017-06-23 02:00:00,1.0838,1.0838,1.0835,1.0836
+2017-06-23 01:00:00,1.0837,1.0839,1.0836,1.0837
+2017-06-23 00:00:00,1.0837,1.0838,1.0835,1.0837
+2017-06-22 23:00:00,1.0838,1.0838,1.0836,1.0837
+2017-06-22 22:00:00,1.0839,1.0843,1.0837,1.0838
+2017-06-22 21:00:00,1.0838,1.0856,1.0837,1.0838
+2017-06-22 20:00:00,1.0838,1.0839,1.0837,1.0838
+2017-06-22 19:00:00,1.0842,1.0842,1.0836,1.0837
+2017-06-22 18:00:00,1.0841,1.0843,1.0840,1.0841
+2017-06-22 17:00:00,1.0845,1.0847,1.0840,1.0841
+2017-06-22 16:00:00,1.0847,1.0848,1.0843,1.0845
+2017-06-22 15:00:00,1.0848,1.0851,1.0843,1.0845
+2017-06-22 14:00:00,1.0852,1.0858,1.0844,1.0850
+2017-06-22 13:00:00,1.0860,1.0864,1.0851,1.0851
+2017-06-22 12:00:00,1.0873,1.0873,1.0862,1.0862
+2017-06-22 11:00:00,1.0869,1.0873,1.0868,1.0871
+2017-06-22 10:00:00,1.0871,1.0874,1.0869,1.0870
+2017-06-22 09:00:00,1.0870,1.0871,1.0866,1.0870
+2017-06-22 08:00:00,1.0861,1.0870,1.0860,1.0869
+2017-06-22 07:00:00,1.0857,1.0862,1.0855,1.0861
+2017-06-22 06:00:00,1.0863,1.0864,1.0857,1.0857
+2017-06-22 05:00:00,1.0863,1.0864,1.0862,1.0863
+2017-06-22 04:00:00,1.0863,1.0864,1.0861,1.0863
+2017-06-22 03:00:00,1.0860,1.0863,1.0860,1.0863
+2017-06-22 02:00:00,1.0862,1.0862,1.0859,1.0860
+2017-06-22 01:00:00,1.0859,1.0863,1.0859,1.0863
+2017-06-22 00:00:00,1.0861,1.0863,1.0860,1.0860
+2017-06-21 23:00:00,1.0861,1.0862,1.0860,1.0861
+2017-06-21 22:00:00,1.0861,1.0862,1.0860,1.0861
+2017-06-21 21:00:00,1.0862,1.0866,1.0860,1.0861
+2017-06-21 20:00:00,1.0861,1.0862,1.0859,1.0861
+2017-06-21 19:00:00,1.0862,1.0862,1.0860,1.0860
+2017-06-21 18:00:00,1.0860,1.0862,1.0860,1.0861
+2017-06-21 17:00:00,1.0858,1.0861,1.0855,1.0859
+2017-06-21 16:00:00,1.0860,1.0862,1.0858,1.0858
+2017-06-21 15:00:00,1.0864,1.0864,1.0858,1.0858
+2017-06-21 14:00:00,1.0859,1.0866,1.0858,1.0865
+2017-06-21 13:00:00,1.0859,1.0861,1.0854,1.0856
+2017-06-21 12:00:00,1.0860,1.0862,1.0858,1.0860
+2017-06-21 11:00:00,1.0864,1.0865,1.0856,1.0860
+2017-06-21 10:00:00,1.0855,1.0863,1.0855,1.0863
+2017-06-21 09:00:00,1.0855,1.0858,1.0854,1.0854
+2017-06-21 08:00:00,1.0848,1.0854,1.0846,1.0854
+2017-06-21 07:00:00,1.0852,1.0853,1.0848,1.0850
+2017-06-21 06:00:00,1.0852,1.0853,1.0849,1.0851
+2017-06-21 05:00:00,1.0851,1.0852,1.0851,1.0851
+2017-06-21 04:00:00,1.0851,1.0852,1.0850,1.0851
+2017-06-21 03:00:00,1.0851,1.0853,1.0851,1.0852
+2017-06-21 02:00:00,1.0855,1.0855,1.0849,1.0851
+2017-06-21 01:00:00,1.0854,1.0855,1.0853,1.0855
+2017-06-21 00:00:00,1.0856,1.0856,1.0850,1.0852
+2017-06-20 23:00:00,1.0856,1.0857,1.0855,1.0856
+2017-06-20 22:00:00,1.0866,1.0871,1.0856,1.0856
+2017-06-20 21:00:00,1.0858,1.0870,1.0856,1.0861
+2017-06-20 20:00:00,1.0855,1.0858,1.0855,1.0858
+2017-06-20 19:00:00,1.0855,1.0857,1.0854,1.0855
+2017-06-20 18:00:00,1.0857,1.0858,1.0855,1.0855
+2017-06-20 17:00:00,1.0857,1.0859,1.0856,1.0858
+2017-06-20 16:00:00,1.0858,1.0861,1.0857,1.0858
+2017-06-20 15:00:00,1.0860,1.0862,1.0858,1.0860
+2017-06-20 14:00:00,1.0859,1.0861,1.0857,1.0859
+2017-06-20 13:00:00,1.0864,1.0865,1.0858,1.0859
+2017-06-20 12:00:00,1.0854,1.0867,1.0854,1.0865
+2017-06-20 11:00:00,1.0864,1.0864,1.0854,1.0855
+2017-06-20 10:00:00,1.0861,1.0865,1.0860,1.0865
+2017-06-20 09:00:00,1.0871,1.0875,1.0857,1.0864
+2017-06-20 08:00:00,1.0874,1.0877,1.0868,1.0870
+2017-06-20 07:00:00,1.0879,1.0880,1.0864,1.0872
+2017-06-20 06:00:00,1.0878,1.0881,1.0877,1.0880
+2017-06-20 05:00:00,1.0881,1.0882,1.0877,1.0877
+2017-06-20 04:00:00,1.0879,1.0882,1.0878,1.0880
+2017-06-20 03:00:00,1.0880,1.0881,1.0879,1.0879
+2017-06-20 02:00:00,1.0880,1.0881,1.0878,1.0880
+2017-06-20 01:00:00,1.0879,1.0880,1.0878,1.0880
+2017-06-20 00:00:00,1.0880,1.0881,1.0878,1.0878
+2017-06-19 23:00:00,1.0880,1.0880,1.0877,1.0880
+2017-06-19 22:00:00,1.0882,1.0883,1.0879,1.0879
+2017-06-19 21:00:00,1.0878,1.0890,1.0875,1.0882
+2017-06-19 20:00:00,1.0878,1.0879,1.0877,1.0878
+2017-06-19 19:00:00,1.0879,1.0879,1.0877,1.0879
+2017-06-19 18:00:00,1.0879,1.0879,1.0876,1.0877
+2017-06-19 17:00:00,1.0875,1.0879,1.0875,1.0878
+2017-06-19 16:00:00,1.0877,1.0879,1.0875,1.0876
+2017-06-19 15:00:00,1.0877,1.0879,1.0873,1.0877
+2017-06-19 14:00:00,1.0883,1.0883,1.0877,1.0881
+2017-06-19 13:00:00,1.0877,1.0885,1.0875,1.0885
+2017-06-19 12:00:00,1.0869,1.0882,1.0868,1.0882
+2017-06-19 11:00:00,1.0879,1.0880,1.0869,1.0870
+2017-06-19 10:00:00,1.0876,1.0880,1.0873,1.0878
+2017-06-19 09:00:00,1.0880,1.0881,1.0875,1.0876
+2017-06-19 08:00:00,1.0883,1.0885,1.0877,1.0881
+2017-06-19 07:00:00,1.0903,1.0903,1.0889,1.0890
+2017-06-19 06:00:00,1.0905,1.0910,1.0904,1.0905
+2017-06-19 05:00:00,1.0905,1.0905,1.0903,1.0904
+2017-06-19 04:00:00,1.0902,1.0906,1.0902,1.0905
+2017-06-19 03:00:00,1.0903,1.0903,1.0901,1.0902
+2017-06-19 02:00:00,1.0904,1.0905,1.0902,1.0903
+2017-06-19 01:00:00,1.0903,1.0905,1.0903,1.0904
+2017-06-19 00:00:00,1.0906,1.0906,1.0902,1.0902
+2017-06-18 23:00:00,1.0905,1.0905,1.0902,1.0905
+2017-06-18 22:00:00,1.0903,1.0905,1.0901,1.0905
+2017-06-18 21:00:00,1.0911,1.0911,1.0902,1.0907
+2017-06-16 20:00:00,1.0900,1.0907,1.0898,1.0906
+2017-06-16 19:00:00,1.0901,1.0902,1.0898,1.0900
+2017-06-16 18:00:00,1.0904,1.0904,1.0900,1.0902
+2017-06-16 17:00:00,1.0901,1.0902,1.0899,1.0901
+2017-06-16 16:00:00,1.0902,1.0902,1.0898,1.0901
+2017-06-16 15:00:00,1.0898,1.0902,1.0893,1.0901
+2017-06-16 14:00:00,1.0890,1.0898,1.0886,1.0898
+2017-06-16 13:00:00,1.0886,1.0888,1.0883,1.0884
+2017-06-16 12:00:00,1.0885,1.0891,1.0884,1.0886
+2017-06-16 11:00:00,1.0889,1.0890,1.0885,1.0885
+2017-06-16 10:00:00,1.0881,1.0893,1.0881,1.0890
+2017-06-16 09:00:00,1.0882,1.0883,1.0877,1.0882
+2017-06-16 08:00:00,1.0876,1.0882,1.0876,1.0882
+2017-06-16 07:00:00,1.0871,1.0876,1.0869,1.0875
+2017-06-16 06:00:00,1.0870,1.0874,1.0867,1.0874
+2017-06-16 05:00:00,1.0871,1.0872,1.0869,1.0870
+2017-06-16 04:00:00,1.0871,1.0872,1.0870,1.0870
+2017-06-16 03:00:00,1.0871,1.0872,1.0870,1.0871
+2017-06-16 02:00:00,1.0872,1.0872,1.0869,1.0871
+2017-06-16 01:00:00,1.0872,1.0873,1.0870,1.0872
+2017-06-16 00:00:00,1.0874,1.0874,1.0871,1.0872
+2017-06-15 23:00:00,1.0872,1.0873,1.0871,1.0872
+2017-06-15 22:00:00,1.0875,1.0875,1.0871,1.0872
+2017-06-15 21:00:00,1.0873,1.0876,1.0871,1.0875
+2017-06-15 20:00:00,1.0874,1.0875,1.0871,1.0873
+2017-06-15 19:00:00,1.0875,1.0875,1.0873,1.0873
+2017-06-15 18:00:00,1.0874,1.0875,1.0873,1.0874
+2017-06-15 17:00:00,1.0872,1.0874,1.0871,1.0872
+2017-06-15 16:00:00,1.0873,1.0874,1.0871,1.0871
diff --git a/data/heatmap-bw b/data/heatmap-bw
new file mode 100644
--- /dev/null
+++ b/data/heatmap-bw
@@ -0,0 +1,6 @@
+6 5 4 3 1 0
+3 2 2 0 0 1
+0 0 0 0 1 0
+0 0 0 0 2 3
+0 0 1 2 4 3
+0 1 2 3 4 5
diff --git a/plot-light-examples.cabal b/plot-light-examples.cabal
new file mode 100644
--- /dev/null
+++ b/plot-light-examples.cabal
@@ -0,0 +1,68 @@
+name:                plot-light-examples
+version:             0.1.0.0
+synopsis:            Example binaries for plot-light
+description:         Example binaries for plot-light
+homepage:            https://github.com/ocramz/plot-light-examples
+license:             BSD3
+license-file:        LICENSE
+author:              Marco Zocca
+maintainer:          zocca.marco gmail
+copyright:           2018 Marco Zocca
+category:            Graphics
+build-type:          Simple
+extra-source-files:  README.md
+cabal-version:       >=1.10
+tested-with:         GHC == 8.0.2, GHC == 8.4.1
+data-dir:            data
+data-files:          forex
+                     heatmap-bw                     
+
+executable scatter
+  default-language:    Haskell2010
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
+  hs-source-dirs:      app/scatter
+  main-is:             Main.hs
+  build-depends:       base >= 4.7 && < 5
+                     , plot-light >= 0.2.9
+                     , attoparsec
+                     , text
+                     , colour
+                     , blaze-svg
+                     , scientific
+                                          
+executable timeseries
+  default-language:    Haskell2010
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
+  hs-source-dirs:      app/timeseries
+  main-is:             Main.hs
+  build-depends:       base >= 4.7 && < 5
+                     , plot-light >= 0.2.9
+                     , attoparsec
+                     , attoparsec-time >= 1
+                     , time
+                     , text
+                     , colour
+                     , blaze-svg
+                     , scientific
+
+executable heatmap
+  default-language:    Haskell2010
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
+  hs-source-dirs:      app/heatmap
+  main-is:             Main.hs
+  build-depends:       base >= 4.7 && < 5
+                     , plot-light >= 0.2.9
+                     , attoparsec
+                     , time
+                     , text
+                     , colour
+                     -- , palette
+                     , blaze-svg
+                     , scientific           
+  
+
+
+
+source-repository head
+  type:     git
+  location: https://github.com/ocramz/plot-light-examples
