Migrated all of the current data to seperate YAML files to be read from at build time.
This commit is contained in:
parent
042679198a
commit
57d03f2542
@ -1,13 +1,12 @@
|
|||||||
import { SERVERS } from "../js/variables";
|
|
||||||
import SCard from "./server-card";
|
import SCard from "./server-card";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
export default function ServerBlock({}) {
|
export default function ServerBlock({ servers }) {
|
||||||
return (
|
return (
|
||||||
<div className="p-4 w-full inline-flow align-middle justify-center space-y-4">
|
<div className="p-4 w-full inline-flow align-middle justify-center space-y-4">
|
||||||
<p className="w-full text-lg text-center text-werefox-blue-dark dark:text-werefox-blue">
|
<p className="w-full text-lg text-center text-werefox-blue-dark dark:text-werefox-blue">
|
||||||
All the stuff I run uses the following server machines with reverse
|
All the stuff I run uses the following server machines with reverse SSH
|
||||||
SSH connections to a{" "}
|
connections to a{" "}
|
||||||
<Link href="https://www.linode.com/?r=61251dc51397edcfacadd7f3744b258b63ad4248">
|
<Link href="https://www.linode.com/?r=61251dc51397edcfacadd7f3744b258b63ad4248">
|
||||||
<a
|
<a
|
||||||
target="_blank"
|
target="_blank"
|
||||||
@ -18,14 +17,14 @@ export default function ServerBlock({}) {
|
|||||||
</Link>
|
</Link>
|
||||||
{"."}
|
{"."}
|
||||||
</p>
|
</p>
|
||||||
{Object.keys(SERVERS).map((server) => (
|
{Object.keys(servers).map((server) => (
|
||||||
<SCard
|
<SCard
|
||||||
server={server}
|
server={server}
|
||||||
model={SERVERS[server].model}
|
model={servers[server].model}
|
||||||
cpu={SERVERS[server].cpu}
|
cpu={servers[server].cpu}
|
||||||
gpu={SERVERS[server].gpu}
|
gpu={servers[server].gpu}
|
||||||
ram={SERVERS[server].ram}
|
ram={servers[server].ram}
|
||||||
os={SERVERS[server].os}
|
os={servers[server].os}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
19
src/info/data/other.yml
Normal file
19
src/info/data/other.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
--- # Other YAML
|
||||||
|
|
||||||
|
"Valentine's Day Letter":
|
||||||
|
url: "https://letter.werefox.dev"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/red_heart.svg"
|
||||||
|
alt: "Red heart emoji"
|
||||||
|
description: >
|
||||||
|
Here's a little treat I put together for Valentine's Day one year, and I decided
|
||||||
|
to just keep it up all year. Feel free to take a look if you ever need a little pick-me-up. 💙
|
||||||
|
|
||||||
|
Music:
|
||||||
|
url: "https://soundcloud.com/alexis-werefox"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/studio_microphone.svg"
|
||||||
|
alt: "Microphone emoji"
|
||||||
|
description: >
|
||||||
|
*Nervous sweating* Heh! Sometimes I write some music!? You're free to take a
|
||||||
|
listen if you want! Let me know what you think! It's usually based on my poetry.
|
60
src/info/data/private.yml
Normal file
60
src/info/data/private.yml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
--- # Private YAML
|
||||||
|
|
||||||
|
"Pi-hole":
|
||||||
|
url: "https://pi-hole.net/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/pi_hole_logo.svg"
|
||||||
|
alt: "The Pi-hole logo"
|
||||||
|
description: >
|
||||||
|
Pi-hole is a Linux network-level advertisement and Internet tracker blocking
|
||||||
|
application which acts as a DNS sinkhole and optionally a DHCP server, intended for use on
|
||||||
|
a private network. It is designed for use on embedded devices with network capability, such
|
||||||
|
as the Raspberry Pi, but it can be used on other machines running Linux, including cloud
|
||||||
|
implementations.
|
||||||
|
|
||||||
|
Wireguard:
|
||||||
|
url: "https://www.wireguard.com/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/wireguard_logo.png"
|
||||||
|
alt: "The Wiregaurd logo"
|
||||||
|
description: >
|
||||||
|
WireGuard is a communication protocol and free and open-source software that
|
||||||
|
implements encrypted virtual private networks, and was designed with the goals of ease of
|
||||||
|
use, high speed performance, and low attack surface. It aims for better performance and
|
||||||
|
more power-saving than the IPsec and OpenVPN tunneling protocols. I use this for access
|
||||||
|
to my home network outside of being at home, and for access to #thetubes.
|
||||||
|
|
||||||
|
Nextcloud:
|
||||||
|
url: "https://nextcloud.com/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/nextcloud_logo.png"
|
||||||
|
alt: "The Nextcloud logo"
|
||||||
|
description: >
|
||||||
|
Nextcloud is a suite of client-server software for creating and using file
|
||||||
|
hosting services. It is enterprise-ready with comprehensive support options. Free and
|
||||||
|
open-source means that anyone is allowed to install and operate it on their own private
|
||||||
|
server devices.
|
||||||
|
|
||||||
|
Wikijs:
|
||||||
|
url: "https://js.wiki/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/wikijs_logo.svg"
|
||||||
|
alt: "The Wiki.js logo"
|
||||||
|
description: >
|
||||||
|
A modern and powerful wiki app built on Node.js
|
||||||
|
|
||||||
|
Navidrome:
|
||||||
|
url: "https://github.com/navidrome/navidrome"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/navidrome_logo.png"
|
||||||
|
alt: "The Navidrome logo"
|
||||||
|
description: >
|
||||||
|
🎧☁️ Navidrome is a Modern Music Server and Streamer compatible with Subsonic/Airsonic
|
||||||
|
|
||||||
|
Kanboard:
|
||||||
|
url: "https://kanboard.org/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/kanboard_logo.svg"
|
||||||
|
alt: "The Kanboard logo"
|
||||||
|
description: >
|
||||||
|
Kanboard is project management software that focuses on the Kanban methodology.
|
63
src/info/data/projects.yml
Normal file
63
src/info/data/projects.yml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
--- # Projects YAML
|
||||||
|
|
||||||
|
Services:
|
||||||
|
url: "/projects/services"
|
||||||
|
src: "/emoji/crt_blue_screen.svg"
|
||||||
|
alt: "A CRT blue screen emoji"
|
||||||
|
description: >
|
||||||
|
Here is a list of some of the services I host.
|
||||||
|
Some of them, because a few I keep to just myself.
|
||||||
|
|
||||||
|
Streaming:
|
||||||
|
url: "/projects/streaming"
|
||||||
|
src: "/emoji/twitch-logo.png"
|
||||||
|
alt: "Twitch logo"
|
||||||
|
description: >
|
||||||
|
I stream regularly now! Mostly Beat Saber workouts.
|
||||||
|
If you're interested in that, here are some associated links!
|
||||||
|
|
||||||
|
Poetry:
|
||||||
|
url: "https://write.as/a-letter-to-the-void"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/pen.svg"
|
||||||
|
alt: "Pen emoji"
|
||||||
|
description: >
|
||||||
|
Sometimes, I write poetry. It's not always the
|
||||||
|
happiest, but I am proud of it. It would mean a lot to me if
|
||||||
|
you took a look!
|
||||||
|
|
||||||
|
Blog:
|
||||||
|
url: "https://werefox.dev"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/page_with_pencil.svg"
|
||||||
|
alt: "Paper with a pencil emoji"
|
||||||
|
description: >
|
||||||
|
I don't update it too often, but I do also maintain
|
||||||
|
a blog! You can follow it to keep up with what I'm doing as well!
|
||||||
|
|
||||||
|
Programming:
|
||||||
|
url: "https://gitea.werefox.dev/shadow8t4"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/laptop.svg"
|
||||||
|
alt: "Laptop emoji"
|
||||||
|
description: >
|
||||||
|
Much like this site, sometimes I program things!
|
||||||
|
Gotta at least try and put that Comp. Sci. degree to good use!
|
||||||
|
|
||||||
|
"Non-public Stuff":
|
||||||
|
url: "/projects/private"
|
||||||
|
src: "/emoji/no_entry.svg"
|
||||||
|
alt: "No entry emoji"
|
||||||
|
description: >
|
||||||
|
Here are some other things that I host for myself,
|
||||||
|
some of these can be accessed on the internet, but I only give
|
||||||
|
myself login access, and I have no plans on giving access to the
|
||||||
|
public.
|
||||||
|
|
||||||
|
"Other Stuff":
|
||||||
|
url: "/projects/other"
|
||||||
|
src: "/emoji/asterisk.svg"
|
||||||
|
alt: "Asterisk emoji"
|
||||||
|
description: >
|
||||||
|
Here are just some other little things I've done
|
||||||
|
that don't really fit in any specific category.
|
22
src/info/data/servers.yml
Normal file
22
src/info/data/servers.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
--- # Servers YAML
|
||||||
|
|
||||||
|
"Intel NUC":
|
||||||
|
model: "8i5BEH"
|
||||||
|
cpu: "Intel i5 8529U eight-core @2.3-3.8Ghz"
|
||||||
|
gpu: "Intel Iris Plus Graphics 655"
|
||||||
|
ram: "16 Gb @2400Mhz"
|
||||||
|
os: "Ubuntu Server 20.04"
|
||||||
|
|
||||||
|
"Raspberry Pi 4 (x2)":
|
||||||
|
model: "B Rev 1.4"
|
||||||
|
cpu: "BCM2835 four-core @1.5Ghz"
|
||||||
|
gpu: "N/A"
|
||||||
|
ram: "8 Gb"
|
||||||
|
os: "Ubuntu Server 20.04"
|
||||||
|
|
||||||
|
"ASUS MINIPC":
|
||||||
|
model: "PB50 0601"
|
||||||
|
cpu: "AMD Ryzen 5 3550H eight-core @2.1-3.7GHz"
|
||||||
|
gpu: "AMD Radeon Vega 8 Graphics"
|
||||||
|
ram: "32 Gb"
|
||||||
|
os: "Ubuntu Server 20.10"
|
66
src/info/data/services.yml
Normal file
66
src/info/data/services.yml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
--- # Services YAML
|
||||||
|
|
||||||
|
Mastodon:
|
||||||
|
url: "https://masto.werefox.dev/about/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/mastodon-logo.png"
|
||||||
|
alt: "The Mastodon logo"
|
||||||
|
description: >
|
||||||
|
Mastodon is an online, self-hosted social media, and social networking service.
|
||||||
|
It allows anyone to host their own server node in the network, and its various separately
|
||||||
|
operated user bases are federated across many different servers.
|
||||||
|
|
||||||
|
Pinafore:
|
||||||
|
url: "https://pina.werefox.dev/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/pinafore_logo.svg"
|
||||||
|
alt: "The Pinafore logo"
|
||||||
|
description: >
|
||||||
|
An alternative web client for Mastodon, focused on speed and simplicity.
|
||||||
|
|
||||||
|
Halcyon:
|
||||||
|
url: "https://halcyon.werefox.dev/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/halcyon_logo.png"
|
||||||
|
alt: "The Halcyon logo"
|
||||||
|
description: >
|
||||||
|
Halcyon is standard Twitter like client of Mastodon, And you can use it just
|
||||||
|
by login to your instance. Let's Toot like a tweet.
|
||||||
|
|
||||||
|
Brutaldon:
|
||||||
|
url: "https://brutal.werefox.dev/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/brutaldon_logo.png"
|
||||||
|
alt: "The Brutaldon logo"
|
||||||
|
description: >
|
||||||
|
Brutaldon is a brutalist, Web 1.0 web interface for Mastodon and Pleroma.
|
||||||
|
|
||||||
|
PeerTube:
|
||||||
|
url: "https://vid.werefox.dev/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/peertube_logo.svg"
|
||||||
|
alt: "The PeerTube logo"
|
||||||
|
description: >
|
||||||
|
PeerTube is a free and open-source, decentralized, federated video platform
|
||||||
|
powered by ActivityPub and WebTorrent, that uses peer-to-peer technology to reduce load on
|
||||||
|
individual servers when viewing videos.
|
||||||
|
|
||||||
|
Element:
|
||||||
|
url: "https://elem.werefox.dev/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/element_logo.svg"
|
||||||
|
alt: "The Element logo"
|
||||||
|
description: >
|
||||||
|
Element (previously Riot) is an all-in-one secure chat app for teams,
|
||||||
|
friends and organisations. Keeps conversations in your control, safe from data-mining
|
||||||
|
and ads. Talk to everyone through the open global Matrix network, protected by proper
|
||||||
|
end-to-end encryption. (additionally, I host a Matrix server at matrix.werefox.dev)
|
||||||
|
|
||||||
|
Gitea:
|
||||||
|
url: "https://gitea.werefox.dev/"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/gitea_logo.svg"
|
||||||
|
alt: "The Gitea logo"
|
||||||
|
description: >
|
||||||
|
A painless self-hosted Git service. Gitea is a community managed
|
||||||
|
lightweight code hosting solution written in Go. It is published under the MIT license.
|
21
src/info/data/streaming.yml
Normal file
21
src/info/data/streaming.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
--- # Streaming YAML
|
||||||
|
|
||||||
|
Twitch:
|
||||||
|
url: "https://twitch.tv/alexis_werefox"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/twitch-logo.png"
|
||||||
|
alt: "The Twtich logo"
|
||||||
|
description: >
|
||||||
|
Here's a link to my Twitch channel! That's where I do my
|
||||||
|
streams currently. I've been idly contemplating Owncast at some point, but at the
|
||||||
|
moment with my current setup, it isn't really feasible, unfortunately.
|
||||||
|
|
||||||
|
PeerTube:
|
||||||
|
url: "https://vid.werefox.dev/videos/watch/playlist/6a6f95c2-30c7-4163-a3ee-ad5dc5abefcf"
|
||||||
|
new_tab: true
|
||||||
|
src: "/emoji/peertube_logo.svg"
|
||||||
|
alt: "The PeerTube logo"
|
||||||
|
description: >
|
||||||
|
My personal PeerTube instance is where I upload all my recordings (VODs).
|
||||||
|
If you ever miss a stream and wanna see what ya missed, they're always uploaded here!
|
||||||
|
This link will take you to a playlist where I put all of the recordings in order.
|
@ -1,366 +0,0 @@
|
|||||||
// This is where you put the testimonial users' info
|
|
||||||
|
|
||||||
export const TESTIMONIALS = {
|
|
||||||
colabunny: {
|
|
||||||
json: "https://yiff.life/@colabunny.json",
|
|
||||||
url: "https://yiff.life/@colabunny",
|
|
||||||
content: '"please stay your jokes are funny and smart"',
|
|
||||||
},
|
|
||||||
ElfLord: {
|
|
||||||
url: "https://freedom.horse/@ElfLord",
|
|
||||||
json: "https://freedom.horse/@ElfLord.json",
|
|
||||||
content: `"Someday I'm gonna visit you in Texas, and when I get there, I'm going to realize you don't live in Texas at all, and I'm in the wrong state"`,
|
|
||||||
},
|
|
||||||
Decimal: {
|
|
||||||
url: "https://plush.city/@Decimal",
|
|
||||||
json: "https://plush.city/@Decimal.json",
|
|
||||||
content: `"I will appreciate the heck out of you any day"`,
|
|
||||||
},
|
|
||||||
Drako_Fenris: {
|
|
||||||
url: "https://yiff.life/@Drako_Fenris",
|
|
||||||
json: "https://yiff.life/@Drako_Fenris.json",
|
|
||||||
content: `"[Alexis' future wife] lives in the ether yet to be revealed. she awaits the day her big tiddie goth gf rides in on her unicorn and rescues her."`,
|
|
||||||
},
|
|
||||||
"00dani": {
|
|
||||||
url: "https://vulpine.club/@00dani",
|
|
||||||
json: "https://vulpine.club/@00dani.json",
|
|
||||||
content: `"*falls in love with you* haha whoopsies 😳"`,
|
|
||||||
},
|
|
||||||
Gumby: {
|
|
||||||
url: "https://puppy.cafe/@Gumby",
|
|
||||||
json: "https://puppy.cafe/@Gumby.json",
|
|
||||||
content: `"im love alexis a lot 💚 🐀"`,
|
|
||||||
},
|
|
||||||
AshBunny: {
|
|
||||||
url: "https://vulpine.club/@AshBunny",
|
|
||||||
json: "https://vulpine.club/@AshBunny.json",
|
|
||||||
content: `"heck. I don't think I can take all of this support."`,
|
|
||||||
},
|
|
||||||
heatherhorns: {
|
|
||||||
url: "https://plush.city/@heatherhorns",
|
|
||||||
json: "https://plush.city/@heatherhorns.json",
|
|
||||||
content: `";~;
|
|
||||||
|
|
||||||
gpsd gosh"`,
|
|
||||||
},
|
|
||||||
MutoShack: {
|
|
||||||
url: "https://functional.cafe/@MutoShack",
|
|
||||||
json: "https://functional.cafe/@MutoShack.json",
|
|
||||||
content: `"yess w'all say nice things! usually "alexis is the good" and "alexis is the gay"
|
|
||||||
|
|
||||||
because it is the truth"`,
|
|
||||||
},
|
|
||||||
immychan: {
|
|
||||||
url: "https://antabaka.me/@immychan",
|
|
||||||
json: "https://antabaka.me/@immychan.json",
|
|
||||||
content: `"Oh damn you're cute 😳"`,
|
|
||||||
},
|
|
||||||
nautilee: {
|
|
||||||
url: "https://dragon.style/@nautilee",
|
|
||||||
json: "https://dragon.style/@nautilee.json",
|
|
||||||
content: `"...how are you so goshdarn cute"`,
|
|
||||||
},
|
|
||||||
holly: {
|
|
||||||
url: "https://lotor.tech/users/holly",
|
|
||||||
json: "https://lotor.tech/users/holly.json",
|
|
||||||
content: `"wait there's still an opportunity to be in [the Testimonials page]?"`,
|
|
||||||
},
|
|
||||||
thufie: {
|
|
||||||
url: "https://social.pixie.town/@thufie",
|
|
||||||
json: "https://social.pixie.town/@thufie.json",
|
|
||||||
content: `"banger beach bod"`,
|
|
||||||
},
|
|
||||||
lindsays: {
|
|
||||||
url: "https://hackers.town/@lindsays",
|
|
||||||
json: "https://hackers.town/@lindsays.json",
|
|
||||||
content: `"Regarding @shadow8t4 : She's an amazing, sweet, beautiful dork, and a spectacular best friend. also, a butt."`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is where I put the questions and answers for the FAQ
|
|
||||||
|
|
||||||
export const FAQS = {
|
|
||||||
q1: {
|
|
||||||
question: `"So is Werefox like a species or...?"`,
|
|
||||||
answer: `That's a good question! No, my fursona's full name is Alexis Werefox,
|
|
||||||
so Werefox is just a last name. I am just a fox!`,
|
|
||||||
src: "/images/alexis_heart.png",
|
|
||||||
alt: "Alexis giving a heart emoji",
|
|
||||||
},
|
|
||||||
q2: {
|
|
||||||
question: `"How can you be Pansexual and a Lesbian?"`,
|
|
||||||
answer: `I believe I've been told the proper term is "sapphic",
|
|
||||||
it just means I *am* Pansexual, but I prefer those who identify more femme.`,
|
|
||||||
src: "/images/alexis_wink.png",
|
|
||||||
alt: "Alexis winking and giving a peace sign",
|
|
||||||
},
|
|
||||||
q3: {
|
|
||||||
question: `"How do I get those Xenia stickers?"`,
|
|
||||||
answer: `Yeah, about that. So, I've made a few posts about this, but when
|
|
||||||
I first started giving those out, I was in a good financial position, among
|
|
||||||
other things. Now I'm not! I will get to it when I do.`,
|
|
||||||
src: "/images/alexis_annoyed.png",
|
|
||||||
alt: "Alexis looking annoyed and crossing her arms",
|
|
||||||
},
|
|
||||||
q4: {
|
|
||||||
question: `"What do you do?"`,
|
|
||||||
answer: `Lots of things! Lately, though, I've been focusing on myself and my
|
|
||||||
transition. I could use some financial support (since I'm currently
|
|
||||||
unemployed) if you're feeling up to it and can afford it! If you want to
|
|
||||||
know more about what I do, you can check out "Stuff I do!" from the main
|
|
||||||
page, and "Support Me?" if you wanna toss me some funds!`,
|
|
||||||
src: "/images/alexis_shrug.png",
|
|
||||||
alt: "Alexis shrugging",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is where I put my server specifications
|
|
||||||
|
|
||||||
export const SERVERS = {
|
|
||||||
"Intel NUC": {
|
|
||||||
model: "8i5BEH",
|
|
||||||
cpu: "Intel i5 8529U eight-core @2.3-3.8Ghz",
|
|
||||||
gpu: "Intel Iris Plus Graphics 655",
|
|
||||||
ram: "16 Gb @2400Mhz",
|
|
||||||
os: "Ubuntu Server 20.04",
|
|
||||||
},
|
|
||||||
"Raspberry Pi 4 (x2)": {
|
|
||||||
model: "B Rev 1.4",
|
|
||||||
cpu: "BCM2835 four-core @1.5Ghz",
|
|
||||||
gpu: "N/A",
|
|
||||||
ram: "8 Gb",
|
|
||||||
os: "Ubuntu Server 20.04",
|
|
||||||
},
|
|
||||||
"ASUS MINIPC": {
|
|
||||||
model: "PB50 0601",
|
|
||||||
cpu: "AMD Ryzen 5 3550H eight-core @2.1-3.7GHz",
|
|
||||||
gpu: "AMD Radeon Vega 8 Graphics",
|
|
||||||
ram: "32 Gb",
|
|
||||||
os: "Ubuntu Server 20.10",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// An object listing the different stuff I do
|
|
||||||
|
|
||||||
export const PROJECTS = {
|
|
||||||
Services: {
|
|
||||||
url: "/projects/services",
|
|
||||||
src: "/emoji/crt_blue_screen.svg",
|
|
||||||
alt: "A CRT blue screen emoji",
|
|
||||||
description: `Here is a list of some of the services I host.
|
|
||||||
Some of them, because a few I keep to just myself.`,
|
|
||||||
},
|
|
||||||
Streaming: {
|
|
||||||
url: "/projects/streaming",
|
|
||||||
src: "/emoji/twitch-logo.png",
|
|
||||||
alt: "Twitch logo",
|
|
||||||
description: `I stream regularly now! Mostly Beat Saber workouts.
|
|
||||||
If you're interested in that, here are some associated links!`,
|
|
||||||
},
|
|
||||||
Poetry: {
|
|
||||||
url: "https://write.as/a-letter-to-the-void",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/pen.svg",
|
|
||||||
alt: "Pen emoji",
|
|
||||||
description: `Sometimes, I write poetry. It's not always the
|
|
||||||
happiest, but I am proud of it. It would mean a lot to me if
|
|
||||||
you took a look!`,
|
|
||||||
},
|
|
||||||
Blog: {
|
|
||||||
url: "https://werefox.dev",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/page_with_pencil.svg",
|
|
||||||
alt: "Paper with a pencil emoji",
|
|
||||||
description: `I don't update it too often, but I do also maintain
|
|
||||||
a blog! You can follow it to keep up with what I'm doing as well!`,
|
|
||||||
},
|
|
||||||
Programming: {
|
|
||||||
url: "https://gitea.werefox.dev/shadow8t4",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/laptop.svg",
|
|
||||||
alt: "Laptop emoji",
|
|
||||||
description: `Much like this site, sometimes I program things!
|
|
||||||
Gotta at least try and put that Comp. Sci. degree to good use!`,
|
|
||||||
},
|
|
||||||
"Non-public Stuff": {
|
|
||||||
url: "/projects/private",
|
|
||||||
src: "/emoji/no_entry.svg",
|
|
||||||
alt: "No entry emoji",
|
|
||||||
description: `Here are some other things that I host for myself,
|
|
||||||
some of these can be accessed on the internet, but I only give
|
|
||||||
myself login access, and I have no plans on giving access to the
|
|
||||||
public.`,
|
|
||||||
},
|
|
||||||
"Other Stuff": {
|
|
||||||
url: "/projects/other",
|
|
||||||
src: "/emoji/asterisk.svg",
|
|
||||||
alt: "Asterisk emoji",
|
|
||||||
description: `Here are just some other little things I've done
|
|
||||||
that don't really fit in any specific category.`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// An object listing the services I host
|
|
||||||
|
|
||||||
export const SERVICES = {
|
|
||||||
Mastodon: {
|
|
||||||
url: "https://masto.werefox.dev/about/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/mastodon-logo.png",
|
|
||||||
alt: "The Mastodon logo",
|
|
||||||
description: `Mastodon is an online, self-hosted social media, and social networking service.
|
|
||||||
It allows anyone to host their own server node in the network, and its various separately
|
|
||||||
operated user bases are federated across many different servers.`,
|
|
||||||
},
|
|
||||||
Pinafore: {
|
|
||||||
url: "https://pina.werefox.dev/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/pinafore_logo.svg",
|
|
||||||
alt: "The Pinafore logo",
|
|
||||||
description: `An alternative web client for Mastodon, focused on speed and simplicity.`,
|
|
||||||
},
|
|
||||||
Halcyon: {
|
|
||||||
url: "https://halcyon.werefox.dev/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/halcyon_logo.png",
|
|
||||||
alt: "The Halcyon logo",
|
|
||||||
description: `Halcyon is standard Twitter like client of Mastodon, And you can use it just
|
|
||||||
by login to your instance. Let's Toot like a tweet.`,
|
|
||||||
},
|
|
||||||
Brutaldon: {
|
|
||||||
url: "https://brutal.werefox.dev/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/brutaldon_logo.png",
|
|
||||||
alt: "The Brutaldon logo",
|
|
||||||
description: `Brutaldon is a brutalist, Web 1.0 web interface for Mastodon and Pleroma.`,
|
|
||||||
},
|
|
||||||
PeerTube: {
|
|
||||||
url: "https://vid.werefox.dev/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/peertube_logo.svg",
|
|
||||||
alt: "The PeerTube logo",
|
|
||||||
description: `PeerTube is a free and open-source, decentralized, federated video platform
|
|
||||||
powered by ActivityPub and WebTorrent, that uses peer-to-peer technology to reduce load on
|
|
||||||
individual servers when viewing videos.`,
|
|
||||||
},
|
|
||||||
Element: {
|
|
||||||
url: "https://elem.werefox.dev/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/element_logo.svg",
|
|
||||||
alt: "The Element logo",
|
|
||||||
description: `Element (previously Riot) is an all-in-one secure chat app for teams,
|
|
||||||
friends and organisations. Keeps conversations in your control, safe from data-mining
|
|
||||||
and ads. Talk to everyone through the open global Matrix network, protected by proper
|
|
||||||
end-to-end encryption. (additionally, I host a Matrix server at matrix.werefox.dev)`,
|
|
||||||
},
|
|
||||||
Gitea: {
|
|
||||||
url: "https://gitea.werefox.dev/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/gitea_logo.svg",
|
|
||||||
alt: "The Gitea logo",
|
|
||||||
description: `A painless self-hosted Git service. Gitea is a community managed
|
|
||||||
lightweight code hosting solution written in Go. It is published under the MIT license.`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// An object listing some links related to my streaming
|
|
||||||
|
|
||||||
export const STREAMING = {
|
|
||||||
Twitch: {
|
|
||||||
url: "https://twitch.tv/alexis_werefox",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/twitch-logo.png",
|
|
||||||
alt: "The Twtich logo",
|
|
||||||
description: `Here's a link to my Twitch channel! That's where I do my
|
|
||||||
streams currently. I've been idly contemplating Owncast at some point, but at the
|
|
||||||
moment with my current setup, it isn't really feasible, unfortunately.`,
|
|
||||||
},
|
|
||||||
PeerTube: {
|
|
||||||
url: "https://vid.werefox.dev/videos/watch/playlist/6a6f95c2-30c7-4163-a3ee-ad5dc5abefcf",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/peertube_logo.svg",
|
|
||||||
alt: "The PeerTube logo",
|
|
||||||
description: `My personal PeerTube instance is where I upload all my recordings (VODs).
|
|
||||||
If you ever miss a stream and wanna see what ya missed, they're always uploaded here!
|
|
||||||
This link will take you to a playlist where I put all of the recordings in order.`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// An object listing the services I host for myself
|
|
||||||
|
|
||||||
export const PRIVATE = {
|
|
||||||
"Pi-hole": {
|
|
||||||
url: "https://pi-hole.net/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/pi_hole_logo.svg",
|
|
||||||
alt: "The Pi-hole logo",
|
|
||||||
description: `Pi-hole is a Linux network-level advertisement and Internet tracker blocking
|
|
||||||
application which acts as a DNS sinkhole and optionally a DHCP server, intended for use on
|
|
||||||
a private network. It is designed for use on embedded devices with network capability, such
|
|
||||||
as the Raspberry Pi, but it can be used on other machines running Linux, including cloud
|
|
||||||
implementations.`,
|
|
||||||
},
|
|
||||||
Wireguard: {
|
|
||||||
url: "https://www.wireguard.com/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/wireguard_logo.png",
|
|
||||||
alt: "The Wiregaurd logo",
|
|
||||||
description: `WireGuard is a communication protocol and free and open-source software that
|
|
||||||
implements encrypted virtual private networks, and was designed with the goals of ease of
|
|
||||||
use, high speed performance, and low attack surface. It aims for better performance and
|
|
||||||
more power-saving than the IPsec and OpenVPN tunneling protocols. I use this for access
|
|
||||||
to my home network outside of being at home, and for access to #thetubes.`,
|
|
||||||
},
|
|
||||||
Nextcloud: {
|
|
||||||
url: "https://nextcloud.com/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/nextcloud_logo.png",
|
|
||||||
alt: "The Nextcloud logo",
|
|
||||||
description: `Nextcloud is a suite of client-server software for creating and using file
|
|
||||||
hosting services. It is enterprise-ready with comprehensive support options. Free and
|
|
||||||
open-source means that anyone is allowed to install and operate it on their own private
|
|
||||||
server devices.`,
|
|
||||||
},
|
|
||||||
Wikijs: {
|
|
||||||
url: "https://js.wiki/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/wikijs_logo.svg",
|
|
||||||
alt: "The Wiki.js logo",
|
|
||||||
description: `A modern and powerful wiki app built on Node.js`,
|
|
||||||
},
|
|
||||||
Navidrome: {
|
|
||||||
url: "https://github.com/navidrome/navidrome",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/navidrome_logo.png",
|
|
||||||
alt: "The Navidrome logo",
|
|
||||||
description: `🎧☁️ Navidrome is a Modern Music Server and Streamer compatible with Subsonic/Airsonic`,
|
|
||||||
},
|
|
||||||
Kanboard: {
|
|
||||||
url: "https://kanboard.org/",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/kanboard_logo.svg",
|
|
||||||
alt: "The Kanboard logo",
|
|
||||||
description: `Kanboard is project management software that focuses on the Kanban methodology.`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// An object listing some other stuff I do that doesn't really fit neatly anywhere else
|
|
||||||
|
|
||||||
export const OTHER = {
|
|
||||||
"Valentine's Day Letter": {
|
|
||||||
url: "https://letter.werefox.dev",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/red_heart.svg",
|
|
||||||
alt: "Red heart emoji",
|
|
||||||
description: `Here's a little treat I put together for Valentine's Day one year, and I decided
|
|
||||||
to just keep it up all year. Feel free to take a look if you ever need a little pick-me-up. 💙`,
|
|
||||||
},
|
|
||||||
Music: {
|
|
||||||
url: "https://soundcloud.com/alexis-werefox",
|
|
||||||
new_tab: true,
|
|
||||||
src: "/emoji/studio_microphone.svg",
|
|
||||||
alt: "Microphone emoji",
|
|
||||||
description: `*Nervous sweating* Heh! Sometimes I write some music!? You're free to take a
|
|
||||||
listen if you want! Let me know what you think! It's usually based on my poetry.`,
|
|
||||||
},
|
|
||||||
};
|
|
@ -1,8 +1,26 @@
|
|||||||
import BasicPage from "../../components/basic-page";
|
import BasicPage from "../../components/basic-page";
|
||||||
import PBlock from "../../components/project-block";
|
import PBlock from "../../components/project-block";
|
||||||
import { PROJECTS } from "../../js/variables";
|
|
||||||
|
|
||||||
export default function Services() {
|
// An object listing pages folks can visit
|
||||||
|
export async function getStaticProps() {
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
let PROJECTS = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
let fileContent = fs.readFileSync("./data/projects.yml", "utf8");
|
||||||
|
PROJECTS = yaml.load(fileContent);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
props: {
|
||||||
|
PROJECTS,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Services({ PROJECTS }) {
|
||||||
return (
|
return (
|
||||||
<BasicPage page_title="Personal Projects" card_title="Some stuff I do!">
|
<BasicPage page_title="Personal Projects" card_title="Some stuff I do!">
|
||||||
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
||||||
|
@ -1,8 +1,26 @@
|
|||||||
import BasicPage from "../../../components/basic-page";
|
import BasicPage from "../../../components/basic-page";
|
||||||
import PBlock from "../../../components/project-block";
|
import PBlock from "../../../components/project-block";
|
||||||
import { OTHER } from "../../../js/variables";
|
|
||||||
|
|
||||||
export default function Services() {
|
// An object listing pages folks can visit
|
||||||
|
export async function getStaticProps() {
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
let OTHER = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
let fileContent = fs.readFileSync("./data/other.yml", "utf8");
|
||||||
|
OTHER = yaml.load(fileContent);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
props: {
|
||||||
|
OTHER,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Services({ OTHER }) {
|
||||||
return (
|
return (
|
||||||
<BasicPage page_title="Misc Projects" card_title="Some other things I do!">
|
<BasicPage page_title="Misc Projects" card_title="Some other things I do!">
|
||||||
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
||||||
|
@ -1,8 +1,26 @@
|
|||||||
import BasicPage from "../../../components/basic-page";
|
import BasicPage from "../../../components/basic-page";
|
||||||
import PBlock from "../../../components/project-block";
|
import PBlock from "../../../components/project-block";
|
||||||
import { PRIVATE } from "../../../js/variables";
|
|
||||||
|
|
||||||
export default function Services() {
|
// An object listing pages folks can visit
|
||||||
|
export async function getStaticProps() {
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
let PRIVATE = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
let fileContent = fs.readFileSync("./data/private.yml", "utf8");
|
||||||
|
PRIVATE = yaml.load(fileContent);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
props: {
|
||||||
|
PRIVATE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Services({ PRIVATE }) {
|
||||||
return (
|
return (
|
||||||
<BasicPage page_title="Private Services" card_title="Some stuff I host for myself!">
|
<BasicPage page_title="Private Services" card_title="Some stuff I host for myself!">
|
||||||
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
||||||
|
@ -1,8 +1,26 @@
|
|||||||
import BasicPage from "../../../components/basic-page";
|
import BasicPage from "../../../components/basic-page";
|
||||||
import PBlock from "../../../components/project-block";
|
import PBlock from "../../../components/project-block";
|
||||||
import { SERVICES } from "../../../js/variables";
|
|
||||||
|
|
||||||
export default function Services() {
|
// An object listing pages folks can visit
|
||||||
|
export async function getStaticProps() {
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
let SERVICES = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
let fileContent = fs.readFileSync("./data/services.yml", "utf8");
|
||||||
|
SERVICES = yaml.load(fileContent);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
props: {
|
||||||
|
SERVICES,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Services({ SERVICES }) {
|
||||||
return (
|
return (
|
||||||
<BasicPage page_title="Werefox Services" card_title="Services I Host!">
|
<BasicPage page_title="Werefox Services" card_title="Services I Host!">
|
||||||
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
||||||
|
@ -1,8 +1,26 @@
|
|||||||
import BasicPage from "../../../components/basic-page";
|
import BasicPage from "../../../components/basic-page";
|
||||||
import PBlock from "../../../components/project-block";
|
import PBlock from "../../../components/project-block";
|
||||||
import { STREAMING } from "../../../js/variables";
|
|
||||||
|
|
||||||
export default function Services() {
|
// An object listing pages folks can visit
|
||||||
|
export async function getStaticProps() {
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
let STREAMING = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
let fileContent = fs.readFileSync("./data/streaming.yml", "utf8");
|
||||||
|
STREAMING = yaml.load(fileContent);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
props: {
|
||||||
|
STREAMING,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Services({ STREAMING }) {
|
||||||
return (
|
return (
|
||||||
<BasicPage page_title="Streaming Links" card_title="Come watch my streams!">
|
<BasicPage page_title="Streaming Links" card_title="Come watch my streams!">
|
||||||
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
<div className="rounded-lg ring-2 ring-werefox-grey dark:ring-werefox-grey-darker bg-werefox-grey-light dark:bg-werefox-grey">
|
||||||
|
@ -2,11 +2,29 @@ import BasicPage from "../../components/basic-page";
|
|||||||
import WCard from "../../components/werefox-card";
|
import WCard from "../../components/werefox-card";
|
||||||
import SBlock from "../../components/server-block";
|
import SBlock from "../../components/server-block";
|
||||||
|
|
||||||
export default function Servers() {
|
// An object listing pages folks can visit
|
||||||
|
export async function getStaticProps() {
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
let SERVERS = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
let fileContent = fs.readFileSync("./data/servers.yml", "utf8");
|
||||||
|
SERVERS = yaml.load(fileContent);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
props: {
|
||||||
|
SERVERS,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export default function Servers({ SERVERS }) {
|
||||||
return (
|
return (
|
||||||
<BasicPage page_title="Servers" card_title="Here are my server specs!">
|
<BasicPage page_title="Servers" card_title="Here are my server specs!">
|
||||||
<WCard innerText="Servers">
|
<WCard innerText="Servers">
|
||||||
<SBlock />
|
<SBlock servers={SERVERS} />
|
||||||
</WCard>
|
</WCard>
|
||||||
</BasicPage>
|
</BasicPage>
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user