Break everything: Delete V2 Files

This commit is contained in:
Kentai Radiquum 2024-11-30 16:33:53 +05:00
parent 044dc87794
commit b1a7c0308d
Signed by: Radiquum
GPG key ID: 858E8EE696525EED
36 changed files with 1 additions and 5811 deletions

2
.gitignore vendored
View file

@ -1 +1 @@
node_modules
V2/

1
CNAME
View file

@ -1 +0,0 @@
home.wah.su

View file

@ -1,5 +0,0 @@
# homepage of wah.su
This repository contains a home page for a wah.su.
It is made using HTML, JS and Tailwind with Flowbite components.

View file

@ -1,144 +0,0 @@
<!DOCTYPE html>
<html lang="en" class="bg-page-background">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>wah.su | Home</title>
<link rel="stylesheet" href="static/tailwind.css">
<link rel="apple-touch-icon" sizes="180x180" href="static/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="static/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="static/favicon/favicon-16x16.png">
<link rel="manifest" href="static/favicon/site.webmanifest">
<meta name="description" content="Looking for a cozy, reliable den away from tech companies? You've come to the right place! wah.su is all about providing a safe and stable environment for your projects.">
<meta name="keywords" content="wah.su, radiquum, invite-only, hosting, services">
<!-- Twitter Card data -->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="https://home.wah.su/">
<meta name="twitter:title" content="wah.su | Home">
<meta name="twitter:description" content="Looking for a cozy, reliable den away from tech companies? You've come to the right place! wah.su is all about providing a safe and stable environment for your projects.">
<meta name="twitter:image" content="https://home.wah.su/static/preview.png">
<!-- Open Graph data -->
<meta property="og:title" content="wah.su | Home" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://home.wah.su/" />
<meta property="og:image" content="https://home.wah.su/static/preview.png" />
<meta property="og:description" content="Looking for a cozy, reliable den away from tech companies? You've come to the right place! wah.su is all about providing a safe and stable environment for your projects." />
</head>
<body class="container flex flex-col gap-8 pb-4 mx-auto sm:pb-8 font-ubuntu">
<header class="px-4 pt-4 sm:px-8 sm:pt-8">
<div class="flex flex-wrap justify-between px-8 py-4 rounded-lg bg-header-background">
<img src="static/LOGO.svg">
<a href="https://status.wah.su" class="flex items-center gap-1">
<div class="relative w-6 h-6 bg-gray-500 rounded-full" id="status-icon">
<div class="absolute inset-0 hidden w-6 h-6 rounded-full bg-inherit animate-ping" id="status-animate"></div>
</div>
<p class="text-2xl text-white" id="status-text">Unknown</p>
</a>
</div>
</header>
<h1 class="text-6xl sm:text-8xl font-bold text-center text-[#F9DAD3] px-4 sm:px-8">Welcome to wah.su!</h1>
<section class="flex flex-col flex-wrap gap-8 px-4 sm:px-8 xl:flex-row">
<div class="flex flex-col w-full gap-4 xl:max-w-lg">
<div class="flex flex-col w-full gap-4 px-4 py-4 text-xl text-white rounded-lg sm:px-8 bg-card-background">
<p>Looking for a cozy, reliable den away from tech companies? You've come to the right place! wah.su is all about providing a safe and stable environment for your projects.</p>
<p>Run by yours truly, <a href="https://wah.su/radiquum" class="underline transition-colors hover:text-orange-400">@radiquum</a>, we believe in quality over quantity, which is why access is currently invite-only. Interested in joining the pack? Reach out to me to sniff out an invitation.</p>
</div>
<div class="flex flex-row flex-wrap gap-2 text-white xl:flex-col">
<a class="flex items-center flex-1 gap-2 px-4 py-2 text-2xl transition-colors rounded-lg sm:px-8 sm:text-4xl bg-button-background hover:bg-orange-700" href="https://auth.wah.su"><span class="icon-[mage--dashboard-2-fill] w-8 h-8"></span>Dashboard</a>
<a class="flex items-center w-full gap-2 px-4 py-2 text-2xl transition-colors rounded-lg sm:px-8 sm:text-4xl xl:w-full md:w-fit bg-button-background hover:bg-orange-700" href="/privacy"><span class="icon-[mage--shield-check-fill] w-8 h-8"></span>Privacy Policy</a>
<div class="flex items-center w-full gap-2 px-4 py-2 bg-white rounded-full sm:px-8 xl:mt-2 lg:max-w-fit">
<a href="https://github.com/wah-su" class="w-10 h-10"><span class="icon-[flowbite--github-solid] w-[inherit] h-[inherit] bg-black hover:bg-button-background transition-colors"></span></a>
<!-- <a href="https://github.com/wah-su" class="w-10 h-10"><span class="icon-[mdi--minecraft] w-[inherit] h-[inherit] bg-black hover:bg-button-background transition-colors"></span></a> -->
<!-- <a href="https://home.wah.su/blog" class="flex items-center text-2xl text-white transition-opacity opacity-90 hover:opacity-100"><span class="icon-[mdi--rss] w-10 h-10 bg-white"></span> blog</a> -->
</div>
</div>
</div>
<div class="flex flex-col flex-1 gap-4">
<div class="flex justify-between w-full gap-4 px-4 py-4 text-2xl font-medium text-white rounded-lg sm:px-8 bg-card-background">
<p>Proudly Hosting</p>
<!-- <button>Filters</b> -->
</div>
<div class="grid sm:[grid-template-columns:repeat(auto-fill,minmax(375px,1fr))] gap-2" id="services">
<div class="flex flex-col justify-between gap-4 px-4 py-4 bg-white rounded-lg sm:px-8 text-header-background">
<div data-tags="security,member only" class="flex flex-wrap gap-1">
</div>
<div class="flex items-center justify-center gap-2 text-3xl font-bold uppercase sm:text-4xl">
<img src="static/img/vaultwarden.png" class="w-12"/>
<p>Vaultwarden</p>
</div>
<p class="text-xl">Unofficial Bitwarden compatible server.</p>
<div class="flex items-center gap-2">
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://github.com/dani-garcia/vaultwarden">About <span class="icon-[mdi--about] w-8 h-8"></span></a>
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://vault.wah.su">Open <span class="icon-[mdi--login] w-8 h-8"></span></a>
</div>
</div>
<div class="flex flex-col justify-between gap-4 px-4 py-4 bg-white rounded-lg sm:px-8 text-header-background">
<div data-tags="media,member only" class="flex flex-wrap gap-1">
</div>
<div class="flex items-center justify-center gap-2 text-3xl font-bold uppercase sm:text-4xl">
<img src="static/img/immich.png" class="w-14"/>
<p>Immich</p>
</div>
<p class="text-xl">Platform for managing and browsing your photos.</p>
<div class="flex items-center gap-2">
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://immich.app">About <span class="icon-[mdi--about] w-8 h-8"></span></a>
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://photos.wah.su">Open <span class="icon-[mdi--login] w-8 h-8"></span></a>
</div>
</div>
<div class="flex flex-col justify-between gap-4 px-4 py-4 bg-white rounded-lg sm:px-8 text-header-background">
<div data-tags="media,member only" class="flex flex-wrap gap-1">
</div>
<div class="flex items-center justify-center gap-2 text-3xl font-bold uppercase sm:text-4xl">
<img src="static/img/Nextcloud_Logo.png" class="w-12"/>
<p>Nextcloud</p>
</div>
<p class="text-xl">Productivity suite, offering file sharing and collaboration tools.</p>
<div class="flex items-center gap-2">
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://nextcloud.com">About <span class="icon-[mdi--about] w-8 h-8"></span></a>
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://cloud.wah.su">Open <span class="icon-[mdi--login] w-8 h-8"></span></a>
</div>
</div>
<div class="flex flex-col justify-between gap-4 px-4 py-4 bg-white rounded-lg sm:px-8 text-header-background">
<div data-tags="communication,member only" class="flex flex-wrap gap-1">
</div>
<div class="flex items-center justify-center gap-2 text-3xl font-bold uppercase sm:text-4xl">
<img src="static/img/element.svg" class="w-12"/>
<p>Matrix</p>
</div>
<p class="text-xl">An open network for secure, decentralized communication.</p>
<div class="flex items-center gap-2">
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://matrix.org">About <span class="icon-[mdi--about] w-8 h-8"></span></a>
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://chat.wah.su">Open <span class="icon-[mdi--login] w-8 h-8"></span></a>
</div>
</div>
<div class="flex flex-col justify-between gap-4 px-4 py-4 bg-white rounded-lg sm:px-8 text-header-background">
<div data-tags="communication,member only" class="flex flex-wrap gap-1">
</div>
<div class="flex items-center justify-center gap-2 text-3xl font-bold uppercase sm:text-4xl">
<img src="static/img/jitsi.svg" class="h-12"/>
<p>Jitsi</p>
</div>
<p class="text-xl">A web conference platform for secure communication.</p>
<div class="flex items-center gap-2">
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://jitsi.org">About <span class="icon-[mdi--about] w-8 h-8"></span></a>
<a class="flex items-center justify-center flex-1 gap-2 px-4 py-2 text-xl transition-colors rounded-md bg-header-background hover:bg-[#85146f] text-white" href="https://meet.wah.su">Open <span class="icon-[mdi--login] w-8 h-8"></span></a>
</div>
</div>
</div>
</div>
</section>
<script src="static/js/tags.js"></script>
<script src="static/js/status.js"></script>
</body>
</html>

