diff --git a/juntekim_frontend/app/SelfHosted/page.tsx b/juntekim_frontend/app/SelfHosted/page.tsx
new file mode 100644
index 0000000..59066d6
--- /dev/null
+++ b/juntekim_frontend/app/SelfHosted/page.tsx
@@ -0,0 +1,153 @@
+const services = [
+ {
+ name: "Ollama",
+ description: "Local LLM server powering my AI experiments",
+ url: "https://ollama.juntekim.com",
+ icon: "๐ง ",
+ },
+ {
+ name: "Uptime Kuma",
+ description: "Service monitoring for my homelab and projects",
+ url: "https://uptime.kuma.juntekim.com",
+ icon: "๐ข",
+ },
+ {
+ name: "n8n",
+ description: "Automation workflows I run for small tasks and integrations",
+ url: "https://n8n.juntekim.com",
+ icon: "โ๏ธ",
+ },
+ {
+ name: "Home Assistant",
+ description: "Home automation hub for devices and sensors",
+ url: "https://ha.juntekim.com",
+ icon: "๐ ",
+ },
+ {
+ name: "pgAdmin",
+ description: "Web interface I use to manage PostgreSQL databases",
+ url: "https://pgadmin.juntekim.com",
+ icon: "๐๏ธ",
+ },
+ {
+ name: "DBeaver",
+ description: "Another Web interface I use to manage PostgreSQL databases. - Deciding which one I prefer",
+ url: "https://dbeaver.juntekim.com",
+ icon: "๐ฟ๏ธ",
+ },
+ {
+ name: "Monica",
+ description: "Personal CRM to keep track of relationships",
+ url: "https://crm.juntekim.com",
+ icon: "๐",
+ },
+ {
+ name: "Tandoor Recipes",
+ description: "Recipe manager I use for cooking",
+ url: "https://mealcraft.com",
+ icon: "๐ณ",
+ },
+ {
+ name: "JS Paint",
+ description: "A nostalgic browser-based MS Paint clone",
+ url: "https://jspaint.juntekim.com",
+ icon: "๐จ",
+ },
+ {
+ name: "Exercise Tracker",
+ description: "Workout tracking powered by wger",
+ url: "https://exercise.juntekim.com",
+ icon: "๐ช",
+ },
+ {
+ "name": "Code Server",
+ "description": "VS Code running on my server so I can code from anywhere",
+ "icon": "๐ป"
+ },
+ {
+ "name": "Whoami",
+ "description": "Tiny test service I use to debug Traefik routing",
+ "url": "https://whoami.mealcraft.com/",
+ "icon": "๐งช"
+ },
+ {
+ "name": "PDF Tools",
+ "description": "Simple tools I host for generating and working with PDFs",
+ "url": "https://pdf.juntekim.com",
+ "icon": "๐"
+ },
+ {
+ "name": "Stripe โ Invoice",
+ "description": "A tool I built to automatically create Xero invoices from Stripe payments",
+ "url": "https://stripetoinvoice.com",
+ "icon": "๐ณ"
+ },
+ {
+ name: "My Website",
+ description: "Main personal website showcasing projects and experiments",
+ url: "https://juntekim.com",
+ icon: "๐"
+ },
+ {
+ name: "Databasus",
+ description: "Automated sql-db backups to AWS S3",
+ url: "https://databasus.juntekim.com/",
+ icon: "๐๏ธ"
+ },
+ {
+ name: "Traefik Dashboard",
+ description: "Dashboard for monitoring and managing Traefik reverse proxy",
+ url: "https://traefik.mealcraft.com/dashboard/",
+ icon: "๐"
+ },
+
+];
+
+export default function HomelabPage() {
+ return (
+
+
+ ๐ฅ๏ธ My Self-Hosted Stack
+
+
+
+ These are tools I run in my personal homelab โ a small server
+ I manage myself to experiment with technology and host useful services.
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/juntekim_frontend/app/Youtube/my_editing_setup/page.tsx b/juntekim_frontend/app/Youtube/my_editing_setup/page.tsx
deleted file mode 100644
index 1bbf3ca..0000000
--- a/juntekim_frontend/app/Youtube/my_editing_setup/page.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import fs from "fs";
-import path from "path";
-import MarkdownRenderer from "../../components/MardownRenderer";
-
-export default function YoutubePage() {
- const filePath = path.join(process.cwd(), "app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/script.md");
- const markdown = fs.readFileSync(filePath, "utf8");
-
- return (
-
-
-
- );
-}
\ No newline at end of file
diff --git a/juntekim_frontend/app/Youtube/my_editing_setup/script.md b/juntekim_frontend/app/Youtube/my_editing_setup/script.md
deleted file mode 100644
index 4617f08..0000000
--- a/juntekim_frontend/app/Youtube/my_editing_setup/script.md
+++ /dev/null
@@ -1 +0,0 @@
-my editing_set_up requires one windows computer so i can carry on using one desk
\ No newline at end of file
diff --git a/juntekim_frontend/app/Youtube/my_new_dev_setup/page.tsx b/juntekim_frontend/app/Youtube/my_new_dev_setup/page.tsx
deleted file mode 100644
index 1bbf3ca..0000000
--- a/juntekim_frontend/app/Youtube/my_new_dev_setup/page.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import fs from "fs";
-import path from "path";
-import MarkdownRenderer from "../../components/MardownRenderer";
-
-export default function YoutubePage() {
- const filePath = path.join(process.cwd(), "app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/script.md");
- const markdown = fs.readFileSync(filePath, "utf8");
-
- return (
-
-
-
- );
-}
\ No newline at end of file
diff --git a/juntekim_frontend/app/Youtube/my_new_dev_setup/script.md b/juntekim_frontend/app/Youtube/my_new_dev_setup/script.md
deleted file mode 100644
index 85e896e..0000000
--- a/juntekim_frontend/app/Youtube/my_new_dev_setup/script.md
+++ /dev/null
@@ -1,2 +0,0 @@
-Write about my dev set up that uses ubunutu as the devcontainer, i just ssh
-
diff --git a/juntekim_frontend/app/Youtube/page.tsx b/juntekim_frontend/app/Youtube/page.tsx
deleted file mode 100644
index 0dfd1eb..0000000
--- a/juntekim_frontend/app/Youtube/page.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import fs from "fs";
-import path from "path";
-import MarkdownRenderer from "../components/MardownRenderer";
-
-export default function YoutubePage() {
- const filePath = path.join(process.cwd(), "app/Youtube/todo.md");
- const markdown = fs.readFileSync(filePath, "utf8");
-
- return (
-
-
-
- );
-}
diff --git a/juntekim_frontend/app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/page.tsx b/juntekim_frontend/app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/page.tsx
deleted file mode 100644
index 1bbf3ca..0000000
--- a/juntekim_frontend/app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/page.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import fs from "fs";
-import path from "path";
-import MarkdownRenderer from "../../components/MardownRenderer";
-
-export default function YoutubePage() {
- const filePath = path.join(process.cwd(), "app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/script.md");
- const markdown = fs.readFileSync(filePath, "utf8");
-
- return (
-
-
-
- );
-}
\ No newline at end of file
diff --git a/juntekim_frontend/app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/script.md b/juntekim_frontend/app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/script.md
deleted file mode 100644
index d083b89..0000000
--- a/juntekim_frontend/app/Youtube/robot_vaccume_only_starts_when_I_leave_the_house/script.md
+++ /dev/null
@@ -1 +0,0 @@
-A rought script please to make a youtube video...
\ No newline at end of file
diff --git a/juntekim_frontend/app/Youtube/todo.md b/juntekim_frontend/app/Youtube/todo.md
deleted file mode 100644
index 979fa70..0000000
--- a/juntekim_frontend/app/Youtube/todo.md
+++ /dev/null
@@ -1 +0,0 @@
-- Make youtube video for s7 triggering when I leave the house
\ No newline at end of file