forked from ProjectSegfault/website
make status api faster, fix donate, add services
This commit is contained in:
parent
d768ad1704
commit
76435cc3d2
@ -12,7 +12,7 @@
|
|||||||
/>
|
/>
|
||||||
%sveltekit.head%
|
%sveltekit.head%
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body data-sveltekit-preload-data="hover">
|
||||||
%sveltekit.body%
|
<div style="display: contents">%sveltekit.body%</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -42,4 +42,8 @@
|
|||||||
.githubcolored {
|
.githubcolored {
|
||||||
@apply bg-alt text-alt-text;
|
@apply bg-alt text-alt-text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.torcolored {
|
||||||
|
@apply bg-[#7d4698] text-white;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<div class="flex flex-row gap-2">
|
<div class="flex flex-row flex-wrap gap-2">
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
@ -84,7 +84,6 @@
|
|||||||
>
|
>
|
||||||
{#each menus as { url, name, external }}
|
{#each menus as { url, name, external }}
|
||||||
<a
|
<a
|
||||||
data-sveltekit-preload-data
|
|
||||||
class:active={url !== "/"
|
class:active={url !== "/"
|
||||||
? currentPage.match(url)
|
? currentPage.match(url)
|
||||||
: url === currentPage}
|
: url === currentPage}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Arya",
|
"name": "Arya",
|
||||||
"description": "Libre Software Enthusiast and ProjectSegfault SysAdmin",
|
"description": "Libre Software Enthusiast and Project Segfault Sysadmin",
|
||||||
"position": "Sysadmin",
|
"position": "Sysadmin",
|
||||||
"website": "https://aryak.vern.cc",
|
"website": "https://aryak.vern.cc",
|
||||||
"matrix": "https://matrix.to/#/@aryak:projectsegfau.lt",
|
"matrix": "https://matrix.to/#/@aryak:projectsegfau.lt",
|
||||||
|
@ -2,5 +2,4 @@
|
|||||||
import { page } from '$app/stores';
|
import { page } from '$app/stores';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<h1>{$page.status}: {$page.error?.message}</h1>
|
<h1>{$page.status}: {$page.error?.message}</h1>
|
||||||
<span class="italic">The fetch request to the API probably failed, please contact us on Matrix.</span>
|
|
@ -12,7 +12,7 @@ const updateMap = () => {
|
|||||||
|
|
||||||
updateMap();
|
updateMap();
|
||||||
|
|
||||||
setInterval(updateMap, 30000);
|
setInterval(updateMap, 60000);
|
||||||
|
|
||||||
export const GET = (() => {
|
export const GET = (() => {
|
||||||
const data = map.get("data");
|
const data = map.get("data");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
|
||||||
const fetchStatus = (domain: string) => {
|
const fetchStatus = (domain: string) => {
|
||||||
const req = axios("https://" + domain, { timeout: 10000 })
|
const req = axios("https://" + domain, { timeout: 5000 })
|
||||||
.then((res) => res.status)
|
.then((res) => res.status)
|
||||||
.catch((error) => error.response ? error.response.status : 500);
|
.catch((error) => error.response ? error.response.status : 500);
|
||||||
|
|
||||||
@ -18,6 +18,7 @@ const statusData = [
|
|||||||
eu: "https://invidious.projectsegfau.lt/",
|
eu: "https://invidious.projectsegfau.lt/",
|
||||||
us: "https://inv.us.projectsegfau.lt",
|
us: "https://inv.us.projectsegfau.lt",
|
||||||
bp: "https://inv.bp.projectsegfau.lt",
|
bp: "https://inv.bp.projectsegfau.lt",
|
||||||
|
torBp: "http://invbp.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion",
|
||||||
icon: "/icons/invidious.svg",
|
icon: "/icons/invidious.svg",
|
||||||
statusEu: await fetchStatus("invidious.projectsegfau.lt"),
|
statusEu: await fetchStatus("invidious.projectsegfau.lt"),
|
||||||
statusUs: await fetchStatus("inv.us.projectsegfau.lt"),
|
statusUs: await fetchStatus("inv.us.projectsegfau.lt"),
|
||||||
@ -28,6 +29,7 @@ const statusData = [
|
|||||||
description: "A frontend for Odysee.",
|
description: "A frontend for Odysee.",
|
||||||
eu: "https://lbry.projectsegfau.lt/",
|
eu: "https://lbry.projectsegfau.lt/",
|
||||||
geo: "https://lbry.g.projectsegfau.lt/",
|
geo: "https://lbry.g.projectsegfau.lt/",
|
||||||
|
tor: "http://lbry.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion",
|
||||||
icon: "/icons/librarian.png",
|
icon: "/icons/librarian.png",
|
||||||
statusEu: await fetchStatus("lbry.projectsegfau.lt"),
|
statusEu: await fetchStatus("lbry.projectsegfau.lt"),
|
||||||
statusGeo: await fetchStatus("lbry.g.projectsegfau.lt")
|
statusGeo: await fetchStatus("lbry.g.projectsegfau.lt")
|
||||||
@ -38,6 +40,7 @@ const statusData = [
|
|||||||
eu: "https://libreddit.projectsegfau.lt/",
|
eu: "https://libreddit.projectsegfau.lt/",
|
||||||
us: "https://libreddit.us.projectsegfau.lt",
|
us: "https://libreddit.us.projectsegfau.lt",
|
||||||
geo: "https://libreddit.g.projectsegfau.lt/",
|
geo: "https://libreddit.g.projectsegfau.lt/",
|
||||||
|
tor: "http://libreddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion",
|
||||||
icon: "/icons/libreddit.png",
|
icon: "/icons/libreddit.png",
|
||||||
statusEu: await fetchStatus("libreddit.projectsegfau.lt"),
|
statusEu: await fetchStatus("libreddit.projectsegfau.lt"),
|
||||||
statusUs: await fetchStatus("libreddit.us.projectsegfau.lt"),
|
statusUs: await fetchStatus("libreddit.us.projectsegfau.lt"),
|
||||||
@ -49,6 +52,7 @@ const statusData = [
|
|||||||
eu: "https://nitter.projectsegfau.lt/",
|
eu: "https://nitter.projectsegfau.lt/",
|
||||||
us: "https://nitter.us.projectsegfau.lt",
|
us: "https://nitter.us.projectsegfau.lt",
|
||||||
geo: "https://nitter.g.projectsegfau.lt/",
|
geo: "https://nitter.g.projectsegfau.lt/",
|
||||||
|
tor: "http://nitter.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion",
|
||||||
icon: "/icons/nitter.png",
|
icon: "/icons/nitter.png",
|
||||||
statusEu: await fetchStatus("nitter.projectsegfau.lt"),
|
statusEu: await fetchStatus("nitter.projectsegfau.lt"),
|
||||||
statusUs: await fetchStatus("nitter.us.projectsegfau.lt"),
|
statusUs: await fetchStatus("nitter.us.projectsegfau.lt"),
|
||||||
@ -69,6 +73,7 @@ const statusData = [
|
|||||||
eu: "https://bb.eu.projectsegfau.lt/",
|
eu: "https://bb.eu.projectsegfau.lt/",
|
||||||
us: "https://bb.us.projectsegfau.lt/",
|
us: "https://bb.us.projectsegfau.lt/",
|
||||||
geo: "https://bb.g.projectsegfau.lt/",
|
geo: "https://bb.g.projectsegfau.lt/",
|
||||||
|
tor: "http://beatbump.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion",
|
||||||
icon: "/icons/beatbump.svg",
|
icon: "/icons/beatbump.svg",
|
||||||
statusEu: await fetchStatus("bb.eu.projectsegfau.lt"),
|
statusEu: await fetchStatus("bb.eu.projectsegfau.lt"),
|
||||||
statusUs: await fetchStatus("bb.us.projectsegfau.lt"),
|
statusUs: await fetchStatus("bb.us.projectsegfau.lt"),
|
||||||
@ -80,6 +85,7 @@ const statusData = [
|
|||||||
eu: "https://bw.eu.projectsegfau.lt/",
|
eu: "https://bw.eu.projectsegfau.lt/",
|
||||||
us: "https://bw.us.projectsegfau.lt/",
|
us: "https://bw.us.projectsegfau.lt/",
|
||||||
geo: "https://bw.g.projectsegfau.lt/",
|
geo: "https://bw.g.projectsegfau.lt/",
|
||||||
|
tor: "http://breezewiki.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion",
|
||||||
icon: "/icons/breezewiki.svg",
|
icon: "/icons/breezewiki.svg",
|
||||||
statusEu: await fetchStatus("bw.eu.projectsegfau.lt"),
|
statusEu: await fetchStatus("bw.eu.projectsegfau.lt"),
|
||||||
statusUs: await fetchStatus("bw.us.projectsegfau.lt"),
|
statusUs: await fetchStatus("bw.us.projectsegfau.lt"),
|
||||||
@ -91,6 +97,7 @@ const statusData = [
|
|||||||
eu: "https://scribe.eu.projectsegfau.lt/",
|
eu: "https://scribe.eu.projectsegfau.lt/",
|
||||||
us: "https://scribe.us.projectsegfau.lt/",
|
us: "https://scribe.us.projectsegfau.lt/",
|
||||||
geo: "https://scribe.g.projectsegfau.lt/",
|
geo: "https://scribe.g.projectsegfau.lt/",
|
||||||
|
tor: "http://scribe.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion",
|
||||||
statusEu: await fetchStatus("scribe.eu.projectsegfau.lt"),
|
statusEu: await fetchStatus("scribe.eu.projectsegfau.lt"),
|
||||||
statusUs: await fetchStatus("scribe.us.projectsegfau.lt"),
|
statusUs: await fetchStatus("scribe.us.projectsegfau.lt"),
|
||||||
statusGeo: await fetchStatus("scribe.g.projectsegfau.lt")
|
statusGeo: await fetchStatus("scribe.g.projectsegfau.lt")
|
||||||
@ -123,6 +130,20 @@ const statusData = [
|
|||||||
eu: "https://git.projectsegfau.lt/",
|
eu: "https://git.projectsegfau.lt/",
|
||||||
icon: "/icons/gitea.png",
|
icon: "/icons/gitea.png",
|
||||||
statusEu: await fetchStatus("git.projectsegfau.lt")
|
statusEu: await fetchStatus("git.projectsegfau.lt")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Akkoma",
|
||||||
|
description: "Federated microblogging platform.",
|
||||||
|
eu: "https://social.projectsegfau.lt/",
|
||||||
|
icon: "/icons/akkoma.png",
|
||||||
|
statusEu: await fetchStatus("social.projectsegfau.lt")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Vikunja",
|
||||||
|
description: "A task management platform.",
|
||||||
|
eu: "https://todo.projectsegfau.lt/",
|
||||||
|
icon: "/icons/vikunja.png",
|
||||||
|
statusEu: await fetchStatus("todo.projectsegfau.lt")
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -31,9 +31,14 @@
|
|||||||
title="Authors"
|
title="Authors"
|
||||||
icon="i-fa6-solid:user"
|
icon="i-fa6-solid:user"
|
||||||
/>
|
/>
|
||||||
|
<LinkButton
|
||||||
|
url="https://blog.projectsegfau.lt/rss/"
|
||||||
|
title="RSS"
|
||||||
|
icon="i-simple-icons:rss"
|
||||||
|
bg="#ee802f"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Hero>
|
</Hero>
|
||||||
|
|
||||||
<PostsContainer hasMt>
|
<PostsContainer hasMt>
|
||||||
{#each data.posts as post}
|
{#each data.posts as post}
|
||||||
<PostOuter>
|
<PostOuter>
|
||||||
|
@ -16,7 +16,7 @@ title: Donate
|
|||||||
These donations primarily help us pay for our VPSes, domain names and other expenses related to crucial infrastructure we have to maintain. We also sometimes donate to developers who maintain software we rely heavily on such as our authentication provider.
|
These donations primarily help us pay for our VPSes, domain names and other expenses related to crucial infrastructure we have to maintain. We also sometimes donate to developers who maintain software we rely heavily on such as our authentication provider.
|
||||||
|
|
||||||
## Donation methods
|
## Donation methods
|
||||||
You can currently donate by credit card through [Liberapay](https://liberaypay.com) and cryptocurrencies.
|
You can currently donate by credit card through [Liberapay](https://liberapay.com) and cryptocurrencies.
|
||||||
|
|
||||||
### Credit card
|
### Credit card
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { CardInner, CardOuter, LinksOuter } from "$lib/Card";
|
import { CardInner, CardOuter, LinksOuter, Link } from "$lib/Card";
|
||||||
import InstanceLink from "./InstanceLink.svelte";
|
import InstanceLink from "./InstanceLink.svelte";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import type { PageData } from "./$types";
|
import type { PageData } from "./$types";
|
||||||
@ -61,6 +61,20 @@
|
|||||||
type="backup"
|
type="backup"
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
{#if item.tor}
|
||||||
|
<InstanceLink
|
||||||
|
url={item.tor}
|
||||||
|
type="tor"
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{#if item.torBp}
|
||||||
|
<InstanceLink
|
||||||
|
url={item.torBp}
|
||||||
|
type="torBp"
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
</LinksOuter>
|
</LinksOuter>
|
||||||
</CardInner>
|
</CardInner>
|
||||||
{/each}
|
{/each}
|
||||||
|
@ -2,35 +2,49 @@
|
|||||||
import { Link } from "$lib/Card";
|
import { Link } from "$lib/Card";
|
||||||
|
|
||||||
export let url: string;
|
export let url: string;
|
||||||
export let item: any;
|
export let item: any = 200;
|
||||||
export let type: "geo" | "eu" | "us" | "backup";
|
export let type: "geo" | "eu" | "us" | "backup" | "tor" | "torBp" = "geo";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Link
|
{#if type === "tor" || type === "torBp"}
|
||||||
{url}
|
<Link
|
||||||
class="web {item === 200
|
{url}
|
||||||
? ''
|
class="torcolored"
|
||||||
: 'pointer-events-none cursor-default opacity-50'}"
|
>
|
||||||
>
|
<div class="flex flex-row items-center gap-1">
|
||||||
<div class="flex items-center gap-2 text-base">
|
<div class="i-simple-icons:tor {type === "torBp" ? "" : "h-6 w-6"}" />
|
||||||
<div
|
{#if type === "torBp"}
|
||||||
class={item === 200
|
<span class="text-base">Backup</span>
|
||||||
? "i-fa6-solid:arrow-up-right-from-square"
|
|
||||||
: "i-fa6-solid:xmark"}
|
|
||||||
/>
|
|
||||||
<span>
|
|
||||||
{#if item !== 200}
|
|
||||||
({item})
|
|
||||||
{/if}
|
{/if}
|
||||||
{#if type === "geo"}
|
</div>
|
||||||
GeoDNS
|
</Link>
|
||||||
{:else if type === "eu"}
|
{:else}
|
||||||
EU
|
<Link
|
||||||
{:else if type === "us"}
|
{url}
|
||||||
US
|
class="web {item === 200
|
||||||
{:else if type === "backup"}
|
? ''
|
||||||
Backup
|
: 'pointer-events-none cursor-default opacity-50'}"
|
||||||
{/if}
|
>
|
||||||
</span>
|
<div class="flex items-center gap-2 text-base">
|
||||||
</div>
|
<div
|
||||||
</Link>
|
class={item === 200
|
||||||
|
? "i-fa6-solid:arrow-up-right-from-square"
|
||||||
|
: "i-fa6-solid:xmark"}
|
||||||
|
/>
|
||||||
|
<span>
|
||||||
|
{#if item !== 200}
|
||||||
|
({item})
|
||||||
|
{/if}
|
||||||
|
{#if type === "geo"}
|
||||||
|
GeoDNS
|
||||||
|
{:else if type === "eu"}
|
||||||
|
EU
|
||||||
|
{:else if type === "us"}
|
||||||
|
US
|
||||||
|
{:else if type === "backup"}
|
||||||
|
Backup
|
||||||
|
{/if}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</Link>
|
||||||
|
{/if}
|
BIN
static/icons/akkoma.png
Normal file
BIN
static/icons/akkoma.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.9 KiB |
BIN
static/icons/vikunja.png
Normal file
BIN
static/icons/vikunja.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
Loading…
Reference in New Issue
Block a user