From d4a5c1d48012f38e7965833bf4feef170bd4b902 Mon Sep 17 00:00:00 2001 From: zombieb Date: Thu, 1 Jan 2026 00:15:52 -0500 Subject: [PATCH] Initial commit --- deno.json | 9 ++ deno.lock | 28 ++++++ main.ts | 42 ++++++++ res/index.html | 267 +++++++++++++++++++++++++++++++++++++++++++++++++ res/style.css | 42 ++++++++ 5 files changed, 388 insertions(+) create mode 100644 deno.json create mode 100644 deno.lock create mode 100644 main.ts create mode 100644 res/index.html create mode 100644 res/style.css diff --git a/deno.json b/deno.json new file mode 100644 index 0000000..cd46086 --- /dev/null +++ b/deno.json @@ -0,0 +1,9 @@ +{ + "tasks": { + "dev": "deno run -A main.ts" + }, + "imports": { + "@std/assert": "jsr:@std/assert@1", + "@std/media-types": "jsr:@std/media-types@^1.1.0" + } +} diff --git a/deno.lock b/deno.lock new file mode 100644 index 0000000..5397edb --- /dev/null +++ b/deno.lock @@ -0,0 +1,28 @@ +{ + "version": "5", + "specifiers": { + "jsr:@std/assert@1": "1.0.16", + "jsr:@std/internal@^1.0.12": "1.0.12", + "jsr:@std/media-types@^1.1.0": "1.1.0" + }, + "jsr": { + "@std/assert@1.0.16": { + "integrity": "6a7272ed1eaa77defe76e5ff63ca705d9c495077e2d5fd0126d2b53fc5bd6532", + "dependencies": [ + "jsr:@std/internal" + ] + }, + "@std/internal@1.0.12": { + "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" + }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + } + }, + "workspace": { + "dependencies": [ + "jsr:@std/assert@1", + "jsr:@std/media-types@^1.1.0" + ] + } +} diff --git a/main.ts b/main.ts new file mode 100644 index 0000000..2b99fa1 --- /dev/null +++ b/main.ts @@ -0,0 +1,42 @@ +import { contentType } from "@std/media-types"; +import path from "node:path"; + +const NET_PORT = 4536; +const NET_HOST = '10.0.1.39'; +const WEB_ROOT = './res/'; + +Deno.serve({ + hostname: NET_HOST, + port: NET_PORT, + onListen: addr => console.log(`Listening on http://${addr.hostname}:${addr.port}`) +}, req => { + const url = new URL(req.url); + + if (url.pathname == '/') url.pathname = '/index.html'; + + return new Promise(resolve => { + Deno.readFile(path.join(WEB_ROOT, url.pathname)).then(data => { + + const pathParts = url.pathname.split('/'); + const lastPart = pathParts[pathParts.length - 1]; + const extensionParts = lastPart.split('.'); + const extension = extensionParts[extensionParts.length - 1]; + + const mime = contentType(extension); + if (!mime) throw new Error("No mime-type found"); + + console.log(`${req.method} ${url}`); + resolve(new Response(data, { headers: { "Content-Type": mime }})) + + }).catch(() => { + + console.log(`404 ${req.method} ${url}`); + resolve(new Response("Not Found. Did you try thinking Miku?", { + status: 404, + statusText: "Not Found (oo-ee-oo)", + headers: { "Content-Type": "text/plain" } + })); + + }); + }) +}); \ No newline at end of file diff --git a/res/index.html b/res/index.html new file mode 100644 index 0000000..31fe2cc --- /dev/null +++ b/res/index.html @@ -0,0 +1,267 @@ + + + + webpage + + + + + + + + + + + +
+
+ +

From The Hatsune Discord staff team

+

LOTS HAPPENED IN 2025.

+

We would like to present the highlights.

+ +
+ +

See Below

+ arrow_downward + +
+
+ +
+ + +
+

Is it just me, or is it comfy in here?

