import type { MetaFunction } from "@remix-run/node";
import { useEffect, useState } from "react";
import { json } from "@remix-run/node";
import { useLoaderData, Link } from "@remix-run/react";
export const meta: MetaFunction = () => {
return [
{ title: "Paul W." },
{ name: "description", content: "This is my Profile!" },
{
name: "keywords",
content: "Paul W, Paul W Portfolio, Paul W Profile, Paul W Remix",
},
];
};
export default function Index() {
const [status, setStatus] = useState("");
const [border_status, setBorderStatus] = useState("border-gray-700");
useEffect(() => {
if (status === "online") {
setBorderStatus("border-green-500");
} else if (status === "offline") {
setBorderStatus("border-gray-500");
} else if (status === "dnd") {
setBorderStatus("border-red-600");
} else if (status === "idle") {
setBorderStatus("border-yellow-500");
} else {
setBorderStatus("border-gray-700");
}
}, [status]);
useEffect(() => {
fetch(
"https://shsf-api.reversed.dev/api/exec/6/c084ec4a-1b20-491e-ab2e-67c5fa8881e6"
)
.then((res) => res.json())
.then((data) => {
setStatus(data.status);
})
.catch((err) => {
console.error(err);
setStatus("offline");
});
}, []);
return (
{/* Hero */}
Hey, I'm Paul!
also known as{" "}
Space
A Self-proclaimed Developer
{/* About Section */}
About Me
Hi! I'm Paul, a
passionate developer from Germany 🇩🇪.
I specialize in JavaScript/TypeScript development, building fun backend systems, experimenting with frontend, and occasionally breaking TypeScript.
I'm a big fan of open-source projects and I hope I can make a small but meaningful impact through my work.
{/* Projects Section */}
Projects
Here are some of my favorite projects. Some are open-source, some are not.
{projects.map((project, index) => (
{project.image && (
)}
{project.name}
{project.description}
))}
{/* Contact */}
Contact
Feel free to reach out to me via Discord or Email. I usually respond quicker to emails.
);
}
const projects: {
name: string;
description: string;
image?: string;
open_source: { link: string } | false;
link: string;
}[] = [
{
name: "BetterNews",
description:
"A news feed where you submit the news.",
image: "https://betternews.app/assets/icon.png",
open_source: false,
link: "https://betternews.app",
},
{
name: "SHSF",
description:
"Self-hostable \"Cloud Functions\" for your own hardware.",
link: "https://github.com/Space-Banane/shsf",
open_source: { link: "https://github.com/Space-Banane/shsf" },
image: "https://cdn.reversed.dev/pictures/shsf/SHSF.png",
},
{
name: "3D Print Card",
description: "Showcase Your 3D Prints Beautifully",
link:"card.peakprinting.top",
image: "https://card.peakprinting.top/icon.png",
open_source: { link: "https://github.com/Space-Banane/imsoprintingit" },
},
{
name: "Lil Cats",
link: "https://cats.reversed.dev",
description: "Follow cats around and feed them. (Made with GPT-4.1 because I wanted to test it)",
image: "https://cats.reversed.dev/lil-cats.png",
open_source: { link: "https://github.com/Space-Banane/lil-cats" },
},
{
name: "Whatsapp-Chat-Analyzer",
description:
"Analyze your Whatsapp chats with ease. Get insights, stats and more.",
image: "https://cdn.reversed.dev/pictures/wca.png",
open_source: { link: "https://github.com/Space-Banane/whatsapp-stats" },
link: "https://whatstat.reversed.dev",
},
{
name: "Free QrCode Generator",
description:
"I love QR codes that DO NOT NEED A REGISTER!!!! (or ones that expire)",
image: "https://cdn.reversed.dev/pictures/qrcode.jpeg",
open_source: { link: "https://github.com/reversed-dev/qr-code-gen" },
link: "https://qr.reversed.dev",
},
{
// Is Twitch streamer live, "Is-live", https://shsf-api.reversed.dev/api/exec/6/22b5d292-ccf1-473b-8838-4db550d6a1e6
name: "Is-Live",
description:
"Is a Twitch streamer live? I don't know, find out!",
image: "https://cdn.reversed.dev/pictures/islive.png",
open_source: { link: "https://github.com/Space-Banane/is-live" },
link: "https://is-live.reversed.dev",
},
];