moved the frontend to gh-pages branch & domain to y2k.jarv.is
29
.github/workflows/deploy.yml
vendored
@ -1,29 +0,0 @@
|
|||||||
name: Deploy
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: "!contains(github.event.head_commit.message, '[skip ci]')"
|
|
||||||
env:
|
|
||||||
CF_ZONE_ID: "8a79e5c61c0a7033d7b0eca176665cd1"
|
|
||||||
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: 12
|
|
||||||
- run: |
|
|
||||||
mkdir -p $HOME/.wrangler
|
|
||||||
chmod -R 770 $HOME/.wrangler
|
|
||||||
- run: npm install --global @cloudflare/wrangler
|
|
||||||
- run: wrangler publish
|
|
||||||
- run: |
|
|
||||||
curl -X POST "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/purge_cache" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
||||||
--data '{"purge_everything":true}'
|
|
@ -1,10 +1,12 @@
|
|||||||
# 💾 [Y2K Land](https://y2k.land/) [](https://y2k.land/) [](https://status.jrvs.io/785127956) [](https://github.com/jakejarvis/y2k/actions?query=workflow%3ADeploy)
|
# 💾 [Y2K Sandbox](https://y2k.jarv.is/) [](https://y2k.jarv.is/) [](https://status.jrvs.io/785127956)
|
||||||
|
|
||||||
Nostalgic time machine powered by on-demand Windows Me® VMs, [my first website](https://jarv.is/y2k/), and quarantine boredom. 📟
|
Nostalgic time machine powered by on-demand Windows Me® VMs, [my first website](https://github.com/jakejarvis/my-first-website), and quarantine boredom. 📟
|
||||||
|
|
||||||
|
This branch contains the backend scripts and Windows Me container. The frontend website code is in [the `gh-pages` branch](https://github.com/jakejarvis/y2k/tree/gh-pages).
|
||||||
|
|
||||||
[**📝 Read the blog post here.**](https://jarv.is/notes/y2k-land/)
|
[**📝 Read the blog post here.**](https://jarv.is/notes/y2k-land/)
|
||||||
|
|
||||||
<p align="center"><a href="https://y2k.land/"><img width="600" src="screenshot.png"></a></p>
|
<p align="center"><a href="https://y2k.jarv.is/"><img width="600" src="screenshot.png"></a></p>
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ FROM docker.io/ubuntu:20.04
|
|||||||
|
|
||||||
LABEL maintainer="Jake Jarvis <jake@jarv.is>"
|
LABEL maintainer="Jake Jarvis <jake@jarv.is>"
|
||||||
LABEL repository="https://github.com/jakejarvis/y2k"
|
LABEL repository="https://github.com/jakejarvis/y2k"
|
||||||
LABEL homepage="https://y2k.land/"
|
LABEL homepage="https://y2k.jarv.is/"
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
@ -1,82 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Page Not Found</title>
|
|
||||||
<style>
|
|
||||||
@font-face {
|
|
||||||
font-family: "Perfect DOS VGA 437";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
src: url("/fonts/perfect-dos.woff2") format("woff2"),
|
|
||||||
url("/fonts/perfect-dos.woff") format("woff");
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
margin: 60px;
|
|
||||||
background: #0014a3;
|
|
||||||
font-family: "Perfect DOS VGA 437", monospace;
|
|
||||||
font-size: 1.1em;
|
|
||||||
line-height: 1.8;
|
|
||||||
letter-spacing: 0.015em;
|
|
||||||
color: #fff;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
#wrap {
|
|
||||||
display: block;
|
|
||||||
margin: auto;
|
|
||||||
max-width: 650px;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
margin: 1.2em auto;
|
|
||||||
font-size: 1em;
|
|
||||||
font-weight: normal;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
h1 span {
|
|
||||||
background-color: #aaa;
|
|
||||||
color: #0014a3;
|
|
||||||
padding: 0.3em;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
p {
|
|
||||||
margin: 1em 0;
|
|
||||||
}
|
|
||||||
p:last-of-type {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
position: relative;
|
|
||||||
list-style: none;
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 1.6em;
|
|
||||||
}
|
|
||||||
ul li:before {
|
|
||||||
content: "*";
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
span.blink {
|
|
||||||
animation: blink 1s step-end infinite;
|
|
||||||
}
|
|
||||||
@keyframes blink {
|
|
||||||
50% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="wrap">
|
|
||||||
<h1><span>Windows</span></h1>
|
|
||||||
<p>A fatal exception 404_NOT_FOUND has occured at 0x69ABC420. The current application will be terminated.</p>
|
|
||||||
<ul>
|
|
||||||
<li>Press any key to terminate the current application.</li>
|
|
||||||
<li>Press CTRL+ALT+DEL to restart your computer. If you do this, you will lose any unsaved information in all open applications.</li>
|
|
||||||
</ul>
|
|
||||||
<p><a href="/"> Click here to return to Windows <span class="blink">_</span></a></p>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
160
public/app.js
Before Width: | Height: | Size: 15 KiB |
@ -1,34 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<!--
|
|
||||||
|
|
||||||
_.-;;-._
|
|
||||||
'-..-'| || | Made with love & sarcasm by Jake Jarvis.
|
|
||||||
'-..-'|_.-;;-._| https://jarv.is/
|
|
||||||
'-..-'| || | https://github.com/jakejarvis
|
|
||||||
'-..-'|_.-''-._|
|
|
||||||
|
|
||||||
-->
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Y2K Land — Powered by Windows Me™ 💾</title>
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
||||||
<meta name="description" content="My first website on a Windows Me-powered time machine. You've been warned.">
|
|
||||||
<link rel="stylesheet" href="style.css">
|
|
||||||
<link rel="shortcut icon" href="favicon.ico">
|
|
||||||
<link rel="preconnect" href="https://sandbox.y2k.land">
|
|
||||||
<link rel="preconnect" href="https://collect.y2k.land">
|
|
||||||
<link rel="web-socket" href="wss://sandbox.y2k.land">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="cmd">
|
|
||||||
<span id="status">JavaScript is required for this experience, please enable it and refresh the page!<br><br>Press the Any key to continue.</span>
|
|
||||||
<span class="blink">_</span>
|
|
||||||
</div>
|
|
||||||
<canvas id="display"></canvas>
|
|
||||||
<a class="github-corner" href="https://github.com/jakejarvis/y2k" title="View source on GitHub" aria-label="View source on Github" target="_blank" rel="noopener"><svg width="80" height="80" viewBox="0 0 250 250" style="fill: #fff; color: #333; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a>
|
|
||||||
<script src="app.js"></script>
|
|
||||||
<script async defer src="https://collect.y2k.land/latest.js" data-skip-dnt="true"></script>
|
|
||||||
<noscript><img src="https://collect.y2k.land/noscript.gif" alt=""/></noscript>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,77 +0,0 @@
|
|||||||
@font-face {
|
|
||||||
font-family: "Perfect DOS VGA 437";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
src: url("fonts/perfect-dos.woff2") format("woff2"),
|
|
||||||
url("fonts/perfect-dos.woff") format("woff");
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
font-family: "Perfect DOS VGA 437", monospace;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
user-select: none;
|
|
||||||
|
|
||||||
/* specific retro wallpaper tile is set randomly by JS onload */
|
|
||||||
background-color: #000;
|
|
||||||
background-repeat: repeat;
|
|
||||||
background-attachment: fixed;
|
|
||||||
background-position: center;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
canvas, div#cmd {
|
|
||||||
display: block;
|
|
||||||
margin: auto;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
div#cmd {
|
|
||||||
width: 600px;
|
|
||||||
height: 300px;
|
|
||||||
padding: 12px;
|
|
||||||
background-color: #000;
|
|
||||||
color: #ccc;
|
|
||||||
z-index: -100;
|
|
||||||
}
|
|
||||||
canvas {
|
|
||||||
z-index: 100;
|
|
||||||
|
|
||||||
/* fix fuzziness: https://stackoverflow.com/a/13492784 */
|
|
||||||
image-rendering: optimizeSpeed;
|
|
||||||
image-rendering: -moz-crisp-edges;
|
|
||||||
image-rendering: -o-crisp-edges;
|
|
||||||
image-rendering: -webkit-optimize-contrast;
|
|
||||||
image-rendering: crisp-edges;
|
|
||||||
image-rendering: pixelated;
|
|
||||||
-ms-interpolation-mode: nearest-neighbor;
|
|
||||||
}
|
|
||||||
span.blink {
|
|
||||||
animation: blink 1s step-end infinite;
|
|
||||||
}
|
|
||||||
@keyframes blink {
|
|
||||||
50% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* http://tholman.com/github-corners/ */
|
|
||||||
.github-corner:hover .octo-arm {
|
|
||||||
animation: octocat-wave 560ms ease-in-out;
|
|
||||||
}
|
|
||||||
@keyframes octocat-wave {
|
|
||||||
0%, 100% {
|
|
||||||
transform: rotate(0);
|
|
||||||
}
|
|
||||||
20%, 60% {
|
|
||||||
transform: rotate(-25deg);
|
|
||||||
}
|
|
||||||
40%, 80% {
|
|
||||||
transform: rotate(10deg);
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 185 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 390 B |
Before Width: | Height: | Size: 396 B |
Before Width: | Height: | Size: 129 B |
Before Width: | Height: | Size: 301 B |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 92 B |
Before Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 187 B |
Before Width: | Height: | Size: 183 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 287 B |
Before Width: | Height: | Size: 100 B |
@ -8,7 +8,7 @@ Type=simple
|
|||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=1
|
RestartSec=1
|
||||||
User=root
|
User=root
|
||||||
ExecStart=/root/y2k/backend/server/socket.sh
|
ExecStart=/root/y2k/server/socket.sh
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
@ -76,7 +76,7 @@ docker pull gcr.io/jakejarvis/y2k:latest
|
|||||||
git clone https://github.com/jakejarvis/y2k.git /root/y2k
|
git clone https://github.com/jakejarvis/y2k.git /root/y2k
|
||||||
|
|
||||||
#### enable & start service ####
|
#### enable & start service ####
|
||||||
cp /root/y2k/backend/server/example.service /lib/systemd/system/y2k.service
|
cp /root/y2k/server/example.service /lib/systemd/system/y2k.service
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable y2k
|
systemctl enable y2k
|
||||||
systemctl start y2k
|
systemctl start y2k
|
@ -4,7 +4,7 @@
|
|||||||
--port=80 \
|
--port=80 \
|
||||||
--binary \
|
--binary \
|
||||||
--header-ws="Sec-WebSocket-Protocol: binary" \
|
--header-ws="Sec-WebSocket-Protocol: binary" \
|
||||||
--origin=y2k.land,www.y2k.land,y2k.jakejarvis.workers.dev \
|
--origin=y2k.jarv.is,y2k.jakejarvis.workers.dev \
|
||||||
-- \
|
-- \
|
||||||
docker run \
|
docker run \
|
||||||
--cpus 1 \
|
--cpus 1 \
|
||||||
@ -16,4 +16,4 @@
|
|||||||
|
|
||||||
# to spawn QEMU processes natively on the host machine instead of via
|
# to spawn QEMU processes natively on the host machine instead of via
|
||||||
# individual Docker containers:
|
# individual Docker containers:
|
||||||
# /root/y2k/backend/bin/boot.rb /root/y2k/backend/hdd /usr/bin/qemu-system-i386
|
# /root/y2k/container/bin/boot.rb /root/y2k/container/hdd /usr/bin/qemu-system-i386
|
2
workers-site/.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
node_modules
|
|
||||||
worker
|
|
@ -1 +0,0 @@
|
|||||||
package-lock=false
|
|
@ -1,55 +0,0 @@
|
|||||||
import { getAssetFromKV } from '@cloudflare/kv-asset-handler'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The DEBUG flag will do two things that help during development:
|
|
||||||
* 1. we will skip caching on the edge, which makes it easier to
|
|
||||||
* debug.
|
|
||||||
* 2. we will return an error message on exception in your Response rather
|
|
||||||
* than the default 404.html page.
|
|
||||||
*/
|
|
||||||
const DEBUG = false
|
|
||||||
|
|
||||||
addEventListener('fetch', event => {
|
|
||||||
try {
|
|
||||||
event.respondWith(handleEvent(event))
|
|
||||||
} catch (e) {
|
|
||||||
if (DEBUG) {
|
|
||||||
return event.respondWith(
|
|
||||||
new Response(e.message || e.toString(), {
|
|
||||||
status: 500,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
event.respondWith(new Response('Internal Error', { status: 500 }))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
async function handleEvent(event) {
|
|
||||||
let options = {
|
|
||||||
cacheControl: {
|
|
||||||
browserTTL: 3600,
|
|
||||||
edgeTTL: 604800,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// make debugging easier (see top of this file)
|
|
||||||
if (DEBUG) options.cacheControl.bypassCache = true
|
|
||||||
|
|
||||||
// asset was found
|
|
||||||
return await getAssetFromKV(event, options)
|
|
||||||
} catch (e) {
|
|
||||||
// if a 404 error is thrown try to serve the asset at 404.html
|
|
||||||
if (!DEBUG) {
|
|
||||||
try {
|
|
||||||
let notFoundResponse = await getAssetFromKV(event, {
|
|
||||||
mapRequestToAsset: req => new Request(`${new URL(req.url).origin}/404.html`, req),
|
|
||||||
})
|
|
||||||
|
|
||||||
return new Response(notFoundResponse.body, { ...notFoundResponse, status: 404 })
|
|
||||||
} catch (e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Response(e.message || e.toString(), { status: 500 })
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"private": true,
|
|
||||||
"name": "y2k-static",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"homepage": "https://y2k.land/",
|
|
||||||
"author": "Jake Jarvis <jake@jarv.is>",
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index.js",
|
|
||||||
"dependencies": {
|
|
||||||
"@cloudflare/kv-asset-handler": "*"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
name = "y2k"
|
|
||||||
type = "webpack"
|
|
||||||
account_id = "bd1a636a30a817137ce1e91c9e407373"
|
|
||||||
zone_id = "8a79e5c61c0a7033d7b0eca176665cd1"
|
|
||||||
route = "y2k.land/*"
|
|
||||||
|
|
||||||
[site]
|
|
||||||
bucket = "public"
|
|
||||||
entry-point = "workers-site"
|
|