   (stop-game!)
   (swap! app-state update-in [:grid] (constantly empty-grid)))
 
+;; -------------- Patterns ----------------
+
+;; Space ships
+
+(defonce glider (utils/expand-to [[0 1 0]
+                                  [0 0 1]
+                                  [1 1 1]] rows columns))
+
+(defonce lwss (utils/expand-to [[0 1 0 0 1]
+                                [1 0 0 0 0]
+                                [1 0 0 0 1]
+                                [1 1 1 1 0]] rows columns))
+
+(defonce mwss (utils/expand-to [[0 0 0 1 0 0]
+                                [0 1 0 0 0 1]
+                                [1 0 0 0 0 0]
+                                [1 0 0 0 0 1]
+                                [1 1 1 1 1 0]] rows columns))
+
+(defonce hwss (utils/expand-to [[0 0 0 1 1 0 0]
+                                [0 1 0 0 0 0 1]
+                                [1 0 0 0 0 0 0]
+                                [1 0 0 0 0 0 1]
+                                [1 1 1 1 1 1 0]] rows columns))
+
+;; Oscillators
+
+(defonce pulsar (utils/expand-to [[0 0 1 1 1 0 0 0 1 1 1 0 0]
+                                  [0 0 0 0 0 0 0 0 0 0 0 0 0]
+                                  [1 0 0 0 0 1 0 1 0 0 0 0 1]
+                                  [1 0 0 0 0 1 0 1 0 0 0 0 1]
+                                  [1 0 0 0 0 1 0 1 0 0 0 0 1]
+                                  [0 0 1 1 1 0 0 0 1 1 1 0 0]
+                                  [0 0 0 0 0 0 0 0 0 0 0 0 0]
+                                  [0 0 1 1 1 0 0 0 1 1 1 0 0]
+                                  [1 0 0 0 0 1 0 1 0 0 0 0 1]
+                                  [1 0 0 0 0 1 0 1 0 0 0 0 1]
+                                  [1 0 0 0 0 1 0 1 0 0 0 0 1]
+                                  [0 0 0 0 0 0 0 0 0 0 0 0 0]
+                                  [0 0 1 1 1 0 0 0 1 1 1 0 0]] rows columns))
+
+(defonce figure-8 (utils/expand-to [[1 1 1 0 0 0]
+                                    [1 1 1 0 0 0]
+                                    [1 1 1 0 0 0]
+                                    [0 0 0 1 1 1]
+                                    [0 0 0 1 1 1]
+                                    [0 0 0 1 1 1]] rows columns))
+
+(defonce queenbee (utils/expand-to [
+                                    [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
+                                    [0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
+                                    [0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1]
+                                    [1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1]
+                                    [1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
+                                    [0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
+                                    [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]] rows columns))
+
+(defonce twinbee (utils/expand-to [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0]
+                                   [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1]
+                                   [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1]
+                                   [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0]
+                                   [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+                                   [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+                                   [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+                                   [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0]
+                                   [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]
+                                   [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0]
+                                   [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0]]
+                                  rows columns))
+
+
+
+
+
 ;; -------------------------
 ;; View
+
+(defn pattern-button [pattern-matrix name]
+  [:button {:on-click #(set-pattern pattern-matrix)
+            :on-mouse-over #(set-preview pattern-matrix)
+            :on-mouse-out #(set-preview nil)
+            :class "small-btn blue"} name])
 
 (defn game-of-life []
   [:div {:style {:margin "0px 0px 0px 0px"}}

        get-matrix-coords (fn [mouse-event canvas]
                            (let [window-x (.-x mouse-event)
                                  window-y (.-y mouse-event)
                                  [canvas-x canvas-y] (get-canvas-coords [window-x window-y] canvas)
                                  matrix-x (.floor js/Math (/ canvas-x 10))
                                  matrix-y (.floor js/Math (/ canvas-y 10))]
                              (println "window coords: " [[window-x window-y]]
                                       " canvas coords: " [[canvas-x canvas-y]]
                                       " matrix coors: " [matrix-x matrix-y])
                              [matrix-x matrix-y]))

        render-cell! (fn [ctx {:keys [cell-size live-cell-color dead-cell-color]}]
                       (println "live-cell-color: " live-cell-color)
                       (fn [[y x] item]
                         (let [alive? (= item 1)
                               redraw-dead? dead-cell-color]

     [:div
      [:div {:class "half-size"}
       [:button {:on-click #(start-game!)
                 :disabled running?
                 :class "full-btn green"} "PLAY"]]
      [:div {:class "half-size"}
       [:button {:on-click #(stop-game!)
                 :disabled (not running?)