1323
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,11 +0,0 @@
{
"dependencies": {
"tailwindcss": "^3.4.13"
},
"devDependencies": {
"@iconify-json/flowbite": "^1.2.2",
"@iconify-json/mage": "^1.2.1",
"@iconify-json/mdi": "^1.2.1",
"@iconify/tailwind": "^1.1.3"
}
}

View file

@ -1,226 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>wah.su | Privacy Policy</title>
<link href="/public/output.css" rel="stylesheet" />
<link rel="apple-touch-icon" sizes="180x180" href="static/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="static/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="static/favicon/favicon-16x16.png">
<link rel="manifest" href="static/favicon/site.webmanifest">
<meta name="description" content="Privacy Policy for wah.su.">
<meta name="keywords" content="wah.su, radiquum, invite-only, hosting">
<!-- Twitter Card data -->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="https://home.wah.su/privacy.html">
<meta name="twitter:title" content="wah.su | Privacy Policy">
<meta name="twitter:description" content="Privacy Policy for wah.su.">
<meta name="twitter:image" content="https://home.wah.su/static/preview.png">
<!-- Open Graph data -->
<meta property="og:title" content="wah.su | Privacy Policy" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://home.wah.su/privacy.html" />
<meta property="og:image" content="https://home.wah.su/static/preview.png" />
<meta property="og:description" content="Privacy Policy for wah.su." />
</head>
<body class="light dark:bg-slate-900" id="body">
<header class="top-0 left-0 pt-4 pb-6 shadow-lg bg-slate-50 dark:bg-slate-800">
<div
class="flex flex-col md:flex-row gap-2 md:gap-0 items-center container max-w-[1440px] justify-between px-4">
<div class="self-start">
<a href="/">
<img src="static/LOGO.svg" alt="wah.su" id="logo" />
</a>
</div>
<div class="self-start md:self-auto">
<!--noformat-->
<a href="https://status.wah.su" class="flex flex-row items-center gap-2" target="_blank">
<div class="w-4 h-4 transition ease-in bg-gray-500 rounded-full duration-400" id="status-icon"></div>
<p class="dark:text-slate-50" id="status-text">Fetching Services Status</p>
</a>
<!--noformat-->
</div>
<div class="flex flex-row items-center self-start justify-center gap-6 -ml-4">
<label class="inline-flex items-center cursor-pointer">
<span class="mr-4 text-sm font-medium text-gray-900 ms-3 dark:text-gray-300"><svg
class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M13 3a1 1 0 1 0-2 0v2a1 1 0 1 0 2 0V3ZM6.343 4.929A1 1 0 0 0 4.93 6.343l1.414 1.414a1 1 0 0 0 1.414-1.414L6.343 4.929Zm12.728 1.414a1 1 0 0 0-1.414-1.414l-1.414 1.414a1 1 0 0 0 1.414 1.414l1.414-1.414ZM12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm-9 4a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2H3Zm16 0a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2h-2ZM7.757 17.657a1 1 0 1 0-1.414-1.414l-1.414 1.414a1 1 0 1 0 1.414 1.414l1.414-1.414Zm9.9-1.414a1 1 0 0 0-1.414 1.414l1.414 1.414a1 1 0 0 0 1.414-1.414l-1.414-1.414ZM13 19a1 1 0 1 0-2 0v2a1 1 0 1 0 2 0v-2Z"
clip-rule="evenodd" />
</svg>
</span>
<input type="checkbox" class="sr-only peer" id="theme-toggle">
<div
class="relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600">
</div>
<span class="text-sm font-medium text-gray-900 ms-3 dark:text-gray-300"><svg
class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M11.675 2.015a.998.998 0 0 0-.403.011C6.09 2.4 2 6.722 2 12c0 5.523 4.477 10 10 10 4.356 0 8.058-2.784 9.43-6.667a1 1 0 0 0-1.02-1.33c-.08.006-.105.005-.127.005h-.001l-.028-.002A5.227 5.227 0 0 0 20 14a8 8 0 0 1-8-8c0-.952.121-1.752.404-2.558a.996.996 0 0 0 .096-.428V3a1 1 0 0 0-.825-.985Z"
clip-rule="evenodd" />
</svg>
</span>
</label>
<a href="https://auth.wah.su"
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">
<svg class="w-6 h-6 text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24"
height="24" fill="currentColor" viewBox="0 0 24 24">
<path fill-rule="evenodd"
d="M4.857 3A1.857 1.857 0 0 0 3 4.857v4.286C3 10.169 3.831 11 4.857 11h4.286A1.857 1.857 0 0 0 11 9.143V4.857A1.857 1.857 0 0 0 9.143 3H4.857Zm10 0A1.857 1.857 0 0 0 13 4.857v4.286c0 1.026.831 1.857 1.857 1.857h4.286A1.857 1.857 0 0 0 21 9.143V4.857A1.857 1.857 0 0 0 19.143 3h-4.286Zm-10 10A1.857 1.857 0 0 0 3 14.857v4.286C3 20.169 3.831 21 4.857 21h4.286A1.857 1.857 0 0 0 11 19.143v-4.286A1.857 1.857 0 0 0 9.143 13H4.857Zm10 0A1.857 1.857 0 0 0 13 14.857v4.286c0 1.026.831 1.857 1.857 1.857h4.286A1.857 1.857 0 0 0 21 19.143v-4.286A1.857 1.857 0 0 0 19.143 13h-4.286Z"
clip-rule="evenodd" />
</svg>
<p class="ml-2">Dashboard</p>
</a>
</div>
</div>
</header>
<!--noformat-->
<div class="container max-w-[768px] mt-4 px-4 text-gray-800 dark:text-slate-200">
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h1 class="mb-4 text-2xl font-bold">Privacy Policy for wah.su</h1>
<p class="mb-4">
At wah.su, accessible from https://wah.su and its subdomains, one of our main priorities is the privacy of our visitors.
This Privacy Policy document contains types of information that is collected and recorded by wah.su and how we use it.
</p>
<p class="mb-4">
If you have additional questions or require more information about our Privacy Policy, do not hesitate to contact us.
</p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Log Files</h2>
<p class="mb-4">
wah.su follows a standard procedure of using log files.
These files log visitors when they visit websites.
All hosting companies do this and a part of hosting services' analytics.
The information collected by log files include internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date and timestamp, referring/exit pages, and possibly the number of clicks.
These are not linked to any information that is personally identifiable. The purpose of the information is for analyzing trends, administering the site, tracking users' movement on the website, and gathering demographic information.
</p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Cookies and Web Beacons</h2>
<p class="mb-4">
Like any other website, wah.su uses "cookies".
These cookies are used to store information including visitors' preferences, and the pages on the website that the visitor accessed or visited.
The information is used to optimize the users' experience by customizing our web page content based on visitors' browser type and/or other information.
</p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Privacy Policies</h2>
<p class="mb-4">
You may consult this list to find the Privacy Policy for each of the advertising partners of wah.su.
</p>
<p class="mb-4">
Third-party ad servers or ad networks uses technologies like cookies, JavaScript, or Web Beacons that are used in their respective advertisements and links that appear on wah.su, which are sent directly to users' browser.
They automatically receive your IP address when this occurs.
These technologies are used to measure the effectiveness of their advertising campaigns and/or to personalize the advertising content that you see on websites that you visit.
</p>
<p class="mb-4">
Note that wah.su has no access to or control over these cookies that are used by third-party advertisers. </p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Third Party Privacy Policies</h2>
<p class="mb-4">
wah.su's Privacy Policy does not apply to other advertisers or websites.
Thus, we are advising you to consult the respective Privacy Policies of these third-party ad servers for more detailed information.
It may include their practices and instructions about how to opt-out of certain options.
</p>
<p class="mb-4">
You can choose to disable cookies through your individual browser options.
To know more detailed information about cookie management with specific web browsers, it can be found at the browsers' respective websites.
</p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Children's Information</h2>
<p class="mb-4">
Another part of our priority is adding protection for children while using the internet.
We encourage parents and guardians to observe, participate in, and/or monitor and guide their online activity.
</p>
<p class="mb-4">
wah.su does not knowingly collect any Personal Identifiable Information from children under the age of 13.
If you think that your child provided this kind of information on our website, we strongly encourage you to contact us immediately and we will do our best efforts to promptly remove such information from our records.
</p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Online Privacy Policy Only</h2>
<p class="mb-4">
This Privacy Policy applies only to our online activities and is valid for visitors to our website with regards to the information that they shared and/or collect in wah.su.
This policy is not applicable to any information collected offline or via channels other than this website.
</p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<h2 class="mb-4 text-2xl font-bold">Consent</h2>
<p class="mb-4">
By using our website, you hereby consent to our Privacy Policy and agree to its Terms and Conditions.
</p>
</div>
</div>
<div class="bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto mb-4">
<p>
Our Privacy Policy was created with the help of the <a href="https://www.privacypolicygenerator.org" class="font-medium text-blue-600 dark:text-blue-500 hover:underline">Privacy Policy Generator</a>.
</p>
</div>
</div>
</div>
<!--noformat-->
<footer class="m-4 bg-white rounded-lg shadow dark:bg-gray-800">
<div class="w-full max-w-screen-xl p-4 mx-auto md:flex md:items-center md:justify-between">
<span class="text-sm text-gray-500 sm:text-center dark:text-gray-400">© 2024 wah.su | All Rights
Reserved.
</span>
<ul class="flex flex-wrap items-center mt-3 text-sm font-medium text-gray-500 dark:text-gray-400 sm:mt-0">
<li>
<a href="/privacy.html" class="hover:underline me-4 md:me-6">Privacy Policy</a>
</li>
<li>
<a href="https://wah.su/radiquum" class="hover:underline">Contact</a>
</li>
</ul>
</div>
</footer>
<script src="/public/js/theme.js"></script>
<script src="/public/js/flowbite.min.js"></script>
<script src="/public/js/status.js"></script>
</body>
</html>

