Repos / hi.imnhan.com / 3d26dfeef1
commit 3d26dfeef15c36b7ad170ff27ad4642c8fc407bd
Author: Nhân <hi@imnhan.com>
Date:   Wed Aug 23 20:48:04 2023 +0700

    make proper movie-streaming series

diff --git a/_s4g/manifest b/_s4g/manifest
index e920bea..5d26b48 100644
--- a/_s4g/manifest
+++ b/_s4g/manifest
@@ -13,6 +13,10 @@ index.html
 linux-automation/index.html
 manjaro-xfce/index.html
 mcross/index.html
+movie-streaming/gflick-fixed/index.html
+movie-streaming/gflick/index.html
+movie-streaming/index.html
+movie-streaming/put.io/index.html
 node-webkit/index.html
 notes.html
 pathogen-vs-vundle/index.html
@@ -53,9 +57,6 @@ sqlite-python/index.html
 stepmania-pad/index.html
 tmux-italics/index.html
 ubuntu-programs/index.html
-video-streaming-1/index.html
-video-streaming-2/index.html
-video-streaming-3/index.html
 vim-open-link/index.html
 virtualenvwrapper/index.html
 yaks.html
\ No newline at end of file
diff --git a/_s4g/redirects.txt b/_s4g/redirects.txt
index b5bb930..af8734f 100644
--- a/_s4g/redirects.txt
+++ b/_s4g/redirects.txt
@@ -18,9 +18,9 @@ posts/my-first-diy-fightstick-part-2/index.html -> fightstick-2/
 posts/opening-http-link-under-the-cursor-in-vim/index.html -> vim-open-link/
 posts/setting-up-your-development-environment-for-a-node-webkit-project/index.html -> node-webkit/
 posts/simplest-possible-stepmania-soft-to-hard-pad-mod/index.html -> stepmania-pad/
-posts/streaming-videos-from-google-drive-a-second-attempt/index.html -> video-streaming-2/
-posts/the-video-streaming-finale-or-why-putio-is-awesome/index.html -> video-streaming-3/
-posts/towards-an-acceptable-video-playing-experience/index.html -> video-streaming-1/
+posts/streaming-videos-from-google-drive-a-second-attempt/index.html -> movie-streaming/gflick-fixed/
+posts/the-video-streaming-finale-or-why-putio-is-awesome/index.html -> movie-streaming/put.io/
+posts/towards-an-acceptable-video-playing-experience/index.html -> movie-streaming/gflick/
 posts/virtualenwrapper-python2-python3/index.html -> virtualenvwrapper/
 posts/what-i-did-after-installing-manjaro-xfce/index.html -> manjaro-xfce/
 posts/why-i-use-linux-automation/index.html -> linux-automation/
