diff --git a/CHANGELOG.md b/CHANGELOG.md
index a979f6bfc8b540e80eeafa220dc4b0fced2c8fc9..415df4de6ad70e1455f505414d1c6f5a185e9425 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,14 @@
 # Changelog
 
-## 2.0.1
+## 2.1.0
 
 * Card shortcode will not longer render the horizontal rule when there is no
     bottom text to render.
+* Added several shortcodes and CSS for rendering info-fields, for example for
+    contact info. See `info-entry.html`, `info-field.html`, `info-key.html` and
+    `info-value.html` under the `/layouts/shortcodes/` directory.
+* Added the `container-split` short code which will split a container into two
+    columns.
 
 ## 2.0.0
 
diff --git a/api/nodeinfo/2.1.ts b/api/nodeinfo/2.1.ts
index 65078feb3a78c467a266aef4bd364f3b00f90313..5c287d3493da7297401a4b5161ebd6dd3abeee92 100644
--- a/api/nodeinfo/2.1.ts
+++ b/api/nodeinfo/2.1.ts
@@ -9,7 +9,7 @@ export default function (req: VercelRequest, res: VercelResponse) {
       "name": "Fedipage",
       "repository": "https://git.qoto.org/fedipage/fedipage",
       "homepage": "https://fedipage.com/",
-      "version": "2.0.1"
+      "version": "2.1.0"
     },
     "protocols": [
       "activitypub"
diff --git a/assets/css/main.css b/assets/css/main.css
index 8571585da1be694d85fd4f15c5566343016cfe45..b56f1ac5fdf593dbf90d10bd7c08c0c121364028 100644
--- a/assets/css/main.css
+++ b/assets/css/main.css
@@ -736,3 +736,36 @@ div#ch-tooltip {
 	content: '- ';
   font-size: 2rem;
 }
+
+/* Infofield css */
+.info-field h2 {
+  font-size: 1em;
+  border-bottom-style: ridge;
+}
+
+.entry {
+  display: grid;
+  grid-template-columns: auto max-content;
+  grid-template-areas: "key value";
+
+  align-items: end;
+  gap: 0 .25rem;
+}
+
+.value {
+  grid-area: value;
+}
+
+.key {
+  grid-area: key;
+  position: relative;
+  overflow: hidden;
+}
+
+.key::after {
+  content: " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "
+  ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "
+  ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ";
+  position: absolute;
+  text-align: right;
+}
diff --git a/layouts/shortcodes/container-split.html b/layouts/shortcodes/container-split.html
new file mode 100644
index 0000000000000000000000000000000000000000..930368761edd52b2ba02daacfc0d06075fe00ab4
--- /dev/null
+++ b/layouts/shortcodes/container-split.html
@@ -0,0 +1,3 @@
+<div class="col-md-6">
+  {{ .Inner }}
+</div>
diff --git a/layouts/shortcodes/info-entry.html b/layouts/shortcodes/info-entry.html
new file mode 100644
index 0000000000000000000000000000000000000000..655fcb8d7b03771d8e32f7f8cd7c1e9d387363df
--- /dev/null
+++ b/layouts/shortcodes/info-entry.html
@@ -0,0 +1,3 @@
+<div class="entry">
+  {{ .Inner }}
+</div>
diff --git a/layouts/shortcodes/info-field.html b/layouts/shortcodes/info-field.html
new file mode 100644
index 0000000000000000000000000000000000000000..ae37628af5ad17f8a24a9d77135e3162fac630d0
--- /dev/null
+++ b/layouts/shortcodes/info-field.html
@@ -0,0 +1,3 @@
+<div class="info-field row">
+  {{ .Inner }}
+</div>
diff --git a/layouts/shortcodes/info-key.html b/layouts/shortcodes/info-key.html
new file mode 100644
index 0000000000000000000000000000000000000000..19133f1c264f2b6a76529cb329feecb38ca38feb
--- /dev/null
+++ b/layouts/shortcodes/info-key.html
@@ -0,0 +1 @@
+<div class="key">{{ .Inner }}</div>
diff --git a/layouts/shortcodes/info-value.html b/layouts/shortcodes/info-value.html
new file mode 100644
index 0000000000000000000000000000000000000000..673e3b9ab619b7d7fe1bbb6e0931319e04b2286b
--- /dev/null
+++ b/layouts/shortcodes/info-value.html
@@ -0,0 +1 @@
+<div class="value">{{ .Inner }}</div>