View file

@ -1,90 +0,0 @@
const cards = [
{
image: "/public/images/vaultwarden.png",
name: "Vaultwarden",
description: "Unofficial Bitwarden compatible server.",
about: "https://github.com/dani-garcia/vaultwarden",
url: "https://vault.wah.su",
hasDarkMode: true,
},
{
image: "/public/images/nextcloud.png",
name: "Nextcloud",
description:
"productivity suite, offering file sharing and collaboration tools.",
about: "https://nextcloud.com/",
url: "https://cloud.wah.su",
hasDarkMode: false,
},
{
image: "/public/images/immich.png",
name: "Immich",
description: "platform for managing and browsing your photos.",
about: "https://immich.app",
url: "https://photos.wah.su",
hasDarkMode: false,
},
{
image: "/public/images/element.svg",
name: "Matrix",
description: "An open network for secure, decentralised communication.",
about: "https://matrix.org",
url: "https://chat.wah.su",
hasDarkMode: false,
},
{
image: "/public/images/zipline.png",
name: "Zipline",
description: "image uploading with ShareX compatibility.",
about: "https://zipline.diced.sh/",
url: "https://x.wah.su",
hasDarkMode: false,
},
];
const services = document.getElementById("services");
function renderCards() {
const theme = localStorage.getItem("theme");
services.innerHTML = "";
for (let index = 0; index < cards.length; index++) {
const image_name = cards[index].image.split(".")[0];
const image_ext = cards[index].image.split(".")[1];
const image_url = `${image_name}${
cards[index].hasDarkMode ? `-${theme}` : ""
}.${image_ext}`;
const template = `
<img class="rounded-t-lg object-cover h-[192px] w-full" src="${image_url}" alt="" />
<div class="p-5">
<h5 class="mb-2 text-2xl font-bold tracking-tight text-gray-800 dark:text-white">${cards[index].name}
</h5>
<p class="mb-3 font-normal text-gray-700 dark:text-gray-400">${cards[index].description}
</p>
<div class="flex gap-1 items-center justify-center flex-wrap">
<a href="${cards[index].about}" target="_blank"
class="w-full inline-flex justify-center items-center py-2.5 px-5 me-2 mb-2 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700">
Read more
</a>
<a href="${cards[index].url}"
class="w-full inline-flex justify-center items-center text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800">
open
<svg class="rtl:rotate-180 w-3.5 h-3.5 ms-2" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="M1 5h12m0 0L9 1m4 4L9 9" />
</svg>
</a>
</div>
</div>
`;
const element = document.createElement("div");
element.className =
"max-w-[324px] sm:max-w-[275px] bg-white border border-gray-200 rounded-lg shadow dark:bg-gray-800 dark:border-gray-700";
element.innerHTML = template;
services.appendChild(element);
}
}
window.onload = renderCards();

