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 @@