From 6f3ee2326bde11350639eb8c1b0bb6be4deef791 Mon Sep 17 00:00:00 2001
From: Frederick Yin
Date: Fri, 7 Jan 2022 22:46:24 +0800
Subject: Reorganize all past blogposts
---
docs/gemini_tldr.md | 130 -------------
docs/haiku.md | 41 -----
docs/how_fkfd_is_made.md | 52 ------
docs/img/avi_triplehat_diecut.png | Bin 0 -> 23505 bytes
docs/img/rickstodon-youtube-GET.webp | Bin 12322 -> 0 bytes
docs/img/rickstodon.webp | Bin 49910 -> 0 bytes
docs/index.md | 6 +-
docs/meta.md | 48 ++---
docs/projects/img/rickstodon-youtube-GET.webp | Bin 0 -> 12322 bytes
docs/projects/img/rickstodon.webp | Bin 0 -> 49910 bytes
docs/projects/index.md | 28 +++
docs/projects/rickstodon.md | 255 ++++++++++++++++++++++++++
docs/random/gemini_tldr.md | 132 +++++++++++++
docs/random/how_fkfd_is_made.md | 52 ++++++
docs/random/index.md | 12 ++
docs/random/realgit.md | 71 +++++++
docs/realgit.md | 71 -------
docs/rickstodon.md | 253 -------------------------
docs/shitpost/fake_moon_landing.md | 19 ++
docs/shitpost/haiku.md | 41 +++++
docs/shitpost/index.md | 10 +
docs/shitpost/rousseau_and_schopenhauer.md | 22 +++
22 files changed, 663 insertions(+), 580 deletions(-)
delete mode 100644 docs/gemini_tldr.md
delete mode 100644 docs/haiku.md
delete mode 100644 docs/how_fkfd_is_made.md
create mode 100644 docs/img/avi_triplehat_diecut.png
delete mode 100644 docs/img/rickstodon-youtube-GET.webp
delete mode 100644 docs/img/rickstodon.webp
create mode 100644 docs/projects/img/rickstodon-youtube-GET.webp
create mode 100644 docs/projects/img/rickstodon.webp
create mode 100644 docs/projects/index.md
create mode 100644 docs/projects/rickstodon.md
create mode 100644 docs/random/gemini_tldr.md
create mode 100644 docs/random/how_fkfd_is_made.md
create mode 100644 docs/random/index.md
create mode 100644 docs/random/realgit.md
delete mode 100644 docs/realgit.md
delete mode 100644 docs/rickstodon.md
create mode 100644 docs/shitpost/fake_moon_landing.md
create mode 100644 docs/shitpost/haiku.md
create mode 100644 docs/shitpost/index.md
create mode 100644 docs/shitpost/rousseau_and_schopenhauer.md
diff --git a/docs/gemini_tldr.md b/docs/gemini_tldr.md
deleted file mode 100644
index c631968..0000000
--- a/docs/gemini_tldr.md
+++ /dev/null
@@ -1,130 +0,0 @@
-# Gemini TL;DR
-
-For any internet protocol, you can either make it a few thousand words long, or make it 114M. Of course, we know this 114M wasn't there in the first place. W3C has tried very hard to standardize the web, without guarantee it would be simple. So, what we have now is a collaborative system where it's easier to introduce a standard than to deprecate one (remember Adobe Flash?). It's reassuring to know there isn't a central megacorp monopolizing the web, but this openness comes at a cost. It's when evangelical developers who can't program proper desktop apps abruptly choose to make a new web framework, a parasite on web browsers - one of the only things that are largely cross-platform. Because the work of portability has been handled by Mozilla, Google, etc, not by themselves, there is virtually no limitation regarding what you can do with it. If a handful of people suddenly like your "standard", all modern browsers will get to support it eventually.
-
-[Gemini](https://gemini.circumlunar.space/) is a young protocol that's slightly heavier than Gopher, but radically more lightweight than the Web. Its [spec](https://gemini.circumlunar.space/docs/spec-spec.txt) is 4.4k words long as of time of writing, which, excluding the appendix, is a 20-minute read if you skim past the microscopic details. Here is a TL;DR of the specs that's ~1k words long.
-
-## Prerequisites
-
-Before you proceed, there are a few fields of knowledge that you need to temporarily throw away while reading this post, plus a few you don't. Most of the former is HTTP-related.
-
-### Throw away entirely
-
-- CSS
-- JavaScript(R)(c)TM
-- All the fancy frameworks you have learned about (flask, jinja, react, jquery etc.)
-- Apache and nginx
-
-### Place within arm's reach
-
-- HTML
-- HTTP:
- - headers
- - 3-digit status codes
- - verbs, e.g. GET, POST
- - cookies
-
-### Do not throw away
-
-- TCP
-- TLS
-
-## Gemini spec
-
-### Synopsis
-
-- "Gemini" is the name of a [crewed space mission by NASA](https://en.wikipedia.org/wiki/Project_Gemini).
-- this spec is not complete, but probs won't change a lot soon.
-- gemini transports data via TCP/IP on port 1965 because the first crewed flight of Gemini was on March 23, 1965. This means unprivileged users can run a gemini server, too.
-
-### Requests and Responses
-- Gemini terminates lines with CRLF (`\r\n`) in requests and response headers.
-- Everything should be UTF-8.
-- Client sends a request to server: `\r\n`.
-- Server first responds with a response header: ` \r\n`.
-- Speaking of status codes, some helpful ones are `20 SUCCESS`, `30/31 REDIRECT`, and `51 NOT FOUND`. Status codes with the same leading digit belong to the same category and are treated similarly in clients.
-- If server returns `2x (SUCCESS)`, it will send a response body (e.g. the page requested, the file the client wishes to download, etc.) right after the response header. In such case, the `` in the header should be the MIME type of the content.
-- If the response body belongs to MIME type `text/*`, it should use CRLF as its linebreak. LF is also accepted.
-- No support for compression or chunking of the content.
-- There is no keep-alive. A TCP connection is closed right after a request and response, and must be re-initiated should the client make another request.
-- Sending requests whose URL scheme is not gemini is called "proxying", and is not supported by most servers.
-
-### `text/gemini`
-
-- By default, the response body MIME type is `text/gemini`.
-- You can also serve other types, of course, but you'll have to specify in `` of the response header.
-- The following list will teach you how to write `text/gemini`.
-
-#### Line types
-
-1. Text lines: ezpz, just normal text. Authors and servers should not "hardwrap", i.e. limit column width to e.g. 80 chars; the client should wrap a long line containing the entire paragraph into a block.
-2. Link lines: any non-preformatted line starting with `=>` is a link line. It should be followed by a URL, then optionally a link description. Like this:
-
-```
-=> gemini://fkfd.me/ fkfd.me geminispace
-```
-
-which is equivalent to this in HTML:
-
-```
-fkfd.me geminispace
-```
-
-Expect absolute and relative links, and ones that aren't even on gemini.
-
-3. Preformatted lines: any line between two lines that read ````` (3 backticks) is a preformatted line. Just like markdown. Like this (prefixed with a space in order not to interfere with formatting):
-
-```
- ```
- Without preformatted lines, ASCII art wouldn't have been possible!
- ```
-```
-
-It should be rendered as monospace.
-
-4. Heading lines: any non-preformatted line starting with 1-3 hashes is a heading line. Also, you know, sure, like markdown. Like this:
-
-```
-# h1
-## h2
-### h3
-#### nope, not a heading
-###interestingly, the whitespace is optional
-```
-
-5. Unordered list items: any non-preformatted line starting with an asterisk is an unordered list item, i.e. an item of a bullet list. Like this:
-
-```
-* list item 1
-* list item 2
-*whitespace is optional again
-* although if I want to mimic italics it would be
-*pretty* hard
-* to distinguish it from list items
-```
-
-### TLS
-
-- TLS is mandatory for Gemini.
-- You must use TLS 1.2+; 1.3+ is encouraged.
-- A client can trust whatever cert it sees, but the recommended approach is to implement a TOFU (Trust On First Use) system, where:
- - you trust the cert the first time you visit a site, even if it's self-signed
- - you remember it
- - every time you access the site, it sends you this very cert, so you know everything's fine
- - the client will warn the user if the server abruptly sent a different cert when its previous one hasn't expired yet: likely a MITM attack (but also likely the site admin just replaced their cert for some reason).
-
-This eliminates the need for a CA, thus making TLS and gemini itself more accessible and widespread.
-
-- A client can prove its identity with a "Transient client certificate".
- - on a site that asks for one, client generates and sends a cert (regular sites don't; such procedure must be manually approved by the user)
- - the cert is sent along with all subsequent requests to this host
- - server can identify this user now
- - this is like cookies in practice, but very different in implementation
- - one cert is limited to one domain
- - one cert should not exist for longer than 24 hours; it's for one session only.
-
-## Conclusion
-
-This is it; 4.4k words of gemini spec summarized & exemplified in ~1k words. Whether you're reading this on Gemini or the Web (or gopher), I encourage you to join this community of members who are seeking asylum from the debris of the modern web. Gemini is still in an early stage; loads of decisions to make, and lots of pitfalls that the web has fallen in to avoid. This concludes our journey around the gemini spec today; see you in low space orbit.
-
-Oh, also, [McRoss](https://git.sr.ht/~nhanb/mcross) is an awesome GUI client.
diff --git a/docs/haiku.md b/docs/haiku.md
deleted file mode 100644
index c6ffd1e..0000000
--- a/docs/haiku.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# Haiku collection
-
-This is a collection of haiku I composed on February 19, 2020, published on mastodon.technology. See [thread](https://mastodon.technology/@fakefred/103683337253008138).
-
-## Printer
-
-Background: my inkjet jammed up.
-
->I do not have the
-Slightest fucking intention
-To fix that printer
-
-## Arch in a Nutshell
-
-This one is my favorite. `-Syu` is pronounced "S Y U".
-
-> What goes wrong if I
-`sudo pacman -Syu`?
-Google "Arch rollback"
-
-## Python
-
-```
-#!/usr/bin/python
-# what if it gets self-aware?
-raise SystemExit
-```
-
-How to read:
-
-- `#!/usr/bin/python`: "user bin python"
-- `#` is silenced
-
-## Paccache
-
-This is a real story.
-
-> `$ sudo paccache -r`
-20 gigas freed from disk
-very delighted
-
diff --git a/docs/how_fkfd_is_made.md b/docs/how_fkfd_is_made.md
deleted file mode 100644
index dc54baf..0000000
--- a/docs/how_fkfd_is_made.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# How an FKFD Comic is Made
-
-I don't consider myself a cartoonist, let alone good cartoonist. I am unqualified at comics in all aspects, you know? I can hardly draw anything that's not a rectangle, circle, or straight line; for every final stroke you see on the canvas, I have undone and redone three times; my update frequency is like `abs(tan(x/k))` where k is around 10 days\^-1 [1]. One day in May I pushed 4 comics. And then I completely skipped June.
-
-Let me keep it short and talk about how an fkfd comic is made. Not technical details (i.e. export as webp, then png, then run `./submit.py`...) but how I come up with ideas and express them in comics.
-
-## Life -> Idea
-
-However boring your life may be, you always find ideas bumping from inside your brain; they may just be a little dull. I catch my inspirations right away when I come up with one. Here is a list of common ideas.
-
-- I look at things that vaguely resemble others, and make fun of that[2].
-- I ask myself questions "what if we...?" and imagine the possibilities in the wildest way[3].
-- I contemplate about today's society and world, and when I cannot squueze jokes out of them, I make them look thought-provoking[4].
-- I voice concerns about today's technology and its relationship with human life[5].
-- Also comics that are straightforward xkcd parodies[6], or even ones that reuse xkcd graphics[7].
-- Giant buildup for giant fun, like flowcharts and tables[8].
-- Irony pointed at one certain type of person[9].
-- Inevitable graph jokes[10].
-- Personal rant[11].
-- Puns and wordplay[12].
-
-The ideas can be funny or serious, revolving around an outdated or emerging topic, whatever. Apply the craziest spices until the idea is hot enough to attract a handful of people. Avoid *really* niche hobbies, and definitely don't go to depths (i.e. inside jokes), for the sake of audience coverage. As a side note, I never deliberately check if my idea has been taken. Too much trouble. I do avoid copying ideas I know to exist, though.
-
-## Others' Idea -> My Idea
-
-My comics are large influenced by xkcd. A few other influencers:
-
-- SMBC for sociological ideas and single-panels
-- C&H for the puns
-- Poorly Drawn Lines for the anthropomorphic figures
-- Random Reddit posts for random ideas
-
-## Idea -> Comic
-
-There are certain periods when I was super innovative and others super productive and/or artistic. The best scenario is when these overlapped, and I was able to commit my ideas on the canvas on the fly. That was definitely efficient, but later when I reflected on comics produced over this period, I would often sense creeping embarrassment for lack of due thoughts before submission, or regret over some imperfections like a forgotten punchline. The second best is those moments when I had a genuinely great idea (at least to me at that time), and had a notebook handy. Once I would jot down a few hint words, like "dead kids sent from heaven to haunt their anti-vaxx parents", but turns out I was terrible at remembering details. Soon I learned to draw a rough sketch, and continuously iterate, fixing grammatical problems and pruning unnecessary words (canvas space is precious). Occasionally, I do it on a whiteboard. Finally, I boot up my lappy, draw what's on the paper/whiteboard through my wacom tablet into krita, sometimes verbatim and sometimes with a few minor adjustments, then re-orchestrate the elements so they fit on a digital canvas. Behold! Digital "art".
-
-## Footnotes
-
-[1] Which means my update speed peaks about once per month, while somewhere in the middle it's zero.
-[2] Notable examples: [Heroic Ball Pen](https://fkfd.me/13), [Chihuahuatamayo](https://fkfd.me/74), and [Keychane](https://fkfd.me/93).
-[3] Notable examples: [Night Plane Spotters](https://fkfd.me/70), [Soul Counter](https://fkfd.me/79), and [Amazon Ring](https://fkfd.me/87).
-[4] Notable examples: [Intolerance](https://fkfd.me/65), [Zeta-373](https://fkfd.me/77), and [Stray Cats](https://fkfd.me/90).
-[5] Notable examples: [Innovations](https://fkfd.me/73), [Intended Internet](https://fkfd.me/86), and [JavaScript](https://fkfd.me/101).
-[6] Notable examples: [Code Quality](https://fkfd.me/10), [Technology, Inc.](https://fkfd.me/11), and [Irrelevant xkcd](https://fkfd.me/67).
-[7] Notable examples: [Python](https://fkfd.me/6), [Entropy Harvesting Daemon](https://fkfd.me/81), and [Childhood Misconceptions](https://fkfd.me/92).
-[8] Notable examples: [Partitions](https://fkfd.me/16), [X-over-Y](https://fkfd.me/53), and [Python Code With No Documentation](https://fkfd.me/55).
-[9] Notable examples: [Flat Earthers](https://fkfd.me/21), [Blogging](https://fkfd.me/26), and [Wish](https://fkfd.me/71).
-[10] Notable examples: [Time Consumption](https://fkfd.me/9), [Turning Point](https://fkfd.me/59), and [Graph Nerd Sniped](https://fkfd.me/89).
-[11] Notable examples: [Smart Home](https://fkfd.me/46), [Middle Button](https://fkfd.me/52), and [Grades](https://fkfd.me/96).
-[12] Notable examples: [Wheeled Armchair and Armed Wheelchair](https://fkfd.me/54), [One-Letter Modifications](https://fkfd.me/69), and [Company Rules](https://fkfd.me/88).
-
-Last updated: 2020-07-21
diff --git a/docs/img/avi_triplehat_diecut.png b/docs/img/avi_triplehat_diecut.png
new file mode 100644
index 0000000..fa1deb9
Binary files /dev/null and b/docs/img/avi_triplehat_diecut.png differ
diff --git a/docs/img/rickstodon-youtube-GET.webp b/docs/img/rickstodon-youtube-GET.webp
deleted file mode 100644
index c5c70aa..0000000
Binary files a/docs/img/rickstodon-youtube-GET.webp and /dev/null differ
diff --git a/docs/img/rickstodon.webp b/docs/img/rickstodon.webp
deleted file mode 100644
index 5a64e3f..0000000
Binary files a/docs/img/rickstodon.webp and /dev/null differ
diff --git a/docs/index.md b/docs/index.md
index 316dc21..08ee994 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,5 +1,3 @@
-# You are in the wrong place. Leave.
+# fkfd
-Why are you here? Are you here because you wanna "learn more" about me, you creep? Or you wanna know some metadata? Go to [the meta page](/meta). Nobody should be checking the index page; I put it here merely because this damn thing won't let me update if I don't include it. I would never share the index page of my blog. If you are here to check for updates, you have done something **monumentally wrong**. There is no such thing called an "update". This is a mere archive of textual rant and thonks that would otherwise be unfit in a comic. If I ever wanted you to read an article of mine, I would attach the entire path to it. Under and only under this circumstance should you check my "blog".
-
-Oh, you're not leaving. Good. I wish I could just put `
` here so that the webpage would end, but you would just hit devtools and read the source. As to the non-tech-savvy audience, they would just hit refresh ever so frantically wondering what the heck is up with their internet. You may not proceed. Leave immediately. Leave before the `
`. This is a threat.
+Yes this is just a low effort blog why do you ask
diff --git a/docs/meta.md b/docs/meta.md
index b42387e..4a42a0a 100644
--- a/docs/meta.md
+++ b/docs/meta.md
@@ -1,41 +1,31 @@
-# Blog Meta
+# fkfd meta
-## PGP
-
-[PGP PUBLIC KEY BLOCK](https://fkfd.me/static/fkfd.asc)
+Last updated 2022-01-07
-`EBD3 5396 508C 755F 3BBA 5458 F355 1C6B 01DB 77FF`
+## PGP
+[EBD3 5396 508C 755F 3BBA 5458 F355 1C6B 01DB 77FF](https://fkfd.me/static/fkfd.asc)
## License
-
[CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) unless otherwise stated.
## Contact
+[Mastodon](https://mastodon.technology/@fakefred)
-[Mastodon.technology](https://mastodon.technology/@fakefred)
+## Nobody builds their blog with MkDocs. What's wrong with you
+Tired of social media buttons and fancy animations that come at the cost of computer juice, I quit. So here you are, in a static-site blog generated with MkDocs (a documentation engine written in Python, like Sphinx). I call this "Blogumentation".
-[fkfd@macaw.me](mailto:fkfd@macaw.me)
+Here is a list of tools that I ruled out:
-## Medium
-
-Tired of social media buttons and excessive fancy animations provided by too many blogging themes, I quit. So here you are, in a static-site blog generated with MkDocs (a documentation engine written in Python, like Sphinx, which is known for its appearance in ReadTheDocs). I call this "Blogumentation".
+- [__ssg6__](https://www.romanzolotarev.com/ssg.html) — A static site generator written in shell. Extremely simple yet versatile. Sadly, it'll take forever for me to settle on a template or CSS, and, given so much privilege, I will most probably break everything.
+- A self-hosted pastebin. The links would be a mess, albeit short.
+- HTML+CSS from scratch. Same as ssg6.
+- Sphinx. It graduated with a `.rst` degree, but who uses rsts these days.
+- Hugo. I didn't want a Go environment on my machine. (Update: Joke's on me, I installed go later and wrote a bit of it. But still no.)
+- Hexo, Jekyll, etc: I didn't want a Node.js/Ruby environment. Keep them away.
-Here is a list of blogging media I was more reluctant to use:
+## Debloated
+You will not find any of these in my blogposts, as long as I am in control:
-- A static site generator I got from [trivial technologies](https://trivial.technology/), literally named "ssg", written in Perl. It is currently used for
- [usable technologies](https://fkfd.me/ut).
-- A self-hosted pastebin. The links would be a mess, albeit short.
-- HTML+CSS from scratch. Not mobile-friendly, and I'm too lazy for it.
-- Sphinx. Its major language is rst, which I do not master.
-- Hugo. I didn't want a Go environment on my machine.
-
-key | value
------------|----------
-features | not many
-speed | fast enough
-SEO | doesn't matter
-javascript | none
-analytics | none
-trackers | none
-original | yes
-DMCA takedown notice | fuck you
+- Advertisements
+- Analytics
+- JavaScript
diff --git a/docs/projects/img/rickstodon-youtube-GET.webp b/docs/projects/img/rickstodon-youtube-GET.webp
new file mode 100644
index 0000000..c5c70aa
Binary files /dev/null and b/docs/projects/img/rickstodon-youtube-GET.webp differ
diff --git a/docs/projects/img/rickstodon.webp b/docs/projects/img/rickstodon.webp
new file mode 100644
index 0000000..5a64e3f
Binary files /dev/null and b/docs/projects/img/rickstodon.webp differ
diff --git a/docs/projects/index.md b/docs/projects/index.md
new file mode 100644
index 0000000..490f1ac
--- /dev/null
+++ b/docs/projects/index.md
@@ -0,0 +1,28 @@
+# Projects
+
+Of all the peojects I've made over the years, not many deserve their own
+standing blogpost either because (a) it is too ephemeral and a thread of
+512-character long microblogs is enough or (b) it is more fitting to write
+proper documentation for it instead (ironic when I build my blog with
+MkDocs). But the few that do, are here.
+
+Projects below are sorted reverse chronologically (most recent first).
+
+## [Rickstodon](rickstodon)
+
+![Demo](img/rickstodon.webp)
+
+On April Fool's Day, 2020, I launched a mock Mastodon login page at
+`https://social.fkfd.me` (now defunct) that rickrolled anyone that clicked
+the links or buttons. It was more sophisticatedly designed than most other
+rickrolling attempts (it's weird to compare trolling technique, I know) in
+that hovering your cursor over the links doesn't immediately reveal your
+evil intent; the URL shown is totally legit, and it takes another round of
+carefully set-up nginx configs to redirect you to the classic music video.
+
+Because of restrictions in AGPL that Mastodon is distributed under,
+I decided not to release the code itself but rather to write a guide on
+how I made it. The codeberg repo that came along was unlicensed.
+
+As I said, this was a impulse project that's faded into the past. It is
+2022 as I write this. Isn't this crazy?
diff --git a/docs/projects/rickstodon.md b/docs/projects/rickstodon.md
new file mode 100644
index 0000000..2b40521
--- /dev/null
+++ b/docs/projects/rickstodon.md
@@ -0,0 +1,255 @@
+# Rickstodon - Rickroll Your Friends (or Foes) With A Fake Mastodon Registration Page
+
+## -- Introducing a new way to present an old prank
+
+![screenshot with most of the buttons and links on the page pointing to the signature rickroll cover image on youtube](img/rickstodon.webp)
+
+See [video demo](https://fkfd.me/static/rickstodon.mp4); hosted on [social.fkfd.me](https://social.fkfd.me); see [Codeberg repo](https://codeberg.org/fakefred/rickstodon)
+
+> Edit 2022-01-07: social.fkfd.me is now defunct.
+
+## How to host it?
+
+Because Mastodon is licensed under AGPL, and the frontend is not explicitly excluded, I doubt the legitimacy to redistribute it unlicensed. Therefore, this repo only contains a guide to make your own Rickstodon in N easy steps. You need either a working nginx, or python+pyramid.
+
+## Prepare a place for your prank
+
+Get a domain. If you already have one, you can always add a subdomain record into its DNS settings, typically available in the registrar's web panel. For example, `social.[your.domain]` is a subdomain that seems totally legit. Set up an A/AAAA record pointing to your server IP. Let's call this domain `social.legit.website` throughout the tutorial.
+
+## Capture the Mastodon
+
+Go to a Mastodon instance you are logged out of. You will be redirected to its about page, which looks like the screenshot above. Download the page using your browser, including the files. Chromium seemed to be unable to fetch the files? idk. Firefox works fine. Press ctrl+s to save `about.html`, as well as its embedded files into a directory called `about_files`.
+
+You will see your files in a structure like:
+
+```
+about.html
+about_files/
+ common-9fa4342b.css
+ d96d39a0abb45b92.png # admin avatar
+ f6a76f37d508b407.png # user avatar
+ fc87edd00a925e4c.png # user avatar
+ 56270e3bbd5ef1a4.png # user avatar
+ vlcsnap-2018-08-27-16h43m11s127.png # the mastodon-paper planes-trumpet picture
+ common-a45d1c15f1388e6b8338.js
+ default-78232038.css
+ favicon.ico
+ locale_en-0b1defbea6f42c8f057f.js
+ public-5e7c276e9e232153d9c4.js
+```
+
+Open `about.html` in your browser. The files should load in their respective place because the filepaths are substituted with `/about_files/xxx`, except for external links, which are retained, e.g. `Documentation` links to `https://docs.joinmastodon.org/` unchanged.
+
+Now that you've shut the mastodon in the cage, this is where the fun begins.
+
+## Teaching the Mastodon to rickroll
+
+Open and edit `about.html`. It is quite large for some text editors (~25 KiB). It's unindented by default. Format it using a code formatter to save your eyes from burning.
+
+Remember the site you fetched the page from? Change all occurrences of that site (for example, `mastodon.social` to yours: `social.legit.website`. For example, in `
`, you may see the following:
+
+```html
+
+
+
+
+
+
+
+```
+
+Edit the URL's, edit meta content, you name it. The meta content also goes into the visible `
`; search for it and replace its text.
+
+Done? Good! Now when you check out your site, it has your domain on it. But things are not right! People won't believe that this instance, unexpectedly under Eugen's administration, could attract 503k users in two short days. You need to modify those data as well. Search for `Administered by:` and `Server stats:`. These data are right under them. A value like 41 users/32 MAU is adequately deceiving.
+
+But waaaaait. You still have Eugen's avi beside your name. This is easy: get your avi, place it under `about_files`, change those filenames in `about.html` accordingly. Same for other people's avis you wish to show. Under the `Administered by:` there is:
+
+```html
+
+```
+
+Replace `d96d39a0abb45b92.png` with your image, under the same directory. Alternatively, just name your avi `d96d39a0abb45b92.png`, overwriting the original.
+
+Find an element called `
`. Below are at most three user avatars. You can modify their avis if you wish. Perhaps include yours in them. It's like this:
+
+```html
+
+```
+
+Yeah, it's literally just all the `*.png`s.
+
+Now for the final step tampering the frontend, we need to reconfigure the buttons so they take unsuspecting visitors to the classic music video for a classic song. Search for the button called `Sign up`. It is in an HTML form, so clicking it will take us to `/auth`; no good! We want to rickroll the visitors, not sign up an account for them. Scroll up till you meet with this line:
+
+```html
+
+```
+
+You see, the `action="/auth"` is the command that takes us to `/auth`. Remove it, along with `novalidate="novalidate"` and `accept-charset="UTF-8" method="post"`, because we're making it no longer a real form that sends requests. Keep the class, for it is used by stylesheets. Without it the form will look primitive, and people will find out. Then, find the `` after it. It shouldn't be far away. Change `