From cf8a823ad88d99d45b4bcde010d05bf40bde538d Mon Sep 17 00:00:00 2001 From: ewin Date: Fri, 9 May 2025 00:14:15 -0400 Subject: [PATCH] initial commit --- .gitignore | 1 + README.md | 43 +++++++++++++++++++++++++++++++++++++++++++ lol.png | Bin 0 -> 19119 bytes shit.mjs | 27 +++++++++++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 lol.png create mode 100644 shit.mjs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2211df6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff66a11 --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +# minimum viable chat + +all my friends seem to be building chat apps as their pet projects these days. i +find they usually do so because existing solutions are lacking in one or more +ways; their projects often aim to improve the chat experience in areas such as: + +- interface customization +- identity management +- security/encryption capabilities +- (de)centralization of identity and/or messages + +minimum viable chat does none of this. it doesn't give a fuck what you want, and +you're probably going to find it charming enough to fuck with it for a while +anyway. this is due to the core advantage it has over its competitors: + +- it actually exists + +![i can say very little else in its favor. but it does in fact exist](lol.png) + +[you can use minimum viable chat right now.](https://minimumviable.chat)[^1] or +you can run your own instance somewhere else and give it to your friends and use +it that way. or you can just laugh at this shitpost of a project and move on, +that's fine too. but you can't deny that it it exists now. + +[^1]: at least, for now. this domain was on sale for the first year and i might +let it expire instead of paying full price for it next year. and also you guys +are probably freaks who are going to fill up my vps's disk with garbage +immediately. im a shitty queer web developer not a content moderator or sysadmin +or particularly interested in doing what you want me to do. but if neither of +those things has happened yet you can probably use the app. + +## usage + + node shit.mjs + +listens on port 80 by default; override with the `PORT` environment variable. + +## license + +i will assign this code's copyright to the next person who donates ten dollars +to my ko-fi. i am writing this document while bored in the las vegas airport on +a five hour layover and all the food here is so fucking expensive oh my god dude +i just wanted a slice of pizza. diff --git a/lol.png b/lol.png new file mode 100644 index 0000000000000000000000000000000000000000..ce418565b7a090a40cc1f47412aee9844d8cf609 GIT binary patch literal 19119 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 HyBqf}hWckF literal 0 HcmV?d00001 diff --git a/shit.mjs b/shit.mjs new file mode 100644 index 0000000..aa28217 --- /dev/null +++ b/shit.mjs @@ -0,0 +1,27 @@ +import {appendFile, readFile} from 'node:fs/promises'; +import {createServer} from 'node:http'; + +createServer(async (request, response) => { + const chat = new URL(`http://a${request.url}`).searchParams.get('chat'); + if (chat) { + await appendFile('a.txt', `${chat}\n`, {flag: 'a+', encoding: 'utf8'}); + response.writeHead(303, {location: '/'}).end(); // without query + } else { + response.writeHead(200, { + 'content-type': 'text/html', + 'refresh': '30', // lfmoa + }).end( + `

${
+				(await readFile('a.txt', {flag: 'a+', encoding: 'utf8'}))
+					// ugh, fine, i'll html escape it. no xss for you
+					.replace(/[<>&'"]/g, match => ({
+						'<': '<',
+						'>': '>',
+						'&': '&',
+						'\'': '&apos',
+						'"': '"',
+					})[match])
+			}