diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c55bff --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# aramjonghu-site + +Personal website and central hub for my projects, systems, and self-hosted services. + +This site is not just a portfolio — it acts as an entry point into a larger ecosystem of applications, infrastructure, and experiments. + +--- + +## Overview + +The site is divided into three conceptual layers: + +### 1. Home + +The homepage provides a high-level overview of who I am and what I work on. +It highlights selected projects and core skills, without listing everything. + +### 2. Header + +The header serves as a navigation layer into my self-hosted infrastructure. +Each entry links to a running instance. + +- Nextcloud — file storage and synchronization +- Navidrome — personal music streaming +- Forgejo — Git hosting and development platform +- SearXNG — privacy-focused search engine +- Stream service — live media platform powered by OvenMediaEngine + OvenPlayer +- Friend’s Gitea instance — external development collaboration + +These services are part of my personal infrastructure and exist outside the portfolio itself. + +### 3. Pages + +Dedicated pages for deeper content: + +- Projects — selected work and builds +- Systems — architecture and self-hosted infrastructure overview +- About — personal background and context +- CV — formal resume (if applicable) + +--- + +## Philosophy + +This site is intentionally minimal and system-oriented. + +Instead of a traditional portfolio, it focuses on: + +- self-hosted infrastructure +- modular services +- curated project visibility +- long-term experimentation + +It evolves alongside my personal development and technical interests. + +--- + +## Stack + +- React +- Vite +- Tailwind CSS +- Catppuccin theme +- Self-hosted backend services (Forgejo, Nextcloud, etc.) + +--- + +## Status + +This site is continuously evolving and serves as both a portfolio and experimental environment. + +Expect structural changes as systems grow. diff --git a/frontend/.vite/deps/_metadata.json b/frontend/.vite/deps/_metadata.json index ee58367..c887548 100644 --- a/frontend/.vite/deps/_metadata.json +++ b/frontend/.vite/deps/_metadata.json @@ -1,8 +1,8 @@ { - "hash": "38d6ee96", - "configHash": "4c0366d0", - "lockfileHash": "e1de79ea", - "browserHash": "9db598fc", - "optimized": {}, - "chunks": {} -} \ No newline at end of file + "hash": "38d6ee96", + "configHash": "4c0366d0", + "lockfileHash": "e1de79ea", + "browserHash": "9db598fc", + "optimized": {}, + "chunks": {} +} diff --git a/frontend/.vite/deps/package.json b/frontend/.vite/deps/package.json index 3dbc1ca..4720025 100644 --- a/frontend/.vite/deps/package.json +++ b/frontend/.vite/deps/package.json @@ -1,3 +1,3 @@ { - "type": "module" + "type": "module" } diff --git a/frontend/README.md b/frontend/README.md deleted file mode 100644 index e16d995..0000000 --- a/frontend/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# React + Vite - -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. - -Currently, two official plugins are available: - -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) - -## React Compiler - -The React Compiler is enabled on this template. See [this documentation](https://react.dev/learn/react-compiler) for more information. - -Note: This will impact Vite dev & build performances. - -## Expanding the ESLint configuration - -If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index 4fa125d..1ced299 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -1,29 +1,29 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' -import { defineConfig, globalIgnores } from 'eslint/config' +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import { defineConfig, globalIgnores } from "eslint/config"; export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{js,jsx}'], - extends: [ - js.configs.recommended, - reactHooks.configs.flat.recommended, - reactRefresh.configs.vite, - ], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - parserOptions: { - ecmaVersion: 'latest', - ecmaFeatures: { jsx: true }, - sourceType: 'module', - }, + globalIgnores(["dist"]), + { + files: ["**/*.{js,jsx}"], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: "latest", + ecmaFeatures: { jsx: true }, + sourceType: "module", + }, + }, + rules: { + "no-unused-vars": ["error", { varsIgnorePattern: "^[A-Z_]" }], + }, }, - rules: { - 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], - }, - }, -]) +]); diff --git a/frontend/index.html b/frontend/index.html index 66d0332..93fdd6b 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,7 +1,11 @@ - + aramjonghu-site diff --git a/frontend/package.json b/frontend/package.json index 983d232..2f19f37 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,33 +1,33 @@ { - "name": "aramjonghu-site", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "@tailwindcss/vite": "^4.2.2", - "react": "^19.2.4", - "react-dom": "^19.2.4", - "tailwindcss": "^4.2.2" - }, - "devDependencies": { - "@babel/core": "^7.29.0", - "@catppuccin/tailwindcss": "^1.0.0", - "@eslint/js": "^9.39.4", - "@rolldown/plugin-babel": "^0.2.2", - "@types/react": "^19.2.14", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.1", - "babel-plugin-react-compiler": "^1.0.0", - "eslint": "^9.39.4", - "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-refresh": "^0.5.2", - "globals": "^17.4.0", - "vite": "^8.0.4" - } + "name": "aramjonghu-site", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@tailwindcss/vite": "^4.2.2", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "tailwindcss": "^4.2.2" + }, + "devDependencies": { + "@babel/core": "^7.29.0", + "@catppuccin/tailwindcss": "^1.0.0", + "@eslint/js": "^9.39.4", + "@rolldown/plugin-babel": "^0.2.2", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "babel-plugin-react-compiler": "^1.0.0", + "eslint": "^9.39.4", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.4.0", + "vite": "^8.0.4" + } } diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg deleted file mode 100644 index 6893eb1..0000000 --- a/frontend/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/public/icons.svg b/frontend/public/icons.svg deleted file mode 100644 index e952219..0000000 --- a/frontend/public/icons.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/src/App.css b/frontend/src/App.css index e1832ec..1900a7f 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,2 +1,14 @@ @import "tailwindcss"; @import "@catppuccin/tailwindcss/macchiato.css"; + +.ui-btn { + @apply text-ctp-text border border-ctp-text rounded px-3 py-1 cursor-pointer transition-colors; +} + +.ui-btn:hover { + @apply bg-ctp-surface0 text-ctp-green border-ctp-green duration-300 ease-in-out; +} + +.ui-btn-active { + @apply bg-ctp-surface0 text-ctp-green border-ctp-green; +} diff --git a/frontend/src/assets/favicon/android-chrome-192x192.png b/frontend/src/assets/favicon/android-chrome-192x192.png new file mode 100644 index 0000000..cd5479d Binary files /dev/null and b/frontend/src/assets/favicon/android-chrome-192x192.png differ diff --git a/frontend/src/assets/favicon/android-chrome-512x512.png b/frontend/src/assets/favicon/android-chrome-512x512.png new file mode 100644 index 0000000..9ce1d7e Binary files /dev/null and b/frontend/src/assets/favicon/android-chrome-512x512.png differ diff --git a/frontend/src/assets/favicon/apple-touch-icon.png b/frontend/src/assets/favicon/apple-touch-icon.png new file mode 100644 index 0000000..f39dce2 Binary files /dev/null and b/frontend/src/assets/favicon/apple-touch-icon.png differ diff --git a/frontend/src/assets/favicon/favicon-16x16.png b/frontend/src/assets/favicon/favicon-16x16.png new file mode 100644 index 0000000..2a7f0ef Binary files /dev/null and b/frontend/src/assets/favicon/favicon-16x16.png differ diff --git a/frontend/src/assets/favicon/favicon-32x32.png b/frontend/src/assets/favicon/favicon-32x32.png new file mode 100644 index 0000000..91eddaf Binary files /dev/null and b/frontend/src/assets/favicon/favicon-32x32.png differ diff --git a/frontend/src/assets/favicon/favicon.ico b/frontend/src/assets/favicon/favicon.ico new file mode 100644 index 0000000..f4e6473 Binary files /dev/null and b/frontend/src/assets/favicon/favicon.ico differ diff --git a/frontend/src/components/Header.jsx b/frontend/src/components/Header.jsx index 23bfcc6..9f0395f 100644 --- a/frontend/src/components/Header.jsx +++ b/frontend/src/components/Header.jsx @@ -9,7 +9,7 @@ export default function Header({ theme }) { { label: "Forgejo Git", url: "https://git.aramjonghu.nl" }, { label: "Stream", url: "https://stream.aramjonghu.nl" }, { label: "SearXNG", url: "https://xng.aramjonghu.nl" }, - { label: "zach-dev gitea", url: "https://git.zach-dev.cc"} + { label: "Gitea zach-dev", url: "https://git.zach-dev.cc" }, ]; const goHome = () => { @@ -30,7 +30,7 @@ export default function Header({ theme }) { {item.label} @@ -38,10 +38,7 @@ export default function Header({ theme }) {
-
diff --git a/frontend/src/components/Layout.jsx b/frontend/src/components/Layout.jsx index e89db2f..3a12144 100644 --- a/frontend/src/components/Layout.jsx +++ b/frontend/src/components/Layout.jsx @@ -6,7 +6,7 @@ export default function Layout({ children }) { const theme = useTheme(); return ( -
+
{children}