+

Here are the top 10 most used reactions:

+
    +
  • + + x13,594 +
  • +
  • + + x9,723 +
  • +
  • + + x6,471 +
  • +
  • + + x5,275 +
  • +
  • + + x3,885 +
  • +
  • + + x3,704 +
  • +
  • + + x2,809 +
  • +
  • + + x2,742 +
  • +
  • + + x2,610 +
  • +
  • + + x2,460 +
  • +
+
+ +
+ + +
+

Add some spice to your message.

+

Here are the top 10 most used emojis:

+
    +
  • + + x10,285 +
  • +
  • + + x9,442 +
  • +
  • + + x7,687 +
  • +
  • + + x5,466 +
  • +
  • + + x5,151 +
  • +
  • + + x3,686 +
  • +
  • + + x3,179 +
  • +
  • + + x2,664 +
  • +
  • + + x2,626 +
  • +
  • + + x2,394 +
  • +
+
+ +
+ + +
+

Stickerbomb!

+

Here are the top 10 most used stickers:

+
    +
  • + + x624 +
  • +
  • + + x311 +
  • +
  • + + x250 +
  • +
  • + + x216 +
  • +
  • + + x194 +
  • +
  • + + x168 +
  • +
  • + + x148 +
  • +
  • + + x111 +
  • +
  • + + x110 +
  • +
  • + + x110 +
  • +
+
+ +
+ + +
+
+

Let's talk messages.

+

We sent 1,091,742 of them.

+

Jeez.

+
+
+ +
+ + +
+

Some of those messages were pretty popular.

+

Here are each month's most reacted messages:

+ +
+ +
+ + +
+

We had several keyboard warriors.

+

Here are the top 10 users with the most messages:

+
    +
  • @miraigummies - 52746
  • +
  • @koolaidkan - 42391
  • +
  • @iam_stove - 35365
  • +
  • @39.mik - 31435
  • +
  • @ballisticchillz - 30283
  • +
  • @powerblade3 - 29304
  • +
  • @miku.hatsune - 28421
  • +
  • @zunda_nectar - 28119
  • +
  • @simplename21 - 23234
  • +
  • @kelcody - 22782
  • +
+
+ +
+ + +
+

You were always here with us.

+

Here are the top 10 users with the most '39' messages:

+
    +
  • @iam_stove - 3790
  • +
  • @aozora39 - 3445
  • +
  • @cfm_megurine_luka - 3325
  • +
  • @starlitsleep - 2707
  • +
  • @miku.hatsune - 2371
  • +
  • @powerblade3 - 1883
  • +
  • @the_apricity_effect - 1706
  • +
  • @yokoo99 - 1354
  • +
  • @_1v40_ - 1294
  • +
  • @iam_stove - 1262
  • +
+
+ +
+ +

Thank you all for a great year! We're here to share the next with you.

+ +
+
+ Open-source. + 100% human-generated. Page design by (@zombieb). Data by (@poco0317). +
+
+ + + + \ No newline at end of file diff --git a/res/style.css b/res/style.css new file mode 100644 index 0000000..75ca259 --- /dev/null +++ b/res/style.css @@ -0,0 +1,42 @@ +.attention { + font-optical-sizing: auto; + font-weight: 800; + font-style: normal; +} + +body { + margin: 0; + padding: 0 5vw 0 5vw; + + font-family: "DM Sans", sans-serif; + -webkit-font-smoothing: antialiased; + background: #12db9f; + background: linear-gradient(180deg,rgba(18, 219, 159, 1) 0%, rgba(87, 184, 199, 1) 79%); + + color: white; +} + +.column-display { + display: flex; + flex-direction: column; + text-align: center; +} + +.break { + color: white; + opacity: 50%; + width: 75vw; +} + +.emoji-line-center { + padding: 15px; + + display: flex; + align-items: center; + + font-size: 3vw; +} + +.emoji { + width: 128px; +} \ No newline at end of file