diff --git a/_includes/components/image-list.html b/_includes/components/image-list.html
new file mode 100644
index 00000000..9bee5d00
--- /dev/null
+++ b/_includes/components/image-list.html
@@ -0,0 +1,10 @@
+
+ {% for item in include.items %}
+
+ {% include elements/hex-icon.html file=item.image %}
+
+ {{ item.description }}
+
+
+ {% endfor %}
+
diff --git a/_includes/elements/hex-icon.html b/_includes/elements/hex-icon.html
new file mode 100644
index 00000000..d4abeb2b
--- /dev/null
+++ b/_includes/elements/hex-icon.html
@@ -0,0 +1,5 @@
+
+
+ {% include {{ include.file }} %}
+
+
diff --git a/_includes/icons/apps.svg b/_includes/icons/apps.svg
new file mode 100644
index 00000000..4b340d6e
--- /dev/null
+++ b/_includes/icons/apps.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_includes/icons/book.svg b/_includes/icons/book.svg
new file mode 100644
index 00000000..3ad9ce85
--- /dev/null
+++ b/_includes/icons/book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_includes/icons/code.svg b/_includes/icons/code.svg
new file mode 100644
index 00000000..d8434b76
--- /dev/null
+++ b/_includes/icons/code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_includes/icons/folder.svg b/_includes/icons/folder.svg
new file mode 100644
index 00000000..5e42ce7b
--- /dev/null
+++ b/_includes/icons/folder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_includes/icons/library-books.svg b/_includes/icons/library-books.svg
new file mode 100644
index 00000000..2aaa84b1
--- /dev/null
+++ b/_includes/icons/library-books.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_includes/icons/merge-type.svg b/_includes/icons/merge-type.svg
new file mode 100644
index 00000000..36b3f665
--- /dev/null
+++ b/_includes/icons/merge-type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_includes/icons/update.svg b/_includes/icons/update.svg
new file mode 100644
index 00000000..d125c96b
--- /dev/null
+++ b/_includes/icons/update.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_layouts/book.html b/_layouts/book.html
new file mode 100644
index 00000000..acb49db7
--- /dev/null
+++ b/_layouts/book.html
@@ -0,0 +1,24 @@
+---
+layout: wide
+---
+
+{% include components/book-presenter.html book=page.book %}
+
+
+
+
+ What you will learn
+
+
+ {% include components/image-list.html items=page.what_you_will_learn %}
+
+
+
+
+
+
About the Authors
+ {% include components/book-authors.html authors=page.authors %}
+
+
+
diff --git a/_pages/learning/crystal_programming.html b/_pages/learning/crystal_programming.html
index 41d15308..7f81df2a 100644
--- a/_pages/learning/crystal_programming.html
+++ b/_pages/learning/crystal_programming.html
@@ -1,81 +1,48 @@
---
-title: "Book: Crystal Programming"
-description: |
- Crystal Programming is a project-based book by George Dietrich and Guilherme Bernal that covers all the
- fundamental concepts needed to start programming in Crystal, such as OOP and concurrent programming.
-layout: learning
+title: "Building efficient, safe, and readable web and CLI applications with Crystal"
+layout: book
-headline: Building efficient, safe, and readable web and CLI applications with Crystal
-cover_image: /assets/learning/crystal_programming.png
-vendors:
-- url: https://www.amazon.com/Crystal-Programming-project-based-introduction-applications/dp/1801818673/ref=sr_1_2
- name: Amazon
-- url: https://www.packtpub.com/product/crystal-programming/9781801818674
- name: Packt
+book:
+ cover_image: /assets/learning/crystal_programming.png
+ description: |
+ Crystal Programming is a project-based book by George Dietrich and Guilherme Bernal that covers all the
+ fundamental concepts needed to start programming in Crystal, such as OOP and concurrent programming.
+ details: |
+ While focused towards those with programming experience, previous knowledge of Crystal itself is not required, as
+ the book is outlined with step-by-step explanations of essential concepts and practical examples. By the end of
+ this book, you’ll be equipped with the skills you need to use Crystal programming for building and understanding any
+ application you come across.
+ vendors:
+ - url: https://www.amazon.com/Crystal-Programming-project-based-introduction-applications/dp/1801818673/ref=sr_1_2
+ name: Amazon
+ - url: https://www.packtpub.com/product/crystal-programming/9781801818674
+ name: Packt
-book_info:
- name: Crystal Programming
- isbn: 978-1801818674
- publisher: Packt Publishing
- numberOfPages: 356
- datePublished: 2022-05-27
+what_you_will_learn:
+- image: icons/merge-type.svg
+ description: Explore how Crystal combines the merits of other languages
+- image: icons/folder.svg
+ description: Understand how to leverage existing C libraries without writing any C
+- image: icons/update.svg
+ description: Focus on zero-cost abstractions with compile-time macros
+- image: icons/code.svg
+ description: Use an example-based approach to demonstrate language features
+- image: icons/apps.svg
+ description: Develop a variety of Crystal applications, such as web and CLI apps
+- image: icons/library-books.svg
+ description: Gain an understanding of the macro API and annotations
authors:
-- name: George Dietrich
- image: /assets/learning/george.png
- github_handle: Blacksmoke16
+- image: /assets/learning/george.png
description: |
- A software engineer, open-source aficionado, and Crystal community moderator. He
+ George Dietrich is a software engineer, open-source aficionado, and Crystal community moderator. He
holds a Master of Science degree in internet information systems and a Bachelor of Science degree in
information sciences.
-- name: Guilherme Bernal
- image: /assets/learning/guilherme.jpg
- github_handle: lbguilherme
+- image: /assets/learning/guilherme.jpg
description: |
- He is the chief technology officer at Cubos Tecnologia. He holds a bachelor's
+ Guilherme Bernal is the chief technology officer at Cubos Tecnologia. He holds a bachelor's
degree in TI management. Guilherme co-founded a software development company
and several tech start-ups, including one that focused on teaching programming
skills to a new generation of developers. He is also a two-time world finalist
- in the coding competition, ACM ICPC.
+ in the coding competition, ACM ICPC.
---
-
- While focused towards those with programming experience, previous knowledge of Crystal itself is not required, as
- the book is outlined with step-by-step explanations of essential concepts and practical examples. By the end of
- this
- book, you’ll be equipped with the skills you need to use Crystal programming for building and understanding any
- application you come across.
-
-
-
- What you will learn
-
-
-
-
-
- Explore how Crystal combines the merits of other languages
-
-
-
- Understand how to leverage existing C libraries without writing any C
-
-
-
- Focus on zero-cost abstractions with compile-time macros
-
-
-
- Use an example-based approach to demonstrate language features
-
-
-
- Develop a variety of Crystal applications, such as web and CLI apps
-
-
-
- Gain an understanding of the macro API and annotations
-