File diff suppressed because one or more lines are too long

View file

@ -1,88 +0,0 @@
const statusIcon = document.getElementById("status-icon");
const statusText = document.getElementById("status-text");
const serviceUp = {
color: ["bg-green-500", "dark:bg-green-400"],
text: "All Services Operational",
};
const serviceDegraded = {
color: ["bg-yellow-400", "dark:bg-yellow-200"],
text: "Degraded Services",
};
const serviceDown = {
color: ["bg-red-600", "dark:bg-red-500"],
text: "All Services Down",
};
const serviceUnknown = {
color: ["bg-gray-500", "dark:bg-gray-400"],
text: "Services Status Unknown",
};
async function getServicesHealth() {
try {
const serviceStatus = await fetch(
"https://status.wah.su/api/status-page/heartbeat/services"
);
const services = await serviceStatus.json();
const heartbeatDict = services.heartbeatList;
let lastHeartbeats = [];
for (const [key, value] of Object.entries(heartbeatDict)) {
lastHeartbeats.push(
heartbeatDict[key][heartbeatDict[key].length - 1].status
);
}
let status = "up";
const count = lastHeartbeats.reduce((partialSum, a) => partialSum + a, 0);
if (count === lastHeartbeats.length) {
status = "up";
} else if (count === 0) {
status = "down";
} else {
status = "degraded";
}
if (status === "up") {
statusIcon.classList.add(...serviceUp.color);
statusIcon.classList.remove(
...serviceDegraded.color,
...serviceDown.color,
...serviceUnknown.color
);
statusText.textContent = serviceUp.text;
} else if (status === "degraded") {
statusIcon.classList.add(...serviceDegraded.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDown.color,
...serviceUnknown.color
);
statusText.textContent = serviceDegraded.text;
} else if (status === "down") {
statusIcon.classList.add(...serviceDown.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDegraded.color,
...serviceUnknown.color
);
statusText.textContent = serviceDown.text;
}
} catch (error) {
statusIcon.classList.add(...serviceUnknown.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDegraded.color,
...serviceDown.color
);
statusText.textContent = serviceUnknown.text;
console.log("Failed to fetch services status: " + error);
return;
}
}
getServicesHealth();
setInterval(getServicesHealth, 600000);

