From cec63b729e3c5c879e06cd011b194cab1783146c Mon Sep 17 00:00:00 2001 From: dealjus Date: Sun, 27 Apr 2025 20:43:15 -0700 Subject: [PATCH] Add Homelab Page --- README.md | 2 +- src/components/common/ServiceCard.astro | 19 ++++ src/lib/variables.ts | 1 + src/pages/blog/html-intro.md | 10 +- src/pages/homelab/index.astro | 52 ++++++++++ src/pages/homelab/services.ts | 126 ++++++++++++++++++++++++ 6 files changed, 200 insertions(+), 10 deletions(-) create mode 100644 src/components/common/ServiceCard.astro create mode 100644 src/pages/homelab/index.astro create mode 100644 src/pages/homelab/services.ts diff --git a/README.md b/README.md index 14d9537..687398c 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ My personal website and blog. -Vist the site at https://justin.deal \ No newline at end of file +Visit the site at https://justin.deal \ No newline at end of file diff --git a/src/components/common/ServiceCard.astro b/src/components/common/ServiceCard.astro new file mode 100644 index 0000000..f7d05e2 --- /dev/null +++ b/src/components/common/ServiceCard.astro @@ -0,0 +1,19 @@ +--- +const { name, href, img, alt } = Astro.props; +--- + + + {alt} +

{name}

+
diff --git a/src/lib/variables.ts b/src/lib/variables.ts index 7be82e9..3c13d4e 100644 --- a/src/lib/variables.ts +++ b/src/lib/variables.ts @@ -39,6 +39,7 @@ export const GLOBAL = { home: "/", blog: "/blog", projects: "/projects", + homelab: "/homelab", // about: "/about", // code: "https://code.justin.deal", // videos: "https://www.youtube.com/@justin_deal", diff --git a/src/pages/blog/html-intro.md b/src/pages/blog/html-intro.md index f95260c..a198c1d 100644 --- a/src/pages/blog/html-intro.md +++ b/src/pages/blog/html-intro.md @@ -7,12 +7,4 @@ time: 4 featured: true timestamp: 2024-12-18T02:39:03+00:00 filename: html-intro ---- - -
- {tags.map((tag) => ( - - {tag} - - ))} -
\ No newline at end of file +--- \ No newline at end of file diff --git a/src/pages/homelab/index.astro b/src/pages/homelab/index.astro new file mode 100644 index 0000000..de51974 --- /dev/null +++ b/src/pages/homelab/index.astro @@ -0,0 +1,52 @@ +--- +import { GLOBAL } from "../../lib/variables"; +import Layout from "../../layouts/Layout.astro"; +import Section from "../../components/common/Section.astro"; +import ServiceCard from "../../components/common/ServiceCard.astro"; +import { services } from "./services.ts"; +--- + + + + {GLOBAL.username} • {GLOBAL.shortDescription} + + + + + + + + + + + + + + +
+
+

Homelab

+
+ + {Object.entries(services).map(([category, apps]) => ( +
+

{category}

+
+ {apps.length > 0 ? ( + apps.map(app => ( + + )) + ) : ( +

Coming soon...

+ )} +
+
+ ))} +
+
diff --git a/src/pages/homelab/services.ts b/src/pages/homelab/services.ts new file mode 100644 index 0000000..395d0ec --- /dev/null +++ b/src/pages/homelab/services.ts @@ -0,0 +1,126 @@ +export const services = { + Websites: [ + { + name: "https://justin.deal", + link: "https://justin.deal", + icon: "/public/pixel_avatar.png", + alt: "Personal Website" + } + ], + Utilities: [ + { + name: "Silverbullet", + link: "https://notes.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/silverbullet.png", + alt: "Silverbullet" + }, + { + name: "Vikunja", + link: "https://todo.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/vikunja.svg", + alt: "Vikunja" + }, + { + name: "Actual", + link: "https://budget.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/actual-budget.svg", + alt: "Actual" + }, + { + name: "Searxng", + link: "https://search.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/searxng.svg", + alt: "Searxng" + }, + { + name: "TeslaMate", + link: "https://tesla.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/teslamate.svg", + alt: "TeslaMate" + }, + { + name: "BaiKal", + link: "https://dav.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/baikal.png", + alt: "BaiKal" + }, + { + name: "Cryptpad", + link: "https://docs.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/cryptpad.svg", + alt: "Cryptpad" + } + ], + Development: [ + { + name: "Gitea", + link: "https://code.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/gitea.svg", + alt: "Gitea" + }, + { + name: "OpenGist", + link: "https://snippets.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/opengist.svg", + alt: "OpenGist" + }, + { + name: "IT-Tools", + link: "https://tools.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/it-tools.svg", + alt: "IT-Tools" + } + ], + Media: [ + { + name: "Jellyfin", + link: "https://watch.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/jellyfin.svg", + alt: "Jellyfin" + }, + { + name: "Calibre-Web", + link: "https://books.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/calibre-web.svg", + alt: "Calibre-Web" + } + ], + Infrastructure: [ + { + name: "Pi-hole", + link: "https://pihole.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/pi-hole.svg", + alt: "Pi-hole" + }, + { + name: "Ntfy", + link: "https://ntfy.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/ntfy.svg", + alt: "Ntfy" + }, + { + name: "Vaultwarden", + link: "https://passwords.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/vaultwarden.svg", + alt: "Vaultwarden" + }, + { + name: "Uptime Kuma", + link: "https://status.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/uptime-kuma.svg", + alt: "Uptime Kuma" + }, + { + name: "Authentik", + link: "https://auth.justin.deal", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/authentik.svg", + alt: "Authentik" + }, + { + name: "Traefik", + link: "https://proxy.justin.deal:8080", + icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/traefik.svg", + alt: "Traefik" + } + ] + }; \ No newline at end of file