commit 6c6218ef3662a806744c76409407600fa91ce1d6 Author: Story Crater Bot <19826264+Riotpiaole@users.noreply.github.com> Date: Tue Aug 18 18:33:49 2026 -0700 (chore) init commit and add tasks diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..d065a06 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "parser": "@typescript-eslint/parser", + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "plugins": ["@typescript-eslint"], + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module", + "jsx": true + }, + "ignorePatterns": ["tsconfig.json", ".next", "node_modules"], + "rules": { + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/triple-slash-reference": "off" + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..425ab4f --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +.next/ +*.log +.DS_Store +.env +.env.local +.env.*.local +.claude \ No newline at end of file diff --git a/IMPLEMENTATION.md b/IMPLEMENTATION.md new file mode 100644 index 0000000..2d89087 --- /dev/null +++ b/IMPLEMENTATION.md @@ -0,0 +1,1348 @@ +# Implementation: Homarr + Portfolio via Terraform + +## Phase 1: Portfolio Site (Local Dev) + +### 1.1 Initialize Next.js project + +```bash +cd ~/workplace/riotpiao +npm init -y +npm install next@15 react@19 react-dom@19 typescript tailwindcss postcss autoprefixer +npx tailwindcss init -p +npx tsc --init +``` + +**`tsconfig.json`:** +```json +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "jsx": "react-jsx", + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "strict": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "baseUrl": ".", + "paths": { + "@/*": ["./*"] + } + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", ".next"] +} +``` + +**`next.config.js`:** +```javascript +/** @type {import('next').NextConfig} */ +const nextConfig = { + output: 'standalone', + reactStrictMode: true, +}; + +module.exports = nextConfig; +``` + +**`package.json` (key fields):** +```json +{ + "name": "riotpiao-portfolio", + "version": "1.0.0", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint ." + } +} +``` + +### 1.2 App Router structure + +**`app/layout.tsx`:** +```typescript +import "@/styles/globals.css"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; + +export const metadata = { + title: "Rock Liang — Portfolio & Demos", + description: "Software engineer showcasing live demos and open-source projects.", + openGraph: { + title: "Rock Liang", + description: "Portfolio and interactive demo platform", + url: "https://portfolio.riotpiao.homelab.com", + images: [ + { + url: "https://portfolio.riotpiao.homelab.com/og-image.png", + width: 1200, + height: 630, + }, + ], + }, +}; + +export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + +
+
{children}
+