View file

@ -1,35 +0,0 @@
const bodyElement = document.getElementById("body");
const logo = document.getElementById("logo");
const themeToggle = document.getElementById("theme-toggle");
const setTheme = (theme) => {
bodyElement.classList.remove(theme == "light" ? "dark" : "light");
bodyElement.classList.add(theme == "light" ? "light" : "dark");
theme == "light"
? (themeToggle.checked = false)
: (themeToggle.checked = true);
logo.src = `/public/images/logo-${theme}.svg`;
localStorage.setItem("theme", theme);
};
function updateTheme() {
let theme = localStorage.getItem("theme");
if (theme) {
setTheme(theme);
} else {
setTheme("light");
}
}
themeToggle.addEventListener("click", () => {
let theme = localStorage.getItem("theme");
if (theme == "light") {
setTheme("dark");
renderCards();
} else {
setTheme("light");
renderCards();
}
});
updateTheme();

File diff suppressed because it is too large Load diff

View file

@ -1,27 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@font-face {
font-family: 'Ubuntu';
src: url('/static/fonts/Ubuntu/Ubuntu-Regular.ttf') format('truetype');
font-weight: 400;
}
@font-face {
font-family: 'Ubuntu';
src: url('/static/fonts/Ubuntu/Ubuntu-Medium.ttf') format('truetype');
font-weight: 500;
}
@font-face {
font-family: 'Ubuntu';
src: url('/static/fonts/Ubuntu/Ubuntu-Bold.ttf') format('truetype');
font-weight: 700;
}
@font-face {
font-family: 'Ubuntu';
src: url('/static/fonts/Ubuntu/Ubuntu-Light.ttf') format('truetype');
font-weight: 300;
}

View file

