From 2074a2806a75b82b32937700c6d174696a8356ef Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Thu, 2 Jul 2026 19:35:09 +0200 Subject: [PATCH 1/8] testing addition --- frontend/src/components/About.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/About.tsx b/frontend/src/components/About.tsx index 2218ea5..5ad2c9d 100644 --- a/frontend/src/components/About.tsx +++ b/frontend/src/components/About.tsx @@ -5,7 +5,13 @@ export default function About() { About
-

+

+ Here is some interesting text to start a new commit to new + branch. +

+

+ jjing. +

); From 49520a8ce3b5e97384f45c9792dba4e1872d8937 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Thu, 2 Jul 2026 19:48:53 +0200 Subject: [PATCH 2/8] another addition test --- frontend/src/components/About.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/About.tsx b/frontend/src/components/About.tsx index 5ad2c9d..7bda284 100644 --- a/frontend/src/components/About.tsx +++ b/frontend/src/components/About.tsx @@ -10,7 +10,7 @@ export default function About() { branch.

- jjing. + jjing. It moves well for now.

From 089a0f3e324d70e42dd6a2464c6e935a6f532678 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Thu, 2 Jul 2026 19:51:17 +0200 Subject: [PATCH 3/8] a commit after jj new to test if I do correctly --- frontend/src/components/About.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/src/components/About.tsx b/frontend/src/components/About.tsx index 7bda284..952ba0c 100644 --- a/frontend/src/components/About.tsx +++ b/frontend/src/components/About.tsx @@ -9,9 +9,6 @@ export default function About() { Here is some interesting text to start a new commit to new branch.

-

- jjing. It moves well for now. -

); From dcb428114c4cf155fcb0d53d1f090ecea4d120d7 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Thu, 2 Jul 2026 23:38:07 +0200 Subject: [PATCH 4/8] Removing test commit changes with jj --- frontend/src/components/About.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/About.tsx b/frontend/src/components/About.tsx index 952ba0c..3a3861f 100644 --- a/frontend/src/components/About.tsx +++ b/frontend/src/components/About.tsx @@ -6,9 +6,9 @@ export default function About() {

- Here is some interesting text to start a new commit to new - branch. +

+

); From d84c8b62e0587a5999e5ce862d0e909a97d4f5bb Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Thu, 2 Jul 2026 23:41:41 +0200 Subject: [PATCH 5/8] Removal of jj commit contents, test commits From e3b9014c024daef07a8e8122e5de4e45faa300ea Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Sun, 5 Jul 2026 15:21:36 +0200 Subject: [PATCH 6/8] feat(about): add Notable Questions, fix grammar, blockquote formatting --- frontend/src/components/About.tsx | 13 +- .../{ProjectsReadme.tsx => MdProcessor.tsx} | 133 ++++++++++++------ frontend/src/components/Systems.tsx | 8 +- frontend/src/content/about.md | 74 ++++++++++ frontend/src/content/systems.md | 2 + frontend/src/pages/Home.tsx | 4 +- 6 files changed, 182 insertions(+), 52 deletions(-) rename frontend/src/components/{ProjectsReadme.tsx => MdProcessor.tsx} (68%) create mode 100644 frontend/src/content/about.md create mode 100644 frontend/src/content/systems.md diff --git a/frontend/src/components/About.tsx b/frontend/src/components/About.tsx index 3a3861f..0b977a8 100644 --- a/frontend/src/components/About.tsx +++ b/frontend/src/components/About.tsx @@ -1,15 +1,14 @@ -export default function About() { +import { type ReactElement } from "react"; +import MdProcessor from "./MdProcessor"; +import aboutMd from "../content/about.md?raw"; + +export default function About(): ReactElement { return ( <>

About

-
-

- -

-

-
+ ); } diff --git a/frontend/src/components/ProjectsReadme.tsx b/frontend/src/components/MdProcessor.tsx similarity index 68% rename from frontend/src/components/ProjectsReadme.tsx rename to frontend/src/components/MdProcessor.tsx index a927566..46d6ce8 100644 --- a/frontend/src/components/ProjectsReadme.tsx +++ b/frontend/src/components/MdProcessor.tsx @@ -1,4 +1,10 @@ -import { useEffect, useState, useMemo, type ReactElement } from "react"; +import { + useEffect, + useState, + useMemo, + type ComponentPropsWithoutRef, + type ReactElement, +} from "react"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; import rehypeRaw from "rehype-raw"; @@ -56,44 +62,57 @@ const resolveImageSrc = (src: string, base: string | null): string => { return `${base}/${clean}`; }; -const fetchREADME = async (repoUrl: string): Promise => { - try { - const rawUrl = toRawUrl(repoUrl); - const response = await fetch(rawUrl); - - if (!response.ok) { - throw new Error("Failed to fetch README"); - } - - return await response.text(); - } catch (error) { - console.error(error); - return "Error fetching README. Make sure the URL points to a raw markdown file."; - } -}; - -interface ProjectsReadmeProps { - repoUrl: string; +interface MdProcessorProps { + content?: string; + repoUrl?: string; } -export default function ProjectsReadme({ +export default function MdProcessor({ + content: directContent, repoUrl, -}: ProjectsReadmeProps): ReactElement { - const [readmeContent, setReadmeContent] = useState(""); - const [isLoading, setIsLoading] = useState(true); +}: MdProcessorProps): ReactElement { + const useRemote = !directContent && !!repoUrl; - const base = useMemo(() => getRepoRawBase(repoUrl), [repoUrl]); + const [fetchState, setFetchState] = useState<{ + url: string; + content: string; + }>({ url: "", content: "" }); useEffect(() => { + if (!useRemote || !repoUrl) return; + + const fetchREADME = async (url: string): Promise => { + try { + const rawUrl = toRawUrl(url); + const response = await fetch(rawUrl); + + if (!response.ok) { + throw new Error("Failed to fetch README"); + } + + return await response.text(); + } catch (error) { + console.error(error); + return "Error fetching README. Make sure the URL points to a raw markdown file."; + } + }; + fetchREADME(repoUrl).then((content) => { - setReadmeContent(content); - setIsLoading(false); + setFetchState({ url: repoUrl, content }); }); - }, [repoUrl]); + }, [useRemote, repoUrl]); + + const base = useMemo(() => { + if (directContent) return null; + return repoUrl ? getRepoRawBase(repoUrl) : null; + }, [directContent, repoUrl]); + + const loading = useRemote && fetchState.url !== repoUrl; + const displayContent = directContent ?? fetchState.content; return (
- {isLoading ? ( + {loading ? (
@@ -109,7 +128,7 @@ export default function ProjectsReadme({ className, children, ...props - }: React.ComponentPropsWithoutRef<"code">): ReactElement { + }: ComponentPropsWithoutRef<"code">): ReactElement { const isBlock = className || (typeof children === "string" && @@ -139,7 +158,7 @@ export default function ProjectsReadme({ pre({ children, ...props - }: React.ComponentPropsWithoutRef<"pre">): ReactElement { + }: ComponentPropsWithoutRef<"pre">): ReactElement { return (
): ReactElement {
+                            }: ComponentPropsWithoutRef<"h1">): ReactElement {
                                 return (
                                     

{children} @@ -162,7 +181,7 @@ export default function ProjectsReadme({ h2({ children, - }: React.ComponentPropsWithoutRef<"h2">): ReactElement { + }: ComponentPropsWithoutRef<"h2">): ReactElement { return (

{children} @@ -172,7 +191,7 @@ export default function ProjectsReadme({ h3({ children, - }: React.ComponentPropsWithoutRef<"h3">): ReactElement { + }: ComponentPropsWithoutRef<"h3">): ReactElement { return (

{children} @@ -182,7 +201,7 @@ export default function ProjectsReadme({ p({ children, - }: React.ComponentPropsWithoutRef<"p">): ReactElement { + }: ComponentPropsWithoutRef<"p">): ReactElement { return (

{children} @@ -192,7 +211,7 @@ export default function ProjectsReadme({ ul({ children, - }: React.ComponentPropsWithoutRef<"ul">): ReactElement { + }: ComponentPropsWithoutRef<"ul">): ReactElement { return (

)} diff --git a/frontend/src/components/Systems.tsx b/frontend/src/components/Systems.tsx index 668879c..01d54a9 100644 --- a/frontend/src/components/Systems.tsx +++ b/frontend/src/components/Systems.tsx @@ -1,10 +1,14 @@ -export default function Systems() { +import { type ReactElement } from "react"; +import MdProcessor from "./MdProcessor"; +import systemsMd from "../content/systems.md?raw"; + +export default function Systems(): ReactElement { return ( <>

Systems

-
+ ); } diff --git a/frontend/src/content/about.md b/frontend/src/content/about.md new file mode 100644 index 0000000..fb9f05e --- /dev/null +++ b/frontend/src/content/about.md @@ -0,0 +1,74 @@ +## Background + +Currently a software engineering student. Have primarily done full-stack web development, but my interest has grown toward backend services using low-level programming languages. I am still learning as I go. + +## Motivation + +I value security, privacy, human health, and combating climate change. Technology can achieve all of this today to some extent. Unfortunately, we are in times of misinformation, Big Tech taking over, and science denial. In a world becoming seemingly more complex, people are overwhelmed and feel like they have no energy left to assess decisions. People do not hesitate to purchase the newest iPhone, without thinking about whether they truly need the newest device. Or they will install whatever application without thinking about possible consequences: what information is shared and sold about them, or they walk right into getting hacked and suffer financial losses and stress. Large corporations take advantage of people who do not understand such concepts; it has become all about consuming the next new thing to the detriment of people. + +I wish to educate myself in technology primarily to be able to combat anti-intellectualism and offer free software to improve people's lives respecting human rights. + +## Interests + +My interests are primarily projects aiming to solve emerging problems, or ones that significantly improve development experience. I believe that software should be free and open-source. + +### Projects + +A few notable projects I am interested in: + +- GrapheneOS +- Zig +- Hyprland +- Linux +- Osu! +- Jujutsu + +## Contact + +You can contact me via **Email: aramjonghu@tutamail.com** and on **XMPP: aramjonghu@conversations.im**. + +## Notable Questions + +**Note that I am fully open to being wrong on some of the claims below.** + +> **Q:** Why "AramJonghu"? +> +> **A:** I played on a Minecraft server with friends and friends of friends back in the 1.5 days. One of them would often say or type "Aram Jonguh" — Jonguh being akin to "bro" in Dutch, so it says "Aram Bro". Liking the name, my IGN became AramJonghu. It is spelled incorrectly, which I did not correct at the time. It has persisted ever since. + +> **Q:** What is my setup? +> +> **A:** I currently use Artix with OpenRC on Hyprland. I use neovim in the Ghostty terminal (with tmux). My server runs Alpine with OpenRC. + +> **Q:** Are you specifically avoiding SystemD? +> +> **A:** Yes, but it is not due to the infamous pull request. The concern is not about systemd applying age verification. Rather, I want to explore other options in case SystemD becomes compromised, so to speak. My main reason for switching is to have an init system be an init system first and foremost. A smaller codebase makes it easier to manage. +> +> The people behind SystemD seem passionate and oppose dystopian laws. I hope that when laws cross the line, real opposition will occur. + +> **Q:** What languages do you actually use? +> +> **A:** Mainly use JavaScript/TypeScript (React) and Java as this is what I learned at school. Not a fan of either language. + +> **Q:** What languages are you learning? +> +> **A:** Currently in the middle of learning Rust and Zig. I especially like the direction of Zig, but due to higher demand for Rust, I will be focusing on Rust first. I have not written any Rust yet. I have written a small Zig program, however. + +> **Q:** Are you on LinkedIn? +> +> **A:** No. I quit in 2025, understanding that LinkedIn has been a platform to curate a fake image in a race for relevance. It is also owned by Microsoft, which is another deterrent. In my eyes, it is slop. + +> **Q:** Why do you have no personal projects on GitHub? +> +> **A:** I dropped GitHub because of concerns that my projects would be trained on AI. On top of that, the platform's uptime is becoming increasingly spotty. There have been a few incidents such as projects losing critical progress due to data corruption in pull requests. Worst of all, banning developers who offer critical contributions from GitHub (and sometimes also on GitLab). +> +> Although my projects are not anything special today, in preparation, I host my own instance of Forgejo. I also wish that none of my projects be used or shared on proprietary platforms. They do not respect developers, so we should not respect their service either. For work, I will have to use GitHub, which is the only use case GitHub will have for me. + +> **Q:** Do you support AI? +> +> **A:** Generally, no. I believe AI (LLMs) has done more harm than good. From data collection, climate harm, theft of data and art, and the damage it has done to people who misuse it to skip proper learning, and the billion-dollar circlejerk investments that are actively killing personal computing. The technology itself is interesting and I see real value for specific use cases such as in the health sector to better diagnose patients, improve translation accuracy, or improve development experience. This should not, however, outweigh the many downsides. +> +> I try to use AI as sparingly as possible, but I also catch myself being reliant more often than not on some days. In the end, AI should be used as a tool to assist us. + +> **Q:** Are billionaires evil? +> +> **A:** Yes. diff --git a/frontend/src/content/systems.md b/frontend/src/content/systems.md new file mode 100644 index 0000000..e8f8c20 --- /dev/null +++ b/frontend/src/content/systems.md @@ -0,0 +1,2 @@ +## Infrastructure + diff --git a/frontend/src/pages/Home.tsx b/frontend/src/pages/Home.tsx index d851f81..c529b57 100644 --- a/frontend/src/pages/Home.tsx +++ b/frontend/src/pages/Home.tsx @@ -1,5 +1,5 @@ import { useState, type ReactElement } from "react"; -import ProjectsReadme from "../components/ProjectsReadme"; +import MdProcessor from "../components/MdProcessor"; import Systems from "../components/Systems"; import About from "../components/About"; @@ -68,7 +68,7 @@ export default function Home(): ReactElement { Next ▶︎
- + ), }, From 890741335e51fea3e6503e1e3949b0bd5ee2da54 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Sun, 5 Jul 2026 19:36:19 +0200 Subject: [PATCH 7/8] update(CI): workflow updated for PR's --- .forgejo/workflows/ci.yml | 37 +++++++++++++++++++++++++++++++++ .forgejo/workflows/format.yml | 25 ---------------------- frontend/src/content/systems.md | 2 -- 3 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 .forgejo/workflows/ci.yml delete mode 100644 .forgejo/workflows/format.yml diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml new file mode 100644 index 0000000..4c89a38 --- /dev/null +++ b/.forgejo/workflows/ci.yml @@ -0,0 +1,37 @@ +name: Format, lint, typecheck & build + +on: + pull_request: + branches: ["master"] + +jobs: + check: + runs-on: alpine + container: node:lts-alpine + + steps: + - name: Install dependencies + run: apk add --no-cache git + + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Install frontend deps + working-directory: frontend + run: npm install + + - name: Run eslint check + working-directory: frontend + run: npm run lint + + - name: Run typecheck + working-directory: frontend + run: npm run typecheck + + - name: Run Prettier check + working-directory: frontend + run: npx prettier --check . + + - name: Run build check + working-directory: frontend + run: npm run build diff --git a/.forgejo/workflows/format.yml b/.forgejo/workflows/format.yml deleted file mode 100644 index 3097881..0000000 --- a/.forgejo/workflows/format.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Format frontend with Prettier - -on: - push: - branches: ["master"] - -jobs: - format: - runs-on: alpine - container: node:26-alpine - - steps: - - name: Install dependencies - run: apk add --no-cache git - - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Install frontend deps - working-directory: frontend - run: npm install - - - name: Run Prettier check - working-directory: frontend - run: npx prettier --check . diff --git a/frontend/src/content/systems.md b/frontend/src/content/systems.md index e8f8c20..e69de29 100644 --- a/frontend/src/content/systems.md +++ b/frontend/src/content/systems.md @@ -1,2 +0,0 @@ -## Infrastructure - From 7482999fb4cbf44d890eed397495924148fc1a75 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Sun, 5 Jul 2026 20:00:03 +0200 Subject: [PATCH 8/8] Adjust(refactor): Refactor systems to current-activity --- .../{Systems.tsx => CurrentActivity.tsx} | 8 ++++---- frontend/src/content/current-activity.md | 7 +++++++ frontend/src/content/systems.md | 0 frontend/src/pages/Home.tsx | 16 ++++------------ 4 files changed, 15 insertions(+), 16 deletions(-) rename frontend/src/components/{Systems.tsx => CurrentActivity.tsx} (51%) create mode 100644 frontend/src/content/current-activity.md delete mode 100644 frontend/src/content/systems.md diff --git a/frontend/src/components/Systems.tsx b/frontend/src/components/CurrentActivity.tsx similarity index 51% rename from frontend/src/components/Systems.tsx rename to frontend/src/components/CurrentActivity.tsx index 01d54a9..0d9978c 100644 --- a/frontend/src/components/Systems.tsx +++ b/frontend/src/components/CurrentActivity.tsx @@ -1,14 +1,14 @@ import { type ReactElement } from "react"; import MdProcessor from "./MdProcessor"; -import systemsMd from "../content/systems.md?raw"; +import currentActivityMd from "../content/current-activity.md?raw"; -export default function Systems(): ReactElement { +export default function CurrentActivity(): ReactElement { return ( <>

- Systems + Current activity

- + ); } diff --git a/frontend/src/content/current-activity.md b/frontend/src/content/current-activity.md new file mode 100644 index 0000000..440f639 --- /dev/null +++ b/frontend/src/content/current-activity.md @@ -0,0 +1,7 @@ +### Language learning + +Currently learning Rust and Zig programming languages. + +### Projects + +Currently no projects planned. diff --git a/frontend/src/content/systems.md b/frontend/src/content/systems.md deleted file mode 100644 index e69de29..0000000 diff --git a/frontend/src/pages/Home.tsx b/frontend/src/pages/Home.tsx index c529b57..b2c429d 100644 --- a/frontend/src/pages/Home.tsx +++ b/frontend/src/pages/Home.tsx @@ -1,6 +1,6 @@ import { useState, type ReactElement } from "react"; import MdProcessor from "../components/MdProcessor"; -import Systems from "../components/Systems"; +import CurrentActivity from "../components/CurrentActivity"; import About from "../components/About"; interface ProjectInfo { @@ -73,11 +73,11 @@ export default function Home(): ReactElement { ), }, { - id: "systems", - title: "Systems", + id: "current-activity", + title: "Current-activity", content: ( <> - + ), }, @@ -98,14 +98,6 @@ export default function Home(): ReactElement {

AramJonghu

-

- Software engineer building systems, services, and - experiments across a self-hosted environment. -

-

- This site acts as a hub for projects, infrastructure, and - personal tooling. -

{sections.map((section) => (