diff --git a/README.md b/README.md
index 1e239566..95a047c8 100644
--- a/README.md
+++ b/README.md
@@ -27,23 +27,12 @@
The Roq Static Site Generator extension allows to easily create a static website or blog (such as [Roq's blog](https://pages.quarkiverse.io/quarkus-roq/)) using Quarkus super-powers.
-## Get up and running with Roq
+Get started [here](https://pages.quarkiverse.io/quarkus-roq/docs/)!
-[Click here](https://code.quarkus.io/?a=roq-my-site&e=io.quarkiverse.roq%3Aquarkus-roq) to generate your Roq Starter App.
-
-or use the [Quarkus CLI](https://quarkus.io/guides/cli-tooling):
-
-```shell
-quarkus create app roq-my-site -x=io.quarkiverse.roq:quarkus-roq
-```
-
-Then
-```shell
-cd roq-with-blog
-quarkus dev
-```
-
-Learn more in the [documentation](https://docs.quarkiverse.io/quarkus-roq/dev/index.html).
+For those looking for the Roq Quarkus extensions (which can also be used standalone):
+- [Roq Data](https://docs.quarkiverse.io/quarkus-roq/dev/quarkus-roq-data.html): Use json/yaml files content from your templates and articles with type safety.
+- [Roq FrontMatter](https://docs.quarkiverse.io/quarkus-roq/dev/quarkus-roq-frontmatter.html): Create a website from your Markdown/Asciidoc/Html pages using FrontMatter headers (url, layout, seo, data).
+- [Roq Generator](https://docs.quarkiverse.io/quarkus-roq/dev/quarkus-roq-generator.html): Command to run any Quarkus web application and extract it in a directory as purely static files (html and assets).
## Contributors ✨
diff --git a/blog/.gitignore b/blog/.gitignore
index 503304d4..01fab8e0 100644
--- a/blog/.gitignore
+++ b/blog/.gitignore
@@ -1 +1,3 @@
-data/*.json
\ No newline at end of file
+data/*.json
+data/project-info.yml
+templates/partials/doc/configs/**
\ No newline at end of file
diff --git a/blog/src/main/resources/application.properties b/blog/config/application.properties
similarity index 63%
rename from blog/src/main/resources/application.properties
rename to blog/config/application.properties
index 207b21fc..2fcc316b 100644
--- a/blog/src/main/resources/application.properties
+++ b/blog/config/application.properties
@@ -2,4 +2,6 @@
%gh-pages.quarkus.http.root-path=/quarkus-roq/
quarkus.web-bundler.dependencies.auto-import=all
quarkus.log.category."io.quarkiverse.roq.frontmatter.deployment.scan".level=DEBUG
-quarkus.default-locale=en
\ No newline at end of file
+quarkus.default-locale=en
+quarkus.asciidoctorj.attributes.icons=font
+quarkus.asciidoctorj.attributes.source-highlighter=highlight.js
\ No newline at end of file
diff --git a/blog/content/about.md b/blog/content/about.md
index 77e101a9..a4a09877 100644
--- a/blog/content/about.md
+++ b/blog/content/about.md
@@ -1,20 +1,20 @@
---
title: About
description: |
- Roq stands out in the Java development community as a powerful static site generator, bridging the gap between the
- likes of Gatsby, Hugo, and the broader backend community. With GitHub Actions support out-of-the-box, Roq is easy to use for beginners, but also flexible enough to provide
- Java hooks for advanced users.
+ Roq is a powerful static site generator that combines the best features of tools like Jekyll and Hugo, but within the Java ecosystem. It offers a modern approach with Quarkus at its core, requiring zero configuration to get started —ideal for developers who want to jump right in, while still being flexible enough for advanced users to hook into Java for deeper customization.
layout: :theme/page
---
# About Roq
-Roq stands out in the Java development community as a powerful static site generator, bridging the gap between the likes of Gatsby, Hugo, and the broader backend community. As Andy Damevin explains, while tools like Jekyll once filled this space, they’ve become outdated and cumbersome, especially with Ruby’s limitations. Roq offers a modern solution, leveraging Quarkus with no configuration needed, allowing developers to start quickly using Codestart and simply editing their site directory.
-
-With GitHub Actions support out-of-the-box, Roq is easy to use for beginners, but also flexible enough to provide Java hooks for advanced users.
+Roq is a powerful static site generator that combines the best features of tools like Jekyll and Hugo, but within the Java ecosystem. It offers a modern approach with Quarkus at its core, requiring zero configuration to get started —ideal for developers who want to jump right in, while still being flexible enough for advanced users to hook into Java for deeper customization.
**This tool is a testament to how extensible and powerful Quarkus is, offering a low-risk yet highly capable platform that will evolve as demand grows.**
+## Origins
+
+I wrote a [blog post]({site.url('posts/roq-with-blogs')}) explaining how it all started.
+
## Credits
`Those are generated as a JSON by all-contributors, then we leverage roq-data to print them... slick 🏄!`
diff --git a/blog/content/docs/advanced.adoc b/blog/content/docs/advanced.adoc
new file mode 100644
index 00000000..937972f0
--- /dev/null
+++ b/blog/content/docs/advanced.adoc
@@ -0,0 +1,414 @@
+---
+title: Advanced Stuff
+layout: doc
+---
+{#include partials/doc/doc-attributes.adoc/}
+
+{|
+= Roq Advanced Stuff
+
+[#pagination]
+== Pagination
+
+Adding pagination to your Roq site is an easy way to improve content
+navigation. Let’s walk through how to implement pagination and customize
+its behavior in your site.
+
+=== Step 1: Iterate on the paginated collection
+
+First, include the following in your FrontMatter header on the page which will
+iterate on the paginated collection:
+
+[source,yaml]
+----
+paginate: posts
+----
+
+Next, in your template, loop through the paginated posts using:
+
+[source,html]
+----
+{#for post in site.collections.posts.paginated(page.paginator)} // <1>
+
+ ...
+
+{/for}
+
+{#include includes/pagination.html/}
+----
+<1> Calling `.paginated(page.paginator)` will resolve to the posts for the computed page.
+
+=== Step 2: Including Pagination Controls
+
+To add pagination controls, use the provided `fm/pagination.html` in your own `_includes/pagination.html`:
+
+[source,html]
+----
+{#include fm/pagination.html}
+{#newer}{/newer}
+{#older}{/older}
+{/include}
+----
+
+NOTE: If you want to write your own controls, find inspiration in the FM sources https://github.com/quarkiverse/quarkus-roq/tree/main/roq-frontmatter/runtime/src/main/resources/templates/fm/pagination.html[fm/pagination.html].
+
+Just by doing so, Roq will generate a bunch of pages based on the pagination setting. For example with a pagination size of 4 and with 9 posts, you would get:
+
+* `index.html` (posts 1 to 4)
+* `posts/page-2` (posts 5 to 8)
+* `posts/page-3` (post 9)
+
+NOTE: the first page uses the declaring page link.
+
+
+You can further customize your pagination by setting the page size and link format:
+
+[source,yaml]
+----
+paginate:
+ size: 4
+ collection: posts
+ link: posts/page-:page
+----
+
+With these steps, you can create a flexible pagination system to improve your site’s navigation.
+
+== SEO
+
+Incorporating search engine optimization (SEO) is as simple as inserting this tag into your `
` section:
+
+[source,html]
+----
+
+{#seo page site /}
+
+----
+
+It will automatically use the FrontMatter data to fill the tags.
+
+[source,html]
+----
+My Blog Post
+
+
+
+
+
+
+
+----
+
+== RSS
+
+Incorporating and RSS feed of your posts is as simple as inserting this tag into your `` section:
+
+[source,html]
+----
+
+{#rss site /}
+
+----
+
+It will automatically use the FrontMatter data generate an RSS feed link.
+
+[source,html]
+----
+
+----
+
+It will automatically utilize the Frontmatter data from all your blog posts to generate a valid Atom RSS feed link at `rss.xml`. Ensure you create an `rss.xml` file at the root of your site and include this single line of code:
+
+[source,html]
+----
+{#include fm/rss.html}
+----
+
+== Themes
+
+=== Overriding theme layouts
+
+In Roq, you can override theme layouts by inserting an extra layout layer. This allows you to override only specific sections of the theme layout, without duplicating the entire layout structure.
+
+TIP: Roq layouts are leveraging https://quarkus.io/guides/qute-reference#include_helper[Qute includes] under the hood. It is possible to define insert sections which can define overridable default content.
+
+For example, let’s override the `roq-default` theme's main layout so that our customizations apply everywhere it is used.
+
+.templates/layouts/roq-default/main.html
+[source,html]
+----
+---
+layout: theme-layouts/roq-default/main // <1>
+---
+
+{#insert /} // <2>
+
+{#description} // <3>
+Here I can override the description section
+{/}
+
+{#footer}
+
+{/}
+----
+<1> *Inherits from the theme layout:* This layout uses the original theme layout (`roq-default/main`) as a base.
+<2> *Inheritance mechanism:* `{#insert /}` ensures that this layout will inherit sections defined in the theme layout.
+<3> *Override specific sections:* You can override individual sections such as `description` and `footer` without affecting other parts of the layout.
+
+Now, everywhere `layouts: :theme/main` (even in the theme), your override will be used.
+
+=== Developing a theme
+
+To develop a theme, create a Maven module which will contain the theme layouts, partials, scripts and styles.
+
+[source]
+----
+.
+└── main
+ ├── resources
+ │ ├── application.properties
+ │ └── templates
+ │ ├── partials
+ │ │ └── roq-default // <1>
+ │ │ ├── head.html
+ │ │ ├── pagination.html
+ │ │ ├── sidebar-about.html
+ │ │ ├── sidebar-contact.html
+ │ │ ├── sidebar-copyright.html
+ │ │ └── sidebar-menu.html
+ │ └── theme-layouts // <2>
+ │ └── roq-default
+ │ ├── default.html
+ │ ├── index.html
+ │ ├── main.html
+ │ ├── page.html
+ │ ├── post.html
+ │ └── tag.html
+ └── web
+ ├── roq.js
+ ├── roq.scss
+----
+<1> You can add partials for your theme, they need to be located in a directory with the theme name.
+<2> Layouts needs to be declared in the `theme-layouts` so that they can be overridden by consuming websites.
+
+Same as for a site, script and styles can either be added to `src/main/resoucres/META-INF/resources` or bundled using Maven esbuild plugin:
+
+.pom.xml
+[source,xml]
+----
+
+ io.mvnpm
+ esbuild-maven-plugin
+ 0.0.2
+
+
+ esbuild
+
+ esbuild
+
+
+
+
+ roq.js // <1>
+
+ // <2>
+
+ org.mvnpm.at.fortawesome
+ fontawesome-free
+ 6.6.0
+
+
+ org.mvnpm.at.fontsource
+ pt-serif
+ 5.1.0
+
+
+
+----
+<1> Add your esbuild entrypoint from `src/main/resources/web`
+<2> Add mvnpm or webjars dependencies
+
+This bundle will be available in `/static/bundle/roq.js` and `/static/bundle/roq.css` which can be used in your theme html ``
+
+Create an application.properties:
+
+.src/main/resources/application.properties
+[source,properties]
+----
+site.theme=roq-default // <1>
+----
+<1> Thanks to this, all call to `layout: :theme/...` will automatically refer to this theme.
+
+[#links]
+== Links & Urls
+
+The output location of pages and documents is determined by the FrontMatter `link` key. This `link` value can include placeholders, which will be dynamically replaced with relevant values for routing.
+
+TIP: Those links are also available in the Qute data to allow <>.
+
+[#link-placeholders]
+=== Link placeholders
+
+|===
+| Type of page | Placeholder | Description | Example Output
+
+| All
+| `:path`
+| The file path of the page, slugified (converted to a URL-friendly format) without the extension.
+| `my-page`, `search` or `docs/my-doc`
+
+| All
+| `:slug`
+| The slugified title of the page, derived from the title. Defaults to the `slug` property in data, if available or using the slugified title, falling back to the file name.
+| `my-page-title`
+
+| All
+| `:ext`
+| The file extension with the dot. Empty for all files with html output (md, asciidoc, html, ...).
+| `.json`
+
+| All
+| `:ext!`
+| Force the output file extension.
+| `.html`, `.json`
+
+| All
+| `:year`
+| The year of the page’s date or the current year if the date is not available.
+| `2024`
+
+| All
+| `:month`
+| The month (formatted as two digits) of the page’s date or the current month if the date is not available.
+| `10`
+
+| All
+| `:day`
+| The day (formatted as two digits) of the page’s date or the current day if the date is not available.
+| `28`
+
+| Document
+| `:collection`
+| Represents the collection to which the document belongs, such as a specific category or folder name.
+| `blog`, `articles`, `recipes`
+
+| Paginated
+| `:page`
+| Represents the current page.
+| `1`, `2`
+|===
+
+
+Default link value:
+
+* for pages: `/:path:ext`.
+* for documents: `/:collection/:slug`.
+* for paginated page: `/:collection/page:page`.
+
+TIP: You can define `link` in a layout to affect all the pages using that layout.
+
+[#roq-url]
+=== Creating links between your pages
+
+The pages links are automatically converted to urls by Roq, they are available in the `site.url` and the `page.url` variables. This makes creating links very easy:
+
+[source,html]
+----
+Back to main page
+----
+
+or
+
+[source,html]
+----
+{page.nextPage.title}
+----
+
+or
+
+[source,html]
+----
+{#for post in site.collections.posts}
+ {post.title}
+{/for}
+----
+
+TIP: By default, url will be rendered as relative from the site root. You can also get the full absolute url (i.e. from `http(s)://`) by using `absolute` on any url (e.g. `{site.url.absolute}`).
+
+=== Manual linking
+
+Sometimes, you want to create a link for a page without holding the variable, in this case, you can use `site.url(relativePath)` which will be automatically resolved from the site root path.
+
+
+=== Images url resolution
+
+By default, pages and documents images should be located in `/static/assets/images` (you can choose another path in the config). To define an image for a page or document, you can use the FrontMatter `image` (or `img` or `picture`) key. It should contain the path to your page image relative to the configured images location (e.g. `image: foo.webp` will refer to `/static/assets/images/foo.webp`), or an absolute path starting with `http(s)://`.
+
+Roq will automatically resolve the url for the image in `page.image` (or `site.image`). This makes showing images very easy:
+[source,html]
+----
+ // <1>
+ // <2>
+----
+<1> Will print the site image absolute url.
+<2> Will print `/static/assets/images/something.png`.
+
+or
+
+[source,html]
+----
+---
+layout: :theme/page
+title: Foo
+image: foo.webp // <1>
+---
+
+ // <2>
+----
+<1> The path to your page image relative to the configured images location (or an absolute path starting with `http(s)://`).
+<2> `page.image` will be resolved to `/static/assets/images/foo.webp`.
+
+TIP: By default, url will be rendered as relative from the site root. You can also get the full absolute url (i.e. from `http(s)://`) by using `absolute` on any url (e.g. `{page.image.absolute}`).
+
+You can have other FrontMatter data with images, to convert them to url, use `page.dataAsImage('foo')`.
+
+[source,html]
+----
+---
+layout: :theme/page
+title: Foo
+image: foo.webp
+other-image: other-foo.webp
+list-of-images:
+ - https://my-picture.io/foo-1.webp <1>
+ - foo-2.webp
+images-with-titles:
+ - title: Foo 1
+ path: foo-1.webp
+ - title: Foo 2
+ path: foo-2.webp
+---
+
+ <2>
+
+{#for image in page.dataAsImages('list-of-images')} <3>
+
+{/for}
+
+{#for image in page.data('images-with-titles')}
+ <4>
+{/for}
+----
+<1> The resolution is smart and also allows using absolute urls (they won't be changed).
+<2> `page.dataAsImage` will resolve the data from `other-image` and resolve the image url from its value.
+<3> It also works with arrays using `page.dataAsImages`.
+<4> If you want to resolve any image path use `page.image(path)`.
+
+== Site Configuration
+|}
+
+Site configuration is done in `config/application.properties` (or `src/main/resources/application.properties`):
+
+
+{#include partials/doc/configs/quarkus-roq-frontmatter_site.adoc /}
\ No newline at end of file
diff --git a/blog/content/docs/basics.adoc b/blog/content/docs/basics.adoc
new file mode 100644
index 00000000..76a21d68
--- /dev/null
+++ b/blog/content/docs/basics.adoc
@@ -0,0 +1,390 @@
+---
+title: Basics
+layout: doc
+---
+{#include partials/doc/doc-attributes.adoc/}
+= Roq the basics
+
+By default, your site files should be located in the **project root directory**.
+
+TIP: you may also put it in the Java resources (i.e. `src/main/resources/`).
+
+
+{#include partials/doc/directory-structure.adoc /}
+
+
+=== Qute and FrontMatter
+
+All templates can use the awesome type-safe https://quarkus.io/guides/qute-reference[Qute] template engine.
+
+TIP: Type-safety doesn't make it more complex, it just means that using wrong variables and such will result in build error. This way it won't leak in production.
+
+Templates for layout, documents and pages can declare a FrontMatter (referred as FM data) header delimited by two `---`.
+This header contains yaml data used to configure many things such as:
+
+* Routing
+* Data for the templates
+* Content generation
+* Pagination
+
+=== Layouts and Partials
+
+For your site, you will have one or more kind of pages, this is what we call "layouts", located by default in `templates/layouts/`. For example:
+
+* `main`: the base layout for all kind of pages
+* `page`: the layout of normal pages
+* `post`: the layout for blog posts
+* `recipe`: the layout for recipes or whatever
+
+A layout can be included in pages and documents through the `layout` FrontMatter key (e.g. `layout: page`).
+
+TIP: Roq layouts are using the Qute `include` section under the hood to achieve template inheritance. For more details, see the Qute documentation on includes: https://quarkus.io/guides/qute-reference#include_helper[Qute includes]. Unlike partials, layouts can also define Frontmatter data, which is inherited along with the template structure.
+
+You can also prepare partial templates. They are located by default in `templates/partials/`. For example:
+
+* `pagination.html`
+* `head.html`
+
+NOTE: if you don't already have layouts and partials in your project, <> or create your own templates (https://github.com/quarkiverse/quarkus-roq/tree/main/theme/default/src/main/resources/templates[example templates]).
+
+[#install-theme]
+=== Install a theme
+
+To install a theme, simply add the dependency to your pom.xml. Example with Roq's default theme:
+[source,xml]
+----
+
+ io.quarkiverse.roq
+ quarkus-roq-theme-default
+ {cdi:project-info.release.current-version}
+
+----
+
+
+It will provide templates, scripts and styles for your site. To use a theme layout, refer to it with `:theme/` prefix (there is an example in the next part). For advanced usage, refer to the link:{site.url('docs/advanced')}#themes[*Theme section*].
+
+
+=== Site index template
+
+Your site index template is required and should be located in `content/index.html`.
+
+{|
+[source,html]
+.content/index.html
+----
+---
+
+title: Hello Roqers // <1>
+description: It is time to start Roqing 🎸!
+layout: :theme/index //<2>
+
+---
+
+
Hello fellow Roqers 🤘
+
+
+ With Roq, it is very easy to a link to another.
+ page. // <3>
+
+
+----
+
+<1> The index.html also describe your `site` information through a FrontMatter header.
+<2> The layout to use (in this case `:theme/index` which refers to the `index` layout from the theme).
+<3> We use the `{site.url(path)}` using Qute to manual resolve other pages urls.
+
+|}
+
+TIP: There are different ways to link your pages as explained in the link:{site.url('docs/advanced')}#links[Links & Urls] section.
+
+=== Variables
+
+{|
+
+You can use Qute to access site and pages data. For this use the `site` and `page` variables:
+
+* The `site` variable allow to access site global info from any page, document, layout or partial.
++
+.Show attributes
+[%collapsible]
+====
+[cols="1,1,1,1", options="header"]
+|===
+| Variable | Type | Description | Example
+
+| `site.url`
+| `RoqUrl`
+| The Roq site URL
+| `http://example.com/my-roq-site/`
+
+| `site.imagesUrl`
+| `RoqUrl`
+| Directory to resolve images URL (e.g. /static/images)
+| `http://example.com/static/images`
+
+| `site.data`
+| `JsonObject`
+| The site FM data (declared in the index.html)
+| `{"title": "My Site", "description": "A description"}`
+
+| `site.pages`
+| `java.util.List`
+| All the pages in this site (without the documents)
+| `[Page1, Page2, Page3]`
+
+| `site.collections`
+| `RoqCollections`
+| All the collections in this site (containing documents)
+| `{"collection1": Collection1, "collection2": Collection2}`
+
+| `site.title`
+| `String`
+| The site title
+| `My Site`
+
+| `site.description`
+| `String`
+| The site description
+| `A description`
+
+| `site.image`
+| `RoqUrl`
+| The site image URL if present
+| `http://example.com/static/images/site.png`
+
+| `site.url(Object path, Object... others)`
+| `RoqUrl`
+| Shortcut for site.url.resolve(path)
+| `site.url.resolve("/about") => http://example.com/my-roq-site/about`
+|===
+====
+
+* The `page` variable is available in pages, documents, layouts, and partials. It contains the info for the page it is used from.
++
+.Show attributes
+[%collapsible]
+====
+[cols="1,1,1,1", options="header"]
+|===
+| Variable | Type | Description | Example
+
+| `page.url`
+| `RoqUrl`
+| The URL to this page
+| `http://example.com/about`
+
+| `page.info`
+| `PageInfo`
+| The page info (file name, ...)
+|
+
+| `page.data`
+| `JsonObject`
+| The FM data of this page
+| `{"title": "About Us", "description": "This is the about us page."}`
+
+| `page.paginator`
+| `Paginator`
+| The paginator if any
+| `Paginator{currentPage=1, totalPages=5}`
+
+| `page.collection`
+| `String`
+| The collection id if this a document
+| `posts`
+
+| `page.title()`
+| `String`
+| The title of the page (shortcut from FM)
+| `About Us`
+
+| `page.description()`
+| `String`
+| The description of the page (shortcut from FM)
+| `This is the about us page.`
+
+| `page.image()`
+| `RoqUrl`
+| The image URL of the page if present
+| `http://example.com/static/images/about.png`
+
+| `page.date()`
+| `ZonedDateTime`
+| The publication date of the page
+| `2023-10-01T12:00:00Z`
+|===
+====
+
+=== Pages
+
+Any directory without the `_` prefix in the site directory will be scanned for pages content.
+
+Let's create your first page and spice things up a bit by using Markdown.
+
+[source,markdown]
+.roq-bottom.md
+----
+---
+
+title: Roq Bottom
+description: When you hit Roq bottom, try Roq to climb back up!
+layout: :theme/page
+link: /climb-back-up <1>
+the-rope: You Roq! <2>
+
+---
+
+# Roq Bottom
+
+If you thought you hit Roq Bottom, take this 🪢 because :
+
+__{page.data.the-rope}!__ <3>
+
+----
+
+<1> you can use `link` to give this page a custom link (by default it will use the file-name).
+<2> you can add other FM data.
+<3> FM data is available through `page.data`.
+
+=== Global data
+
+It is possible to
+
+
+=== Collections
+
+Collections are a great way to group related content such as blog posts, recipes, member of a team or talks at a conference.
+Once created you can easily iterate and link to them.
+
+By default, Roq is configured with a `posts` collection using the `content/posts` directory. Let's create our first post:
+
+[source,markdown]
+.content/posts/2024-10-14-roq-solid.md
+----
+---
+
+title: Roq bad puns
+description: Roq is very good for bad puns 🤭
+layout: :theme/post <1>
+tags: <2>
+ - funny
+ - ai
+img: 2024/10/roq-solid.jpg
+
+---
+
+# {page.title} <3>
+
+Here is a list of puns suggested by Chat GPT:
+1. Roq and Rule – A play on “rock and roll,” implying dominance or success.
+2. Between a Roq and a Hard Place – Classic pun meaning stuck in a difficult situation.
+3. Roq Solid – Something that is extremely reliable or stable.
+4. You Roq! – A compliment, suggesting someone is awesome or does something well.
+5. Roq Bottom – Referring to the lowest possible point, often used metaphorically.
+6. Roq the Boat – To cause trouble or disturb the status quo.
+7. Roq Star – A person who excels or stands out in their field.
+8. Let’s Roq – Slang for getting started or doing something exciting.
+9. Roq On! – An enthusiastic way to say “keep going” or “stay awesome.”
+10. Roqy Road – Could be literal (the type of road) or metaphorical for a difficult journey.
+11. Roq of Ages – A historical reference, often implying something long-standing and unchanging.
+12. Roq the Cradle – Can be literal or a pun about nurturing or starting something new.
+13. Roqy Relationship – A tumultuous or unstable relationship.
+14. Heavy as a Roq – Something burdensome or difficult to manage.
+15. Stone Cold Roq – Referring to something very cool or emotionless.
+
+----
+|}
+<1> This time we use the `post` layout from the theme.
+<2> You can define tags (see link:{site.url('docs/plugins')}#plugin-tagging[Plugins] to create pages for tags).
+<3> You have shortcut on the `page` to access `title` and `description`.
+{|
+
+Then let's edit our index page to show the list of posts:
+
+[source,html]
+.content/index.html
+----
+---
+title: Hello Roqers
+description: It is time to start Roqing 🎸!
+layout: main
+---
+
+
Hello fellow Roqers 🤘
+
+
+{#for post in site.collections.posts} // <1>
+
+ {#if post.image}
+ // <2> <3>
+ {/if}
+
+
+{/for}
+----
+|}
+<1> You can use `site.collections.[collection id]` to access the full list of documents (it is also possible to link:{site.url('docs/advanced')}#pagination[paginate]).
+<2> `post.image` is smart and is already resolved to the image url (as a RoqUrl).
+<3> `post.url` contains the post url (as a RoqUrl), you could also use `post.url.absolute` to get the absolute url.
+<4> `post.date` returns a `ZonedDateTime` and can be formatted the way you want.
+<5> `post.readTime` is a Qute template extension which compute the read time based on the post content.
+
+{|
+
+=== Static files
+
+By default, all files in `static/` are treated as static..
+
+=== Styles and Javascript
+
+NOTE: The Quarkus Web Bundler is included by default with the Roq extension.
+
+You can add css and scripts in your static directory or bundle them.
+To use bundling scripts (js, ts) and styles (css, scss) should be located in `src/main/web/app/`. To include the generated bundle in your template, specify the bundle tag in the `html>head` tag:
+
+[source,html]
+.layouts/head.html
+----
+
+ ...
+ {#bundle /}
+
+----
+
+It will be rendered with the relevant `