@ -1,77 +0,0 @@
<svg width="167" height="40" viewBox="0 0 167 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="118" height="40">
<path d="M117.07 0H0V39.9987H117.07V0Z" fill="white"/>
</mask>
<g mask="url(#mask0_3_181)">
<mask id="mask1_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="118" height="40">
<path d="M117.07 0H0V39.9987H117.07V0Z" fill="white"/>
</mask>
<g mask="url(#mask1_3_181)">
<mask id="mask2_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="7" width="118" height="26">
<path d="M117.07 7.19861H0V32.6472H117.07V7.19861Z" fill="white"/>
</mask>
<g mask="url(#mask2_3_181)">
<mask id="mask3_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="7" width="118" height="26">
<path d="M117.07 7.19861H0V32.6472H117.07V7.19861Z" fill="white"/>
</mask>
<g mask="url(#mask3_3_181)">
<path d="M6.66593 32.2241H3.78773L0.00793457 15.6579H2.47L5.45223 29.1224L8.39979 17.385H10.8272L13.7747 29.1224L16.7569 15.6579H19.0803L15.3005 32.2241H12.457L9.57881 20.6279L6.66593 32.2241ZM28.131 32.6471C26.1429 32.6471 24.6056 32.1818 23.519 31.2513C22.4325 30.3255 21.8892 29.0401 21.8892 27.3953C21.8892 25.8208 22.3978 24.6225 23.415 23.8001C24.4322 22.9777 25.9579 22.5665 27.9923 22.5665H34.2342V21.8615C34.2342 20.3341 33.8805 19.2461 33.1731 18.5975C32.4704 17.9536 31.2751 17.6318 29.5875 17.6318C27.4143 17.6318 25.4493 18.1135 23.6924 19.0769L22.8948 16.8564C24.883 15.7754 27.1485 15.2349 29.6916 15.2349C32.1421 15.2349 33.9268 15.7332 35.0456 16.7294C36.1692 17.7305 36.731 19.3119 36.731 21.4737V32.2241H34.8584L34.5463 30.4618C33.5985 31.1902 32.5928 31.7354 31.5295 32.0973C30.466 32.4638 29.3332 32.6471 28.131 32.6471ZM28.4778 30.2504C30.6509 30.2504 32.5697 29.6159 34.2342 28.3469V24.8222H27.9229C26.7439 24.8222 25.87 25.0385 25.3014 25.4707C24.7374 25.9079 24.4552 26.5493 24.4552 27.3953C24.4552 28.3352 24.7904 29.0449 25.4609 29.5242C26.1313 30.0083 27.137 30.2504 28.4778 30.2504ZM45.2962 32.2241H42.7995V7.19861H45.2962V17.1735C47.0485 15.8812 48.9904 15.2349 51.1219 15.2349C53.0361 15.2349 54.4856 15.7519 55.4704 16.7859C56.4507 17.8198 56.9408 19.3824 56.9408 21.4737V32.2241H54.4509V21.8615C54.4509 20.3811 54.1504 19.3048 53.5494 18.6328C52.9483 17.9654 51.9982 17.6318 50.6989 17.6318C49.7741 17.6318 48.8448 17.7892 47.9108 18.104C46.9768 18.4237 46.1054 18.889 45.2962 19.4999V32.2241ZM69.8753 32.6471C69.1586 32.6471 68.546 32.3887 68.0374 31.8717C67.5288 31.3548 67.2745 30.7321 67.2745 30.0036C67.2745 29.2986 67.5288 28.6806 68.0374 28.1496C68.546 27.6232 69.1586 27.36 69.8753 27.36C70.592 27.36 71.2046 27.6232 71.7132 28.1496C72.2218 28.6806 72.4761 29.2986 72.4761 30.0036C72.4761 30.7321 72.2218 31.3548 71.7132 31.8717C71.2046 32.3887 70.592 32.6471 69.8753 32.6471ZM89.9533 32.6471C87.1098 32.6471 84.5669 31.9657 82.3243 30.6028L83.33 28.4526C84.3241 29.0401 85.3875 29.4867 86.5203 29.7921C87.6531 30.0976 88.8321 30.2504 90.0573 30.2504C93.1784 30.2504 94.7388 29.3339 94.7388 27.501C94.7388 26.8196 94.5307 26.3191 94.1146 25.9995C93.6984 25.6846 92.9703 25.4567 91.9299 25.3157L87.9767 24.7517C86.2891 24.4933 85.0592 24.028 84.2871 23.356C83.5103 22.6886 83.122 21.697 83.122 20.3811C83.122 18.7362 83.7184 17.4673 84.9113 16.5744C86.0996 15.6814 87.7686 15.2349 89.9186 15.2349C92.346 15.2349 94.6348 15.7989 96.7848 16.9268L95.8831 19.1121C94.0568 18.1253 92.0455 17.6318 89.8493 17.6318C87.052 17.6318 85.6534 18.4894 85.6534 20.2049C85.6534 20.8628 85.8614 21.3445 86.2775 21.65C86.6937 21.9554 87.4219 22.1787 88.4622 22.3197L92.4154 22.8836C94.1262 23.1187 95.3629 23.5768 96.1259 24.2583C96.8888 24.9397 97.2701 25.9618 97.2701 27.3248C97.2701 29.0401 96.6413 30.356 95.3838 31.2725C94.1215 32.1889 92.3114 32.6471 89.9533 32.6471ZM108.748 32.6471C106.853 32.6471 105.408 32.1231 104.414 31.075C103.42 30.0317 102.923 28.4762 102.923 26.4084V15.6579H105.419V26.0207C105.419 27.501 105.72 28.575 106.321 29.2422C106.922 29.9143 107.87 30.2504 109.164 30.2504C110.112 30.2504 111.053 30.0858 111.987 29.7569C112.926 29.4278 113.788 28.9696 114.574 28.3821V15.6579H117.071V32.2241H115.198L114.921 30.4618C113.996 31.1902 113.018 31.7354 111.987 32.0973C110.961 32.4638 109.881 32.6471 108.748 32.6471Z" fill="white"/>
</g>
</g>
</g>
</g>
<mask id="mask4_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="126" y="0" width="41" height="40">
<path d="M166.021 0H126.668V40H166.021V0Z" fill="white"/>
</mask>
<g mask="url(#mask4_3_181)">
<mask id="mask5_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="126" y="0" width="41" height="40">
<path d="M166.021 0H126.668V40H166.021V0Z" fill="white"/>
</mask>
<g mask="url(#mask5_3_181)">
<path d="M126.668 20C126.668 8.95417 135.477 0 146.344 0C157.211 0 166.021 8.95433 166.021 20C166.021 31.0457 157.211 39.9998 146.344 40C135.477 40 126.668 31.0457 126.668 20ZM146.344 38.636C156.47 38.636 164.679 30.2923 164.679 20C164.679 9.70754 156.47 1.364 146.344 1.364C136.219 1.364 128.01 9.70769 128.01 20C128.01 30.2923 136.219 38.6358 146.344 38.636Z" fill="black"/>
<path d="M146.343 39.8C157.102 39.8 165.823 30.9352 165.823 20C165.823 9.06468 157.102 0.199921 146.343 0.199921C135.586 0.199921 126.864 9.06468 126.864 20C126.864 30.9352 135.586 39.8 146.343 39.8Z" fill="black"/>
<mask id="mask6_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="135" y="9" width="23" height="22">
<path d="M157.144 9.24829H135.544V30.7518H157.144V9.24829Z" fill="white"/>
</mask>
<g mask="url(#mask6_3_181)">
<mask id="mask7_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="135" y="9" width="23" height="22">
<path d="M157.144 9.24829H135.544V30.7518H157.144V9.24829Z" fill="white"/>
</mask>
<g mask="url(#mask7_3_181)">
<path d="M157.143 19.9556C157.143 21.4952 155.918 22.7401 154.402 22.7401C152.89 22.7401 151.664 21.4952 151.664 19.9556C151.664 18.4182 154.16 15.9078 155.673 15.9078C157.189 15.9078 157.143 18.4182 157.143 19.9556Z" fill="white"/>
<path d="M141.026 19.9556C141.026 21.4952 139.8 22.7401 138.284 22.7401C136.771 22.7401 135.546 21.4952 135.546 19.9556C135.546 18.4182 135.453 15.9078 136.965 15.9078C138.481 15.9078 141.026 18.4182 141.026 19.9556Z" fill="white"/>
<path d="M152.531 14.3867C152.531 15.9259 151.306 17.1715 149.791 17.1715C148.277 17.1715 147.052 15.9259 147.052 14.3867C147.052 12.8495 148.277 9.24829 149.791 9.24829C151.306 9.24798 152.531 12.8492 152.531 14.3867Z" fill="white"/>
<path d="M153.13 25.339C153.866 28.4174 150.765 30.8372 146.2 30.7493C141.638 30.6612 138.592 28.1704 139.392 25.1801C140.192 22.1937 143.292 19.7701 146.318 19.7701C149.347 19.7704 152.396 22.265 153.13 25.339Z" fill="white"/>
<path d="M145.591 14.3867C145.591 15.9259 144.366 17.1715 142.851 17.1715C141.338 17.1715 140.112 15.9259 140.112 14.3867C140.112 12.8495 141.338 9.24829 142.851 9.24829C144.366 9.24798 145.591 12.8492 145.591 14.3867Z" fill="white"/>
</g>
</g>
</g>
</g>
<mask id="mask8_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="126" y="0" width="41" height="40">
<path d="M166.021 0H126.668V40H166.021V0Z" fill="white"/>
</mask>
<g mask="url(#mask8_3_181)">
<mask id="mask9_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="126" y="0" width="41" height="40">
<path d="M166.021 0H126.668V40H166.021V0Z" fill="white"/>
</mask>
<g mask="url(#mask9_3_181)">
<path d="M126.668 20C126.668 8.95417 135.477 0 146.344 0C157.211 0 166.021 8.95433 166.021 20C166.021 31.0457 157.211 39.9998 146.344 40C135.477 40 126.668 31.0457 126.668 20ZM146.344 38.636C156.47 38.636 164.679 30.2923 164.679 20C164.679 9.70754 156.47 1.364 146.344 1.364C136.219 1.364 128.01 9.70769 128.01 20C128.01 30.2923 136.219 38.6358 146.344 38.636Z" fill="black"/>
<path d="M146.343 39.8C157.102 39.8 165.823 30.9352 165.823 20C165.823 9.06468 157.102 0.199921 146.343 0.199921C135.586 0.199921 126.864 9.06468 126.864 20C126.864 30.9352 135.586 39.8 146.343 39.8Z" fill="black"/>
<mask id="mask10_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="135" y="9" width="23" height="22">
<path d="M157.144 9.24829H135.544V30.7518H157.144V9.24829Z" fill="white"/>
</mask>
<g mask="url(#mask10_3_181)">
<mask id="mask11_3_181" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="135" y="9" width="23" height="22">
<path d="M157.144 9.24829H135.544V30.7518H157.144V9.24829Z" fill="white"/>
</mask>
<g mask="url(#mask11_3_181)">
<path d="M157.143 19.9556C157.143 21.4952 155.918 22.7401 154.402 22.7401C152.89 22.7401 151.664 21.4952 151.664 19.9556C151.664 18.4182 154.16 15.9078 155.673 15.9078C157.189 15.9078 157.143 18.4182 157.143 19.9556Z" fill="white"/>
<path d="M141.026 19.9556C141.026 21.4952 139.8 22.7401 138.284 22.7401C136.771 22.7401 135.546 21.4952 135.546 19.9556C135.546 18.4182 135.453 15.9078 136.965 15.9078C138.481 15.9078 141.026 18.4182 141.026 19.9556Z" fill="white"/>
<path d="M152.531 14.3867C152.531 15.9259 151.306 17.1715 149.791 17.1715C148.277 17.1715 147.052 15.9259 147.052 14.3867C147.052 12.8495 148.277 9.24829 149.791 9.24829C151.306 9.24798 152.531 12.8492 152.531 14.3867Z" fill="white"/>
<path d="M153.13 25.339C153.866 28.4174 150.765 30.8372 146.2 30.7493C141.638 30.6612 138.592 28.1704 139.392 25.1801C140.192 22.1937 143.292 19.7701 146.318 19.7701C149.347 19.7704 152.396 22.265 153.13 25.339Z" fill="white"/>
<path d="M145.591 14.3867C145.591 15.9259 144.366 17.1715 142.851 17.1715C141.338 17.1715 140.112 15.9259 140.112 14.3867C140.112 12.8495 141.338 9.24829 142.851 9.24829C144.366 9.24798 145.591 12.8492 145.591 14.3867Z" fill="white"/>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,19 +0,0 @@
{
"name": "",
"short_name": "",
"icons": [
{
"src": "/public/favicon/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/public/favicon/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

View file

@ -1,96 +0,0 @@
-------------------------------
UBUNTU FONT LICENCE Version 1.0
-------------------------------
PREAMBLE
This licence allows the licensed fonts to be used, studied, modified and
redistributed freely. The fonts, including any derivative works, can be
bundled, embedded, and redistributed provided the terms of this licence
are met. The fonts and derivatives, however, cannot be released under
any other licence. The requirement for fonts to remain under this
licence does not require any document created using the fonts or their
derivatives to be published under this licence, as long as the primary
purpose of the document is not to be a vehicle for the distribution of
the fonts.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this licence and clearly marked as such. This may
include source files, build scripts and documentation.
"Original Version" refers to the collection of Font Software components
as received under this licence.
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to
a new environment.
"Copyright Holder(s)" refers to all individuals and companies who have a
copyright ownership of the Font Software.
"Substantially Changed" refers to Modified Versions which can be easily
identified as dissimilar to the Font Software by users of the Font
Software comparing the Original Version with the Modified Version.
To "Propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification and with or without charging
a redistribution fee), making available to the public, and in some
countries other activities as well.
PERMISSION & CONDITIONS
This licence does not grant any rights under trademark law and all such
rights are reserved.
Permission is hereby granted, free of charge, to any person obtaining a
copy of the Font Software, to propagate the Font Software, subject to
the below conditions:
1) Each copy of the Font Software must contain the above copyright
notice and this licence. These can be included either as stand-alone
text files, human-readable headers or in the appropriate machine-
readable metadata fields within text or binary files as long as those
fields can be easily viewed by the user.
2) The font name complies with the following:
(a) The Original Version must retain its name, unmodified.
(b) Modified Versions which are Substantially Changed must be renamed to
avoid use of the name of the Original Version or similar names entirely.
(c) Modified Versions which are not Substantially Changed must be
renamed to both (i) retain the name of the Original Version and (ii) add
additional naming elements to distinguish the Modified Version from the
Original Version. The name of such Modified Versions must be the name of
the Original Version, with "derivative X" where X represents the name of
the new work, appended to that name.
3) The name(s) of the Copyright Holder(s) and any contributor to the
Font Software shall not be used to promote, endorse or advertise any
Modified Version, except (i) as required by this licence, (ii) to
acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with
their explicit written permission.
4) The Font Software, modified or unmodified, in part or in whole, must
be distributed entirely under this licence, and must not be distributed
under any other licence. The requirement for fonts to remain under this
licence does not affect any document created using the Font Software,
except any version of the Font Software extracted from a document
created using the Font Software may only be distributed under this
licence.
TERMINATION
This licence becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
DEALINGS IN THE FONT SOFTWARE.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View file

