diff --git a/fgs/page.py b/fgs/datatypes.py
similarity index 63%
rename from fgs/page.py
rename to fgs/datatypes.py
index cc2c7a308a0626e421084cc96b79fd1c4afdf3b9..2976725c0c26cde30b7c8871ab0356dfc2f759d6 100644
--- a/fgs/page.py
+++ b/fgs/datatypes.py
@@ -1,3 +1,6 @@
+import datetime
+from dateutil import parser as dtparser
+
 class Page:
 
     #filename = None
@@ -63,6 +66,47 @@ class Page:
         # url
         self.url = self.lang + '/' + self.category + '/' + self.slug + ".html"
 
+        # relevance
+        self.relevance = {}
+        self.relevance['is_relevant'] = False
+        self.relevance['was_relevant'] = False
+        self.relevance['will_be_relevant'] = False
+        if 'relevant' in metadata:
+            lrel = metadata['relevant']
+            if not isinstance(lrel, dict):
+                prio = lrel
+                lrel = {}
+                lrel['prio'] = prio
+
+            if 'prio' in lrel:
+                self.relevance['prio']= lrel['prio']
+            else:
+                self.relevance['prio']= 0
+
+            start = Date("min", config)
+            if 'start' in lrel:
+                start = Date(lrel['start'], config)
+            self.relevance['start'] = start
+
+            end = Date("max", config)
+            if 'end' in lrel:
+                end = Date(lrel['end'], config)
+            self.relevance['end'] = end
+
+            build_date = Date("now", config)
+            if (build_date > end):
+                self.relevance['was_relevant'] = True
+            elif (build_date < start):
+                self.relevance['will_be_relevant'] = True
+            else:
+                self.relevance['is_relevant'] = True
+
+
+
+
+
+
+
     def tags_str_to_list(self, s):
         res = []
         l = s.split(',')
@@ -75,13 +119,23 @@ class Page:
         return res
 
 
-
     def __lt__(self, other):
         return self.date_modified < other.date_modified
 
 
 class Date:
     def __init__(self, dt, config):
+        if isinstance(dt, str):
+            if dt == "min":
+                dt = dtparser.parse("1970-01-01")
+            elif dt == "max":
+                dt = dtparser.parse("9999-01-01")
+            elif dt == "now":
+                dt = datetime.datetime.now()
+            else:
+                dt = dtparser.parse(dt)
+        if isinstance(dt, datetime.date):
+                dt = datetime.datetime(dt.year, dt.month, dt.day)
         self.dt = dt
         #self.config = config
         # TODO various formats
diff --git a/fgs/generator.py b/fgs/generator.py
index e620c4aa0da86495de7be445d12e81d09b6ad8bb..5967df567a17ad5b2f6f0246d120897108759bb5 100644
--- a/fgs/generator.py
+++ b/fgs/generator.py
@@ -1,3 +1,4 @@
+import datatypes
 
 class Generator:
     def __init__(self, config, context):
@@ -60,6 +61,23 @@ class Generator:
                 tags[page.lang][tag].append(page)
         self.context['tags'] = tags
 
+        # build_date
+        self.context['build_date'] = datatypes.Date("now", self.config)
+
+        # relevant_pages
+        relevant_pages_tuple = []
+        for page in published_pages:
+            if page.relevance['is_relevant']:
+                relevant_pages_tuple.append((page.relevance['prio'], page))
+        relevant_pages_tuple.sort(key=lambda x: x[0])
+        relevant_pages_tuple.reverse()
+        relevant_pages = []
+        for prio, page in relevant_pages_tuple:
+            relevant_pages.append(page)
+        self.context['relevant_pages'] = relevant_pages
+        self.context['relevant_pages_tuple'] = relevant_pages_tuple
+
+
 
 
     def generate_homepage(self, writer, lang, path):
diff --git a/fgs/reader.py b/fgs/reader.py
index 1e8058f379df96aefb334802b74bec0aadc1f4bc..14e6c0f8b721158fb38bd89e2a984874c006ad75 100644
--- a/fgs/reader.py
+++ b/fgs/reader.py
@@ -1,10 +1,9 @@
-import page
+import datatypes
 import pandoc
 
 import frontmatter
 
 from datetime import datetime
-from dateutil import parser as dtparser
 
 import subprocess
 import os
@@ -80,9 +79,9 @@ class MarkdownReader:
             date_modified = datetime.fromisoformat(date_changes[0])
             date_created = datetime.fromisoformat(date_changes[-1])
         if 'date' in metadata:
-            date_created = dtparser.parse(metadata['date'])
+            date_created = metadata['date']
         if 'modified' in metadata:
-            date_modified = dtparser.parse(metadata['modified'])
+            date_modified = metadata['modified']
         #print("created: ", date_created)
         #print("last changed: ", date_modified)
 
@@ -112,7 +111,7 @@ class MarkdownReader:
 
         # TODO summary
 
-        p = page.Page(
+        p = datatypes.Page(
                 filename,
                 subpath,
                 rawfile,
diff --git a/theme/templates/macros/cards.html b/theme/templates/macros/cards.html
index ed39f9b06b741ee4136e183b7e38023f0ea174e6..8b21f0f8dcac8017c5c2cf24953f9fb62c169f5d 100644
--- a/theme/templates/macros/cards.html
+++ b/theme/templates/macros/cards.html
@@ -28,7 +28,7 @@
 		{{ open() }}
 	{%- endif -%}
 	{%- for page in pages -%}
-		{%- if max == None or loop.index < max -%}
+		{%- if max is none or loop.index < max -%}
 			{{ cards.card_from_page(page, lang) }}
 		{%- endif -%}
 	{%- endfor -%}
diff --git a/theme/templates/macros/renderers.html b/theme/templates/macros/renderers.html
index d34240739590c599a3cb02e95e562d5849c016dc..a681666c0f0386bb5796afd610f8049c16f9c8ed 100644
--- a/theme/templates/macros/renderers.html
+++ b/theme/templates/macros/renderers.html
@@ -3,7 +3,11 @@
 {%- import 'macros/content_renderer.html' as content_renderer with context -%}
 
 {%- macro section_news(s, lang) -%}
-	{{ cards.cards_from_pages(pages_modified, max=s.num) }}
+	{{ cards.cards_from_pages(pages_modified, max=s.num|d(None)) }}
+{%- endmacro -%}
+
+{%- macro section_relevant(s, lang) -%}
+	{{ cards.cards_from_pages(relevant_pages, max=s.num|d(None)) }}
 {%- endmacro -%}
 
 {%- macro section_custom(s, lang) -%}
@@ -29,7 +33,7 @@
 				<h2 {% if s.id is defined -%}id="{{ s.id }}"{%- endif %}>{{ tagtitle|e }}</h2>
 			</header>
 		{%- endif -%}
-		{{ cards.cards_from_pages(tagpages, lang, max=s.num) }}
+		{{ cards.cards_from_pages(tagpages, lang, max=s.num|d(None)) }}
 		
 		{%- if tagpage -%}
 			{{ content_renderer.render_content(tagpage.content, lang) }}
@@ -51,6 +55,8 @@
 		{{ section_custom(s, lang) }}
 	{%- elif s.type == "tag" -%}
 		{{ section_tag(s, lang) }}
+	{%- elif s.type == "relevant" -%}
+		{{ section_relevant(s, lang) }}
 	{%- else -%}
 	<br />
 	<strong>ERROR: render.section: Unknown section type: {{ s.type|e }}</strong><br />