diff --git a/_s4g/theme/navbar.css b/_s4g/theme/navbar.css
index 3a7107b..71bba65 100644
--- a/_s4g/theme/navbar.css
+++ b/_s4g/theme/navbar.css
@@ -5,6 +5,7 @@ nav > a {
 nav > .posted-on {
   float: right;
   font-style: italic;
+  margin-bottom: 0.5rem;
 }
 
 .nav-hr {
diff --git a/_s4g/theme/post.tmpl b/_s4g/theme/post.tmpl
index 6878886..15fa7c6 100644
--- a/_s4g/theme/post.tmpl
+++ b/_s4g/theme/post.tmpl
@@ -5,8 +5,47 @@
 {{- template "navbar" .}}
 
 <main>
+
+{{- if .Post.Parent }}
+<em>
+  This post is part of
+  <a href="{{.Post.Parent.WebPath}}">{{.Post.Parent.Title}}</a>
+</em>
+<hr>
+{{- end }}
+
 <h1>{{.Post.Title}}</h1>
+
 {{.Content}}
+{{if .Post.Parent }}
+  <div class="series-container">
+    <p>
+      Here's every post in
+      <a href="{{.Post.Parent.WebPath}}">{{.Post.Parent.Title}}</a>,
+      in chronological order:
+    </p>
+
+    <ol>
+    {{- range .Post.Parent.Children }}
+      {{ if not .IsDraft -}}
+      <li><a href="{{.WebPath}}">{{.Title}}</a>
+          {{- if eq $.Post.WebPath .WebPath }} (you are here) {{- end -}}
+      </li>
+      {{- end -}}
+    {{ end }}
+    </ol>
+  </div>
+
+  <style>
+    .series-container {
+      margin: 2rem 0;
+      padding: 0 1rem;
+      border: 1px dashed #aaa;
+      background-color: #eee;
+    }
+  </style>
+{{ end -}}
+
 </main>
 
 {{template "footer" .}}
diff --git a/_s4g/theme/series-index.tmpl b/_s4g/theme/series-index.tmpl
new file mode 100644
index 0000000..aee5b53
--- /dev/null
+++ b/_s4g/theme/series-index.tmpl
@@ -0,0 +1,27 @@
+{{- define "head"}}{{- end}}
+
+{{define "body"}}
+
+{{- template "navbar" .}}
+
+<main>
+
+<h1>{{.Post.Title}}</h1>
+{{.Content}}
+
+<ol>
+{{ range .Post.Children }}
+{{- if not .IsDraft}}
+  <li style="margin-bottom: 1rem;">
+    <a href="{{.WebPath}}">{{.Title}}</a>
+    <br>
+    <span>{{.PostedAt.Local.Format "January 1, 2006"}}</span>
+  </li>
+{{- end}}
+{{ end }}
+</ol>
+
+</main>
+
+{{template "footer" .}}
+{{- end}}
diff --git a/about/index.html b/about/index.html
index 19a1616..56d71b9 100644
--- a/about/index.html
+++ b/about/index.html
@@ -27,7 +27,9 @@
 
 
 <main>
+
 <h1>About</h1>
+
 <p>Hi, I’m Nhân. I make webstuff for a living.</p>
 <p><img alt="literally me" src="keyboard-warrior.jpg"></p>
 <p>My mind is a sad mess that cannot hold much information after a couple of
diff --git a/chromebook/index.html b/chromebook/index.html
index e223601..956b044 100644
--- a/chromebook/index.html
+++ b/chromebook/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Acer Chromebook Spin 713 &#34;Voxel&#34;: an adequate Crostini device, a buggy Linux laptop</h1>
+
 <p><strong>June 2023 update</strong>: I <a href="https://github.com/WeirdTreeThing/chromebook-linux-audio/issues/2#issuecomment-1578962117">learned</a> that using pulseaudio instead of
 pipewire works around the audio issue. The following is the original article.</p>
 <hr>
diff --git a/cool/index.html b/cool/index.html
index afde9d7..b2f94ba 100644
--- a/cool/index.html
+++ b/cool/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>&#34;Have you built anything cool?&#34;</h1>
+
 <p>So recently I went to a <em>networking event</em>—something I have never liked or been good at. I’m
 not sure if I’m one of those introverts or if I’m just socially awkward, but the very idea of
 going around trying to converse with total strangers just to exchange business cards is not at all
diff --git a/custom-theme/index.html b/custom-theme/index.html
index fb8d1f5..432519d 100644
--- a/custom-theme/index.html
+++ b/custom-theme/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Look ma, no stock theme!</h1>
+
 <p><strong>2023 Update</strong>: I just realized that em dashes in certain default sans-serif
 fonts look terrible (no space around the dash), so I now explicitly use Source
 Sans Pro and Ubuntu Mono. Using specific fonts allow me to fine-tune my
diff --git a/fcitx/index.html b/fcitx/index.html
index 98726cb..1cc38b6 100644
--- a/fcitx/index.html
+++ b/fcitx/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Dẹp ibus-unikey đi, dùng fcitx-unikey nhé!</h1>
+
 <p><strong>Cập nhật tháng 1/2021:</strong> hiện tại mình dùng fcitx5 trên Arch + KDE, <a href="https://wiki.archlinux.org/title/Fcitx5">cài đặt
 và config</a> không thể đơn giản hơn:</p>
 <pre><code class="language-sh">sudo pacman -S fcitx5 fcitx5-qt fcitx5-gtk fcitx5-unikey kcm-fcitx5
diff --git a/feed.xml b/feed.xml
index d79b430..3544a2b 100644
--- a/feed.xml
+++ b/feed.xml
@@ -52,15 +52,15 @@
   </entry>
   <entry>
     <title>The video streaming finale, or why put.io is awesome</title>
-    <id>https://beta.imnhan.com/video-streaming-3/</id>
-    <link href="https://beta.imnhan.com/video-streaming-3/"></link>
+    <id>https://beta.imnhan.com/movie-streaming/put.io/</id>
+    <link href="https://beta.imnhan.com/movie-streaming/put.io/"></link>
     <published>2020-10-21T11:45:00+07:00</published>
     <updated>2020-10-21T11:45:00+07:00</updated>
   </entry>
   <entry>
     <title>Streaming videos from Google Drive: a second attempt</title>
-    <id>https://beta.imnhan.com/video-streaming-2/</id>
-    <link href="https://beta.imnhan.com/video-streaming-2/"></link>
+    <id>https://beta.imnhan.com/movie-streaming/gflick-fixed/</id>
+    <link href="https://beta.imnhan.com/movie-streaming/gflick-fixed/"></link>
     <published>2020-06-10T08:25:00+07:00</published>
     <updated>2020-06-10T08:25:00+07:00</updated>
   </entry>
@@ -73,8 +73,8 @@
   </entry>
   <entry>
     <title>Towards an acceptable video playing experience</title>
-    <id>https://beta.imnhan.com/video-streaming-1/</id>
-    <link href="https://beta.imnhan.com/video-streaming-1/"></link>
+    <id>https://beta.imnhan.com/movie-streaming/gflick/</id>
+    <link href="https://beta.imnhan.com/movie-streaming/gflick/"></link>
     <published>2020-04-26T10:06:00+07:00</published>
     <updated>2020-04-26T10:06:00+07:00</updated>
   </entry>
diff --git a/fightstick-1/index.html b/fightstick-1/index.html
index ca7ca6e..dc7ca3e 100644
--- a/fightstick-1/index.html
+++ b/fightstick-1/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>My first DIY fightstick: Part 1</h1>
+
 <p>Ever since I started practicing Street Fighter seriously (albeit with modest results), I’ve
 always wanted to make myself a custom fightstick. Now that I’m not working full-time for anyone,
 there’s no better time to Just Do It.</p>
diff --git a/fightstick-2/index.html b/fightstick-2/index.html
index ee92530..266ce77 100644
--- a/fightstick-2/index.html
+++ b/fightstick-2/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>My first DIY fightstick: Part 2</h1>
+
 <p>It’s been a while since I <a href="../fightstick-1/">started</a> my arcade stick project. To be honest I got lazy and paused
 the whole thing for a while, but yesterday I needed a distraction so… everything came together
 much more nicely than I thought!</p>
diff --git a/go-stack/index.html b/go-stack/index.html
index 810702c..ef00615 100644
--- a/go-stack/index.html
+++ b/go-stack/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Go, Postgres, Caddy, systemd: a simple, highly portable, Docker-free web stack</h1>
+
 <p>I’ve <a href="../pippable-webapp/">mentioned</a> before that I’m not a fan of Docker as a deployment
 strategy. In that same post I briefly mentioned that Go could simplify
 deployment compared to Python. Today I’ll <em>go</em> (haha get it?) into detail,
diff --git a/hdviet/index.html b/hdviet/index.html
index 17918ea..e9b4d39 100644
--- a/hdviet/index.html
+++ b/hdviet/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>How I bypassed my university&#39;s domain blocker to watch movies on hdviet.com</h1>
+
 <p><strong>TL;DR</strong>: Clone <a href="https://github.com/nhanb/twisted-connect-proxy">my script from GitHub</a>, run it with <code>python2 server.py 8080</code>, configure your
 browser to use localhost:8080 as HTTP and HTTPS proxy, profit.</p>
 <p><strong>Disclaimer</strong>: The sole reason I came up with this trick and documented it was to satisfy my
diff --git a/ideas.html b/ideas.html
index e1ea6cf..c4ce17b 100644
--- a/ideas.html
+++ b/ideas.html
@@ -27,7 +27,9 @@
 
 
 <main>
+
 <h1>Potential project ideas</h1>
+
 <section id="Self-hosted-RSS-reader-in-D">
 <h2>Self hosted RSS reader in D</h2>
 <ul>
diff --git a/index.dj b/index.dj
index d75a6e5..ea36263 100644
--- a/index.dj
+++ b/index.dj
@@ -1,4 +1,4 @@
 Title: Home
 ShowInFeed: false
-Templates: $base.tmpl, $includes.tmpl, $home.tmpl
+PageType: home
 ---
diff --git a/index.html b/index.html
index 092db4e..a488d81 100644
--- a/index.html
+++ b/index.html
@@ -70,12 +70,12 @@ <h1 class="site-title">Hi, I&#39;m Nhân</h1>
     <span>February 2, 2021</span>
   </li>
   <li class="article">
-    <a href="/video-streaming-3/">The video streaming finale, or why put.io is awesome</a>
+    <a href="/movie-streaming/put.io/">The video streaming finale, or why put.io is awesome</a>
     <br>
     <span>October 10, 2020</span>
   </li>
   <li class="article">
-    <a href="/video-streaming-2/">Streaming videos from Google Drive: a second attempt</a>
+    <a href="/movie-streaming/gflick-fixed/">Streaming videos from Google Drive: a second attempt</a>
     <br>
     <span>June 6, 2020</span>
   </li>
@@ -85,7 +85,7 @@ <h1 class="site-title">Hi, I&#39;m Nhân</h1>
     <span>May 5, 2020</span>
   </li>
   <li class="article">
-    <a href="/video-streaming-1/">Towards an acceptable video playing experience</a>
+    <a href="/movie-streaming/gflick/">Towards an acceptable video playing experience</a>
     <br>
     <span>April 4, 2020</span>
   </li>
diff --git a/linux-automation/index.html b/linux-automation/index.html
index 9877b93..21741fc 100644
--- a/linux-automation/index.html
+++ b/linux-automation/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Why I use Linux: Automation</h1>
+
 <p>(In this post, when I say Linux, I mean any popular GNU/Linux distribution. Hope this clarification
 will keep the nitpickers away.)</p>
 <p>First let’s discuss <em>why</em> automation rocks.</p>
diff --git a/manjaro-xfce/index.html b/manjaro-xfce/index.html
index 16209a3..577a198 100644
--- a/manjaro-xfce/index.html
+++ b/manjaro-xfce/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>What I did after installing Manjaro xfce</h1>
+
 <p>After about 2 months with elementary OS, I got sick of the guaranteed once-every-hour crashes of
 its <strong>Files</strong> file manager (yeah, I’m still hating their naming decisions with a passion), the
 flickering when I play fullscreen OpenGL games, and the automatic collapsing of workspaces. I’ve
diff --git a/mcross/index.html b/mcross/index.html
index 9a8b94a..e74e4fa 100644
--- a/mcross/index.html
+++ b/mcross/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Introducing McRoss—a minimal gemini browser</h1>
+
 <p>The last couple of months saw the first “PR” wave of <a href="https://gemini.circumlunar.space/">the gemini protocol</a>
 on the usual online <a href="https://lobste.rs/s/79pu7o/gemini_protocol_inbetween_gopher_web">tech</a><a href="https://news.ycombinator.com/item?id=23042424">(bro)</a> forums. Its pitch is simple: the web
 has gone out of hand, gopher is too barebones and insecure by default, here’s a
diff --git a/video-streaming-2/gflick_01_mobile.png b/movie-streaming/gflick-fixed/gflick_01_mobile.png
similarity index 100%
rename from video-streaming-2/gflick_01_mobile.png
rename to movie-streaming/gflick-fixed/gflick_01_mobile.png
diff --git a/video-streaming-2/index.dj b/movie-streaming/gflick-fixed/index.dj
similarity index 100%
rename from video-streaming-2/index.dj
rename to movie-streaming/gflick-fixed/index.dj
diff --git a/video-streaming-2/index.html b/movie-streaming/gflick-fixed/index.html
similarity index 90%
rename from video-streaming-2/index.html
rename to movie-streaming/gflick-fixed/index.html
index 5ef539e..ed6ad3f 100644
--- a/video-streaming-2/index.html
+++ b/movie-streaming/gflick-fixed/index.html
@@ -33,7 +33,14 @@
 
 
 <main>
+<em>
+  This post is part of
+  <a href="/movie-streaming/">The movie streaming saga</a>
+</em>
+<hr>
+
 <h1>Streaming videos from Google Drive: a second attempt</h1>
+
 <p><strong>TL;DR:</strong> I improved the Google Drive video streaming experience mentioned in
 an <a href="/posts/towards-an-acceptable-video-playing-experience/">earlier blog post</a>. It now works like this on an Android phone with
 mpv-android installed:</p>
@@ -130,6 +137,29 @@ <h2>In conclusion</h2>
 non-sanctioned devices. I probably need to upgrade to a beefier tablet though.</p>
 </section>
 
+
+  <div class="series-container">
+    <p>
+      Here's every post in
+      <a href="/movie-streaming/">The movie streaming saga</a>,
+      in chronological order:
+    </p>
+
+    <ol>
+      <li><a href="/movie-streaming/gflick/">Towards an acceptable video playing experience</a></li>
+      <li><a href="/movie-streaming/gflick-fixed/">Streaming videos from Google Drive: a second attempt</a> (you are here)</li>
+      <li><a href="/movie-streaming/put.io/">The video streaming finale, or why put.io is awesome</a></li>
+    </ol>
+  </div>
+
+  <style>
+    .series-container {
+      margin: 2rem 0;
+      padding: 0 1rem;
+      border: 1px dashed #aaa;
+      background-color: #eee;
+    }
+  </style>
 </main>
 
 <footer>
diff --git a/video-streaming-1/index.dj b/movie-streaming/gflick/index.dj
similarity index 98%
rename from video-streaming-1/index.dj
rename to movie-streaming/gflick/index.dj
index dd4f9e2..3be0372 100644
--- a/video-streaming-1/index.dj
+++ b/movie-streaming/gflick/index.dj
@@ -131,10 +131,6 @@ those Chinese Surface knock-offs or what.
 
 Also both of those required setting up each client device. Not ideal.
 
-### Update June 10, 2020
-
-The sequel is out: [Streaming videos from Google Drive - a second attempt][8]
-
 [1]: https://kipalog.com/posts/Cac-web-phim-da-giam-99-99--chi-phi-bang-google-drive-nhu-the-nao
 [2]: https://help.netflix.com/en/node/23742
 [3]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range
diff --git a/video-streaming-1/index.html b/movie-streaming/gflick/index.html
similarity index 91%
rename from video-streaming-1/index.html
rename to movie-streaming/gflick/index.html
index 900ab9c..6c784e5 100644
--- a/video-streaming-1/index.html
+++ b/movie-streaming/gflick/index.html
@@ -33,7 +33,14 @@
 
 
 <main>
+<em>
+  This post is part of
+  <a href="/movie-streaming/">The movie streaming saga</a>
+</em>
+<hr>
+
 <h1>Towards an acceptable video playing experience</h1>
+
 <p>I watch movies and TV shows.
 Naturally, I have some strong preferences on how to view them:</p>
 <p><strong>English subtitles</strong>. Most things I watch are in English.
@@ -161,12 +168,31 @@ <h2>Other failed attempts</h2>
 </li>
 </ul>
 <p>Also both of those required setting up each client device. Not ideal.</p>
-<section id="Update-June-10-2020">
-<h3>Update June 10, 2020</h3>
-<p>The sequel is out: <a href="../video-streaming-2/">Streaming videos from Google Drive - a second attempt</a></p>
-</section>
 </section>
 
+
+  <div class="series-container">
+    <p>
+      Here's every post in
+      <a href="/movie-streaming/">The movie streaming saga</a>,
+      in chronological order:
+    </p>
+
+    <ol>
+      <li><a href="/movie-streaming/gflick/">Towards an acceptable video playing experience</a> (you are here)</li>
+      <li><a href="/movie-streaming/gflick-fixed/">Streaming videos from Google Drive: a second attempt</a></li>
+      <li><a href="/movie-streaming/put.io/">The video streaming finale, or why put.io is awesome</a></li>
+    </ol>
+  </div>
+
+  <style>
+    .series-container {
+      margin: 2rem 0;
+      padding: 0 1rem;
+      border: 1px dashed #aaa;
+      background-color: #eee;
+    }
+  </style>
 </main>
 
 <footer>
diff --git a/movie-streaming/index.dj b/movie-streaming/index.dj
new file mode 100644
index 0000000..94f390a
--- /dev/null
+++ b/movie-streaming/index.dj
@@ -0,0 +1,8 @@
+Title: The movie streaming saga
+ShowInFeed: false
+PageType: series-index
+---
+
+It's the 2020s. Fiber-to-the-home bandwidth is plentiful.
+Follow me on this journey to find the best movie streaming experience for the
+ethically flexible. _ThE EnD mIgHT sHoCK yOu._
diff --git a/movie-streaming/index.html b/movie-streaming/index.html
new file mode 100644
index 0000000..2cf66b9
--- /dev/null
+++ b/movie-streaming/index.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8" />
+  <title>The movie streaming saga | Hi, I&#39;m Nhân</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/feed.xml">
+  <link rel="stylesheet" href="/_s4g/theme/base.css">
+
+  <meta property="og:title" content="The movie streaming saga" />
+  <meta name="twitter:title" content="The movie streaming saga" />
+  <meta name="twitter:card" content="summary" /><meta property="og:image" content="https://beta.imnhan.com/about/keyboard-warrior.jpg" />
+    <meta name="twitter:image" content="https://beta.imnhan.com/about/keyboard-warrior.jpg" /><meta name="twitter:site" content="@nhanb" />
+</head>
+
+<body>
+
+<link rel="stylesheet" href="/_s4g/theme/navbar.css">
+<nav>
+  <a href="/">Home</a>
+  <a href="/about/">About</a>
+  <a href="/projects/">Projects</a>
+
+</nav>
+<hr class="nav-hr">
+
+
+<main>
+
+<h1>The movie streaming saga</h1>
+<p>It’s the 2020s. Fiber-to-the-home bandwidth is plentiful.
+Follow me on this journey to find the best movie streaming experience for the
+ethically flexible. <em>ThE EnD mIgHT sHoCK yOu.</em></p>
+
+
+<ol>
+
+  <li style="margin-bottom: 1rem;">
+    <a href="/movie-streaming/gflick/">Towards an acceptable video playing experience</a>
+    <br>
+    <span>April 4, 2020</span>
+  </li>
+
+  <li style="margin-bottom: 1rem;">
+    <a href="/movie-streaming/gflick-fixed/">Streaming videos from Google Drive: a second attempt</a>
+    <br>
+    <span>June 6, 2020</span>
+  </li>
+
+  <li style="margin-bottom: 1rem;">
+    <a href="/movie-streaming/put.io/">The video streaming finale, or why put.io is awesome</a>
+    <br>
+    <span>October 10, 2020</span>
+  </li>
+
+</ol>
+
+</main>
+
+<footer>
+© 2013–2023 nhanb<br>
+Made with <a href="https://github.com/nhanb/s4g">s4g</a>
+</footer>
+
+</body>
+
+</html>
diff --git a/video-streaming-3/index.dj b/movie-streaming/put.io/index.dj
similarity index 94%
rename from video-streaming-3/index.dj
rename to movie-streaming/put.io/index.dj
index e6d2651..0bae93d 100644
--- a/video-streaming-3/index.dj
+++ b/movie-streaming/put.io/index.dj
@@ -3,10 +3,6 @@ PostedAt: 2020-10-21 11:45
 
 ---
 
-[Previously](../video-streaming-2),
-[previously](../video-streaming-1).
-
-
 I ditched the whole self hosted mess and just bought a [put.io](https://put.io)
 subscription instead. This has become the smoothest, most no-nonsense video
 streaming experience I've ever had.
diff --git a/video-streaming-3/index.html b/movie-streaming/put.io/index.html
similarity index 77%
rename from video-streaming-3/index.html
rename to movie-streaming/put.io/index.html
index afdeccd..a736283 100644
--- a/video-streaming-3/index.html
+++ b/movie-streaming/put.io/index.html
@@ -33,9 +33,14 @@
 
 
 <main>
+<em>
+  This post is part of
+  <a href="/movie-streaming/">The movie streaming saga</a>
+</em>
+<hr>
+
 <h1>The video streaming finale, or why put.io is awesome</h1>
-<p><a href="../video-streaming-2">Previously</a>,
-<a href="../video-streaming-1">previously</a>.</p>
+
 <p>I ditched the whole self hosted mess and just bought a <a href="https://put.io">put.io</a>
 subscription instead. This has become the smoothest, most no-nonsense video
 streaming experience I’ve ever had.</p>
@@ -60,6 +65,29 @@ <h1>The video streaming finale, or why put.io is awesome</h1>
 <p>It’s refreshing to find software that works <em>for</em> instead of <em>against</em> its
 users these days.</p>
 
+
+  <div class="series-container">
+    <p>
+      Here's every post in
+      <a href="/movie-streaming/">The movie streaming saga</a>,
+      in chronological order:
+    </p>
+
+    <ol>
+      <li><a href="/movie-streaming/gflick/">Towards an acceptable video playing experience</a></li>
+      <li><a href="/movie-streaming/gflick-fixed/">Streaming videos from Google Drive: a second attempt</a></li>
+      <li><a href="/movie-streaming/put.io/">The video streaming finale, or why put.io is awesome</a> (you are here)</li>
+    </ol>
+  </div>
+
+  <style>
+    .series-container {
+      margin: 2rem 0;
+      padding: 0 1rem;
+      border: 1px dashed #aaa;
+      background-color: #eee;
+    }
+  </style>
 </main>
 
 <footer>
diff --git a/video-streaming-3/put.io-drag-n-drop.mp4 b/movie-streaming/put.io/put.io-drag-n-drop.mp4
similarity index 100%
rename from video-streaming-3/put.io-drag-n-drop.mp4
rename to movie-streaming/put.io/put.io-drag-n-drop.mp4
diff --git a/node-webkit/index.html b/node-webkit/index.html
index 30dcfe5..c011a3c 100644
--- a/node-webkit/index.html
+++ b/node-webkit/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Setting up your development environment for a node-webkit project</h1>
+
 <p><img alt="" src="nw_xp.png"></p>
 <p><a href="https://github.com/rogerwang/node-webkit">Node-webkit</a> lets you write cross-platform (Mac + Linux + Winbloze) desktop applications using
 HTML5 and nodejs. That’s a fancy way of saying “a webkit wrapper that also gives you filesystem
diff --git a/notes.html b/notes.html
index a8d432a..8dd3f4b 100644
--- a/notes.html
+++ b/notes.html
@@ -27,7 +27,9 @@
 
 
 <main>
+
 <h1>Random notes</h1>
+
 <p>In which I jot down scattered tidbits on various topics.</p>
 <section id="SRE">
 <h2>SRE</h2>
diff --git a/pathogen-vs-vundle/index.html b/pathogen-vs-vundle/index.html
index 769759c..8507780 100644
--- a/pathogen-vs-vundle/index.html
+++ b/pathogen-vs-vundle/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Modern vim plugin management: Pathogen vs Vundle</h1>
+
 <p>For the impatient ones: Vundle is better than pathogen, use it.</p>
 <p>This post will explain how vim plugins work and how to easily manage your plugins with
 third-party tools: Pathogen or Vundle. I assume you are using a Linux distro and have git
diff --git a/petition-fraud/index.html b/petition-fraud/index.html
index 74c63d0..56b1bf6 100644
--- a/petition-fraud/index.html
+++ b/petition-fraud/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>I did NOT sign that online petition!</h1>
+
 <p>This evening I received a rather strange email:</p>
 <p><img alt="" src="rmitsc_01_wtf.png"></p>
 <p>Um… I don’t remember signing any petition recently (or ever, for that matter)?</p>
diff --git a/pippable-webapp/index.html b/pippable-webapp/index.html
index e585d31..10af212 100644
--- a/pippable-webapp/index.html
+++ b/pippable-webapp/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>I made my python webapp installable via pip</h1>
+
 <p>Running <code>pip3 install pytaku</code> now gives you all the tools you need <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a> <a id="fnref2" href="#fn2" role="doc-noteref"><sup>2</sup></a> to
 deploy <a href="https://sr.ht/~nhanb/pytaku/">pytaku</a> - a hobby webapp of mine - on a fresh Debian 11 server:</p>
 <pre><code class="language-sh">pytaku-generate-config &gt; pytaku.conf.json  # generate config file
diff --git a/posts/streaming-videos-from-google-drive-a-second-attempt/index.html b/posts/streaming-videos-from-google-drive-a-second-attempt/index.html
index 8dfc14a..03a31e6 100644
--- a/posts/streaming-videos-from-google-drive-a-second-attempt/index.html
+++ b/posts/streaming-videos-from-google-drive-a-second-attempt/index.html
@@ -1,10 +1,10 @@
 <!DOCTYPE html>
 <html lang="en">
   <head>
-    <title>Redirecting to /video-streaming-2/</title>
-    <meta http-equiv="Refresh" content="0; URL=/video-streaming-2/" />
+    <title>Redirecting to /movie-streaming/gflick-fixed/</title>
+    <meta http-equiv="Refresh" content="0; URL=/movie-streaming/gflick-fixed/" />
   </head>
   <body>
-    The page you're looking for has been moved to <a href="/video-streaming-2/">/video-streaming-2/</a>.
+    The page you're looking for has been moved to <a href="/movie-streaming/gflick-fixed/">/movie-streaming/gflick-fixed/</a>.
   </body>
 </html>
diff --git a/posts/the-video-streaming-finale-or-why-putio-is-awesome/index.html b/posts/the-video-streaming-finale-or-why-putio-is-awesome/index.html
index 289cabf..83a40af 100644
--- a/posts/the-video-streaming-finale-or-why-putio-is-awesome/index.html
+++ b/posts/the-video-streaming-finale-or-why-putio-is-awesome/index.html
@@ -1,10 +1,10 @@
 <!DOCTYPE html>
 <html lang="en">
   <head>
-    <title>Redirecting to /video-streaming-3/</title>
-    <meta http-equiv="Refresh" content="0; URL=/video-streaming-3/" />
+    <title>Redirecting to /movie-streaming/put.io/</title>
+    <meta http-equiv="Refresh" content="0; URL=/movie-streaming/put.io/" />
   </head>
   <body>
-    The page you're looking for has been moved to <a href="/video-streaming-3/">/video-streaming-3/</a>.
+    The page you're looking for has been moved to <a href="/movie-streaming/put.io/">/movie-streaming/put.io/</a>.
   </body>
 </html>
diff --git a/posts/towards-an-acceptable-video-playing-experience/index.html b/posts/towards-an-acceptable-video-playing-experience/index.html
index 904703c..834db22 100644
--- a/posts/towards-an-acceptable-video-playing-experience/index.html
+++ b/posts/towards-an-acceptable-video-playing-experience/index.html
@@ -1,10 +1,10 @@
 <!DOCTYPE html>
 <html lang="en">
   <head>
-    <title>Redirecting to /video-streaming-1/</title>
-    <meta http-equiv="Refresh" content="0; URL=/video-streaming-1/" />
+    <title>Redirecting to /movie-streaming/gflick/</title>
+    <meta http-equiv="Refresh" content="0; URL=/movie-streaming/gflick/" />
   </head>
   <body>
-    The page you're looking for has been moved to <a href="/video-streaming-1/">/video-streaming-1/</a>.
+    The page you're looking for has been moved to <a href="/movie-streaming/gflick/">/movie-streaming/gflick/</a>.
   </body>
 </html>
diff --git a/projects/index.html b/projects/index.html
index 9ef47dc..2ff315f 100644
--- a/projects/index.html
+++ b/projects/index.html
@@ -27,7 +27,9 @@
 
 
 <main>
+
 <h1>Projects</h1>
+
 <p>I’ve written some open source software in my free time.
 In some cases I even maintain them! Shocking, I know.</p>
 <section id="Shark">
diff --git a/pyqt5/index.html b/pyqt5/index.html
index f3a953d..959e1e0 100644
--- a/pyqt5/index.html
+++ b/pyqt5/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>How to install PyQt5 on a virtualenv on Ubuntu 14.04</h1>
+
 <p>The official way to install PyQt5 for development is to download and compile SIP + PyQt5 from
 source, which is painstakingly slow (compiling PyQt5 took like 10 minutes on my PC). If you’re
 <a href="https://michalcodes4life.wordpress.com/2014/03/16/pyqt5-python-3-3-in-virtualenv-on-ubuntu/">compiling it against a virtualenv</a>, rinse and repeat for each new virtualenv you create.
diff --git a/pytaku-old/index.html b/pytaku-old/index.html
index e7df6e8..fff0ad2 100644
--- a/pytaku-old/index.html
+++ b/pytaku-old/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Introducing Pytaku—the only online manga reader you&#39;ll ever need</h1>
+
 <p><strong>Heads up from 2021!</strong> This post describes a previous incarnation of Pytaku
 which is no longer alive.  The new Pytaku is a slightly different thing which
 is being (relatively) actively developed <a href="https://sr.ht/~nhanb/pytaku/">on
diff --git a/rmit-wifi/index.html b/rmit-wifi/index.html
index 54635ca..5877d75 100644
--- a/rmit-wifi/index.html
+++ b/rmit-wifi/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Fix RMIT wi-fi issue in Ubuntu 13.04 and variants</h1>
+
 <section id="The-issue">
 <h2>The issue</h2>
 <p>When I upgraded to Xubuntu 13.04, although I could connect to any other wi-fi network painlessly,
diff --git a/sqlite-python/index.html b/sqlite-python/index.html
index 304c15e..30cf3ee 100644
--- a/sqlite-python/index.html
+++ b/sqlite-python/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Working with SQLite in Python without an ORM or migration framework</h1>
+
 <p><img alt="byte-magazine-databases" src="byte_databases.jpg"><br>
 <em><a href="https://archive.org/details/byte-magazine">(seriously though, BYTE covers are the best)</a></em></p>
 <p>I learned about SQLite’s <code>user_version</code> pragma some time ago from a comment on
diff --git a/stepmania-pad/index.html b/stepmania-pad/index.html
index 2993624..7099b5d 100644
--- a/stepmania-pad/index.html
+++ b/stepmania-pad/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Simplest possible stepmania soft-to-hard pad mod</h1>
+
 <p>I’ve been playing Stepmania on and off for years now, but only recently tried
 taping the soft dancepad to the floor. It blew my mind how much better it
 felt, since I no longer had to worry about the pad sliding or curling up:</p>
diff --git a/tmux-italics/index.html b/tmux-italics/index.html
index e5f28fd..affeeba 100644
--- a/tmux-italics/index.html
+++ b/tmux-italics/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Enable italic text inside vim inside tmux inside gnome-terminal</h1>
+
 <p><strong>2023 Update</strong>: I now use <a href="https://sw.kovidgoyal.net/kitty/">kitty</a> terminal
 which has powerful tab &amp; split functionalities so tmux is no longer necessary
 for my “unix IDE” use case. Removing tmux also means removing a whole class of
diff --git a/ubuntu-programs/index.html b/ubuntu-programs/index.html
index 4cc63c2..96811ae 100644
--- a/ubuntu-programs/index.html
+++ b/ubuntu-programs/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Installing programs in Ubuntu</h1>
+
 <p>This article will not only explain how to install stuff, but it will (hopefully) also give readers
 a better understanding about Linux’s structure for storing and executing programs, ultimately
 appreciate the usefulness of package managers in general.</p>
diff --git a/vim-open-link/index.html b/vim-open-link/index.html
index 5bd8e83..3563a53 100644
--- a/vim-open-link/index.html
+++ b/vim-open-link/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Opening http link under the cursor in vim</h1>
+
 <p>Mr. <a href="https://www.walterbright.com/">Walter Bright</a>, creator of the D
 programming language, recently
 <a href="https://news.ycombinator.com/item?id=28090272">commented</a> on Hacker News:</p>
diff --git a/virtualenvwrapper/index.html b/virtualenvwrapper/index.html
index ceda48c..05eba0f 100644
--- a/virtualenvwrapper/index.html
+++ b/virtualenvwrapper/index.html
@@ -33,7 +33,9 @@
 
 
 <main>
+
 <h1>Virtualenv(wrapper), python2 and python3</h1>
+
 <p>Virtualenv and virtualenvwrapper make it super easy to have a sandboxed python environment for each
 of your projects, no doubt about it (if you’re not using them already, feel free to google how to
 get started).</p>
diff --git a/yaks.html b/yaks.html
index e63f699..9f1fcc1 100644
--- a/yaks.html
+++ b/yaks.html
@@ -27,7 +27,9 @@
 
 
 <main>
+
 <h1>Yak shaving</h1>
+
 <p>Basically my TODOs, in pursuit of the ever-pervasive <em>pleasant workflow</em>.</p>
 <section id="Replacing-tmux-with-kitty">
 <h2>Replacing tmux with kitty</h2>