@ -1,7 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M100 200C155.228 200 200 155.228 200 100C200 44.7715 155.228 0 100 0C44.7715 0 0 44.7715 0 100C0 155.228 44.7715 200 100 200Z" fill="#0DBD8B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M81.7169 46.5946C81.7169 42.5581 84.9959 39.2859 89.0408 39.2859C116.456 39.2859 138.681 61.4642 138.681 88.8225C138.681 92.859 135.401 96.1312 131.357 96.1312C127.312 96.1312 124.033 92.859 124.033 88.8225C124.033 69.5372 108.366 53.9033 89.0408 53.9033C84.9959 53.9033 81.7169 50.6311 81.7169 46.5946Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M153.39 81.5137C157.435 81.5137 160.714 84.7859 160.714 88.8224C160.714 116.181 138.49 138.359 111.075 138.359C107.03 138.359 103.751 135.087 103.751 131.05C103.751 127.014 107.03 123.742 111.075 123.742C130.4 123.742 146.066 108.108 146.066 88.8224C146.066 84.7859 149.345 81.5137 153.39 81.5137Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M118.398 153.405C118.398 157.442 115.119 160.714 111.074 160.714C83.6592 160.714 61.4347 138.536 61.4347 111.177C61.4347 107.141 64.7138 103.869 68.7587 103.869C72.8035 103.869 76.0826 107.141 76.0826 111.177C76.0826 130.463 91.7489 146.097 111.074 146.097C115.119 146.097 118.398 149.369 118.398 153.405Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.6097 118.486C42.5648 118.486 39.2858 115.214 39.2858 111.178C39.2858 83.8193 61.5102 61.6409 88.9255 61.6409C92.9704 61.6409 96.2494 64.9132 96.2494 68.9497C96.2494 72.9862 92.9704 76.2584 88.9255 76.2584C69.6 76.2584 53.9337 91.8922 53.9337 111.178C53.9337 115.214 50.6546 118.486 46.6097 118.486Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

