diff --git a/README.md b/README.md
index 6971ceb..3598f63 100644
--- a/README.md
+++ b/README.md
@@ -22,6 +22,8 @@ npm run prettier        # Prettier formatting
 
 ### Export story for upload
 
+Requires `libreoffice` to be installed and in your path.
+
 ```bash
 npm run export-story -- --output-dir ~/Documents/TO_UPLOAD slug-for-story-to-export
 ```
diff --git a/examples/game.md b/examples/game.md
new file mode 100644
index 0000000..bdc1e52
--- /dev/null
+++ b/examples/game.md
@@ -0,0 +1,26 @@
+---
+# slug: some-custom-slug
+title: Example Draft
+# shortTitle: Example
+pubDate: 2024-01-01
+isDraft: true
+authors: bad-manners
+contentWarning: >
+  This game contains some stuff.
+# thumbnail: /src/assets/thumbnails/game_crossing_over_cover.png
+description: |
+  Some funny text.
+# descriptionPlaintext: >
+#   Some funny text.
+# mastodonPost:
+#   instance: meow.social
+#   user: BadManners
+#   postId: "numericalPostId"
+tags: []
+# series: the-lost-of-the-marshes
+# relatedStories: []
+# relatedGames: []
+# lang: eng
+---
+
+The game content goes here.
diff --git a/examples/story.md b/examples/story.md
new file mode 100644
index 0000000..f3c56a6
--- /dev/null
+++ b/examples/story.md
@@ -0,0 +1,31 @@
+---
+# slug: some-custom-slug
+title: Example Draft
+# shortTitle: Example
+pubDate: 2024-01-01
+isDraft: true
+authors: bad-manners
+wordCount: 1000
+contentWarning: >
+  Contains: Non-fatal same size oral vore, with willing anthro male fox predator, and unwilling feral female wolf prey. Also includes other stuff.
+# thumbnail: /src/assets/thumbnails/tlotm_ch1.png
+description: |
+  Some funny text.
+# descriptionPlaintext: >
+#   Some funny text.
+# mastodonPost:
+#   instance: meow.social
+#   user: BadManners
+#   postId: "numericalPostId"
+tags: []
+# series: the-lost-of-the-marshes
+# prev: previous-story
+# next: ~
+# summary: |
+#   Some funny summary
+# relatedStories: []
+# relatedGames: []
+# lang: eng
+---
+
+The story goes here.
diff --git a/examples/user.yaml b/examples/user.yaml
new file mode 100644
index 0000000..044d44d
--- /dev/null
+++ b/examples/user.yaml
@@ -0,0 +1,20 @@
+name: Nameless User
+nameLang:
+  eng: Nameless
+  tok: jan Nenlesuse pi nimi ala
+# avatar: /src/assets/images/logo_bm.png
+links:
+  website: https://example.com
+  eka: https://aryion.com/g4/user/NamelessUser
+  furaffinity:
+    - https://www.furaffinity.net/user/NamelessUser
+    - Nameless_User
+  inkbunny: https://inkbunny.net/NamelessManners
+  sofurry:
+    - https://nameless-user.sofurry.com/
+    - Nameless User
+  weasyl: https://www.weasyl.com/~NamelessUser
+  twitter: https://twitter.com/NamelessUser
+  mastodon: https://some.mastodon.instance/@NamelessUser
+  bluesky: https://bsky.app/profile/namelessuser.bsky.social
+preferredLink: website
diff --git a/package-lock.json b/package-lock.json
index cfbeb1e..4b00508 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "gallery-badmanners-xyz",
-  "version": "0.0.1",
+  "version": "1.1.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "gallery-badmanners-xyz",
-      "version": "0.0.1",
+      "version": "1.1.0",
       "dependencies": {
         "@astrojs/check": "^0.5.9",
         "@astrojs/rss": "^4.0.5",
diff --git a/package.json b/package.json
index 3bc4330..c4508a2 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "gallery-badmanners-xyz",
   "type": "module",
-  "version": "1.0.0",
+  "version": "1.1.0",
   "scripts": {
     "dev": "astro dev",
     "start": "astro dev",
diff --git a/src/content/games/drafts/.gitignore b/src/content/games/drafts/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/src/content/games/drafts/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/src/content/stories/drafts/.gitignore b/src/content/stories/drafts/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/src/content/stories/drafts/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/src/content/stories/tiny-accident.md b/src/content/stories/tiny-accident.md
index 403f94f..60bb623 100644
--- a/src/content/stories/tiny-accident.md
+++ b/src/content/stories/tiny-accident.md
@@ -4,7 +4,7 @@ pubDate: 2024-03-25
 authors: bad-manners
 wordCount: 3000
 contentWarning: >
-  Contains: Non-fatal oral vore, with unwilling to willing anthro male rat predator, unwilling micro anthro male wolf prey. Also includes implied regurgitation, masturbation, sizeplay, and unexpected micro groping.
+  Contains: Non-fatal oral vore, with unwilling to willing anthro male rat predator, and unwilling micro anthro male wolf prey. Also includes implied regurgitation, masturbation, sizeplay, and unexpected micro groping.
 thumbnail: /src/assets/thumbnails/bm_18_tiny_accident.png
 description: |
   Kolo's day at the airship is nearly over, but a tiny stalker will unwittingly make his evening quite eventful...
diff --git a/src/content/stories/tomo-moku.md b/src/content/stories/tomo-moku.md
index 79a4ab2..e2861cb 100644
--- a/src/content/stories/tomo-moku.md
+++ b/src/content/stories/tomo-moku.md
@@ -20,8 +20,6 @@ tags:
   - unwilling prey
   - flash fiction
 summary: |
-  For those curious, here's a summary of the story in English:
-
   Lijan, a red nondescript mammal, makes his way through town to a new 'tomo moku' ("eating place"), expecting it to be a restaurant. They can't find the building among the similar looking ones, and spot a colorful and spooked bird covered in some liquid, who they ask for directions.
 
   The bird shouts stuff erratically, basically telling him not to go there, until a yellow nondescript reptile walks out from a building and spooks them into flying off. They introduce themself as Maku and invite Lijan into the 'tomo moku'.
diff --git a/src/layouts/StoryLayout.astro b/src/layouts/StoryLayout.astro
index a3067c7..57cbdd0 100644
--- a/src/layouts/StoryLayout.astro
+++ b/src/layouts/StoryLayout.astro
@@ -246,6 +246,29 @@ const thumbnail =
           <CopyrightedCharacters copyrightedCharacters={copyrightedCharacters} lang={props.lang} />
         </Prose>
       </section>
+      {
+        props.summary ? (
+          <section id="summary" class="px-2 font-serif" aria-describedby="title-summary">
+            <h2 id="title-summary" class="py-2 font-serif text-xl font-semibold text-stone-800 dark:text-stone-100">
+              {props.lang === "eng" ? "Summary" : props.lang === "tok" ? "lipu tawa tenpo lili" : null}
+            </h2>
+            <details class="mb-6 mt-1 rounded-lg border border-stone-400 bg-stone-50 text-stone-800 dark:border-stone-500 dark:bg-stone-900 dark:text-stone-100">
+              <summary class="rounded-lg bg-stone-200 px-2 py-1 dark:bg-stone-800">
+                {props.lang === "eng"
+                  ? "Click to reveal"
+                  : props.lang === "tok"
+                    ? "Click to reveal summary in English"
+                    : null}
+              </summary>
+              <div class="px-2 py-1">
+                <Prose>
+                  <Markdown of={props.summary} />
+                </Prose>
+              </div>
+            </details>
+          </section>
+        ) : null
+      }
       <div class="pr-3 text-right print:hidden">
         <a href="#top" class="text-link inline-flex items-center underline"
           ><svg class="mr-1 h-6 w-6 fill-current" viewBox="0 0 384 512" aria-hidden="true"
diff --git a/src/pages/stories/the-lost-of-the-marshes.astro b/src/pages/stories/the-lost-of-the-marshes.astro
index 174b037..a1484b2 100644
--- a/src/pages/stories/the-lost-of-the-marshes.astro
+++ b/src/pages/stories/the-lost-of-the-marshes.astro
@@ -28,11 +28,11 @@ const mainChaptersWithSummaries = mainChapters.filter((story) => story.data.summ
     <details
       class="mx-3 mb-6 mt-1 rounded-lg border border-stone-400 bg-stone-300 dark:border-stone-500 dark:bg-stone-700"
     >
-      <summary class="rounded-lg bg-stone-200 px-2 py-1 dark:bg-stone-800"
-        >Click to reveal spoilers up to {
+      <summary class="rounded-lg bg-stone-200 px-2 py-1 dark:bg-stone-800">
+        Click to reveal spoilers up to {
           mainChaptersWithSummaries[mainChaptersWithSummaries.length - 1].data.title.match(/Chapter \d+\b/)?.[0]
-        }</summary
-      >
+        }
+      </summary>
       <ul class="border-t border-stone-400 px-1 dark:border-stone-500">
         {
           mainChapters