View file

@ -1,93 +0,0 @@
const statusIcon = document.getElementById("status-icon");
const statusText = document.getElementById("status-text");
const statusAnimate = document.getElementById("status-animate");
const serviceUp = {
color: ["bg-green-500", "dark:bg-green-400"],
text: "Operational",
};
const serviceDegraded = {
color: ["bg-yellow-400", "dark:bg-yellow-200"],
text: "Degraded",
};
const serviceDown = {
color: ["bg-red-600", "dark:bg-red-500"],
text: "Down",
};
const serviceUnknown = {
color: ["bg-gray-500", "dark:bg-gray-400"],
text: "Unknown",
};
async function getServicesHealth() {
try {
const serviceStatus = await fetch(
"https://status.wah.su/api/status-page/heartbeat/services"
);
const services = await serviceStatus.json();
const heartbeatDict = services.heartbeatList;
let lastHeartbeats = [];
for (const [key, value] of Object.entries(heartbeatDict)) {
lastHeartbeats.push(
heartbeatDict[key][heartbeatDict[key].length - 1].status
);
}
let status = "up";
const count = lastHeartbeats.reduce((partialSum, a) => partialSum + a, 0);
if (count === lastHeartbeats.length) {
status = "up";
} else if (count === 0) {
status = "down";
} else {
status = "degraded";
}
if (status === "up") {
statusIcon.classList.add(...serviceUp.color);
statusIcon.classList.remove(
...serviceDegraded.color,
...serviceDown.color,
...serviceUnknown.color
);
statusText.textContent = serviceUp.text;
statusAnimate.classList.remove("hidden");
} else if (status === "degraded") {
statusIcon.classList.add(...serviceDegraded.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDown.color,
...serviceUnknown.color
);
statusText.textContent = serviceDegraded.text;
statusAnimate.classList.remove("hidden");
} else if (status === "down") {
statusIcon.classList.add(...serviceDown.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDegraded.color,
...serviceUnknown.color
);
statusText.textContent = serviceDown.text;
statusAnimate.classList.add("hidden");
}
} catch (error) {
statusIcon.classList.add(...serviceUnknown.color);
statusIcon.classList.remove(
...serviceUp.color,
...serviceDegraded.color,
...serviceDown.color
);
statusText.textContent = serviceUnknown.text;
statusAnimate.classList.add("hidden");
console.log("Failed to fetch services status: " + error);
return;
}
}
getServicesHealth();
setInterval(getServicesHealth, 600000);

View file

@ -1,26 +0,0 @@
const services_container = document.getElementById('services');
const all_services = services_container.children;
const tags = {
'media': '<p class="px-4 py-1 text-white bg-green-500 rounded-md max-w-fit">media</p>',
'security': '<p class="px-4 py-1 text-white bg-blue-500 rounded-md max-w-fit">security</p>',
'communication': '<p class="px-4 py-1 text-white bg-pink-600 rounded-md max-w-fit">communication</p>',
'member only': '<p class="px-4 py-1 text-white bg-red-500 rounded-md max-w-fit">member only</p>',
'games': '<p class="px-4 py-1 text-white bg-yellow-500 rounded-md max-w-fit">games</p>',
}
for (let i = 0; i < all_services.length; i++) {
const service = all_services.item(i);
const service_tags_container = service.querySelector('[data-tags]');
const service_tags_content = service_tags_container.dataset.tags.split(',');
for (let j = 0; j < service_tags_content.length; j++) {
const tag = service_tags_content[j];
if (tags[tag]) {
service_tags_container.innerHTML += tags[tag];
} else {
service_tags_container.innerHTML += '<p class="px-4 py-1 text-white bg-gray-500 rounded-md max-w-fit">' + tag + '</p>';
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

File diff suppressed because it is too large Load diff

View file

@ -1,28 +0,0 @@
const { addDynamicIconSelectors } = require('@iconify/tailwind');
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}", "./static/js/**/*.{js,ts,jsx,tsx}"],
theme: {
extend: {
colors: {
"page-background": "#210905",
"header-background": "#85144B",
"card-background": "#823220",
"button-background": "#E64824",
},
fontFamily: {
ubuntu: ["Ubuntu", "sans-serif"],
},
screens: {
'xl': '1512px',
'2xl': '1860px',
'fhd': '1920px',
},
},
},
plugins: [
addDynamicIconSelectors(),
],
}