diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..4679602 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,25 @@ +# Repository Guidelines + +## Project Structure & Module Organization +This repo is an Astro-based personal homepage with build-time data syncing. Main app code lives in `src/`: reusable UI in `src/components`, page routes in `src/pages`, layouts in `src/layouts`, shared helpers in `src/utils`, and site/data config in `src/config.ts`, `src/content.config.ts`, and `src/data/`. Editable content lives under `src/content/` (`logs/`, `projects/`, `shares/`, `seafile/`, `static-assets/`). Generated sync output is written to `src/data/generated/`; treat it as build output. Static public files belong in `public/`, deployment assets in `docker/`, and operational notes in `docs/`. + +## Build, Test, and Development Commands +- `npm install` — install dependencies (Node `>=22.12.0`). +- `npm run dev` — start the Astro dev server. +- `npm run build` — create a production build in `dist/`. +- `npm run preview` — serve the built site locally. +- `npm run content:sync` — pull remote content and refresh generated JSON. +- `npm run assets:sync` — download static assets listed in `src/content/static-assets/index.json`. +- `npm run rebuild` — full validation path: sync content, then build. + +## Coding Style & Naming Conventions +Use TypeScript ESM and Astro components with 2-space indentation. Keep components in PascalCase (`ProjectCard.astro`), utilities in camelCase (`datetime.ts`), and CSS classes in kebab-case with BEM-style modifiers when helpful (`activity-item__meta`). Prefer small, focused modules and reuse existing loaders/schemas before adding new abstractions. Keep content JSON filenames stable as `index.json` within each content folder. + +## Testing Guidelines +There is no dedicated test framework configured yet. For code or content changes, run `npm run build`; for sync-related work, run `npm run rebuild`. Treat a clean build as the minimum acceptance check, and verify changed pages in `npm run preview` when UI or content rendering changes. + +## Commit & Pull Request Guidelines +Recent history favors short, intent-first commit subjects in either English or Chinese. For new commits, keep the subject concise and explain why the change exists; include Lore trailers when applicable (`Constraint:`, `Rejected:`, `Confidence:`, `Tested:`). Pull requests should summarize the user-visible change, list affected paths, note any `.env` or content-schema updates, and include screenshots for visual changes. Always report which validation commands you ran. + +## Security & Configuration Tips +Copy `.env.example` to `.env` for local setup, and never commit secrets such as Gitea or Seafile tokens. When editing sync scripts in `scripts/`, document any new environment variables or external dependencies in `README.md` or `docs/`. diff --git a/src/content/projects/index.json b/src/content/projects/index.json index 76ece31..f166560 100644 --- a/src/content/projects/index.json +++ b/src/content/projects/index.json @@ -6,29 +6,56 @@ "cover_image": "/images/projects/personal-homepage.svg", "demo_video": "", "download_link": "", - "tags": ["astro", "静态网站", "内容驱动型"], + "tags": [ + "astro", + "静态网站", + "内容驱动型" + ], "featured": true }, { "name": "VampireLike", "description": "Unity 开发的 3D 类吸血鬼恶魔城 demo,使用 Unity GameFramework 开源框架,并通过 job 与 burst 进行高性能计算", - "gitea_repo": "basil/VampireLike", - "cover_image": "/images/projects/VampireLike.png", + "gitea_repo": "basil/vampire-like", + "cover_image": "/images/projects/vampire-like.png", "demo_video": "", "download_link": "", - "tags": ["unity", "burst", "高性能", "UGF"], + "tags": [ + "unity", + "burst", + "高性能", + "UGF" + ], "featured": true }, { "name": "几何塔防", "description": "Unity 开发的 rouge 塔防项目,使用配件自由组转防御塔来取得最终的胜利", - "gitea_repo": "basil/Geometry-Tower-Defense", - "cover_image": "/images/projects/Geometry-Tower-Defense.png", + "gitea_repo": "basil/geometry-tower-defense", + "cover_image": "/images/projects/geometry-tower-defense.png", "demo_video": "", "download_link": "", - "tags": ["unity", "rouge", "塔防", "UGF"], + "tags": [ + "unity", + "rouge", + "塔防", + "UGF" + ], "featured": true }, + { + "name": "几何塔防-基础", + "description": "几何塔防的基础层,使用纯 C# 开发", + "gitea_repo": "basil/geometry-tower-defense-Bbase", + "cover_image": "/images/projects/geometry-tower-defense.png", + "demo_video": "", + "download_link": "", + "tags": [ + "c#", + "UGF" + ], + "featured": false + }, { "name": "简单 CPU 软光栅渲染器", "description": "使用 C++ 基于 SDL2 开发的软件光栅化渲染器", @@ -36,17 +63,26 @@ "cover_image": "/images/projects/CPU-Renderer.png", "demo_video": "", "download_link": "", - "tags": ["C++", "renderer", "SDL2"], + "tags": [ + "C++", + "renderer", + "SDL2" + ], "featured": false }, { "name": "李诫传", "description": "Unity 开发的视觉小说,用于参加计算机设计大赛数媒赛道", - "gitea_repo": "basil/Biography-of-Li-Jie", - "cover_image": "/images/projects/Biography-of-Li-Jie.png", + "gitea_repo": "basil/biography-of-lijie", + "cover_image": "/images/projects/biography-of-lijie.png", "demo_video": "", "download_link": "", - "tags": ["unity", "visual novel", "UGF", "ai"], + "tags": [ + "unity", + "visual novel", + "UGF", + "ai" + ], "featured": false } ] diff --git a/src/content/static-assets/index.json b/src/content/static-assets/index.json index 4069095..5f2e502 100644 --- a/src/content/static-assets/index.json +++ b/src/content/static-assets/index.json @@ -2,180 +2,179 @@ { "target_dir": "public/images/projects", "files": [ - { - "url": "http://106.12.111.150:8000/f/cfb44c4a96234a939ed2/?dl=1", - "filename": "VampireLike.png" - }, - { - "url": "http://106.12.111.150:8000/f/85e956b2a4f14ff9bca8/?dl=1", - "filename": "Geometry-Tower-Defense.png" - }, - { - "url": "http://106.12.111.150:8000/f/7f6ac5bd1b094db5ae95/?dl=1", - "filename": "CPU-Renderer.png" - }, - { - "url": "http://106.12.111.150:8000/f/1ac8ebc9936b490586be/?dl=1", - "filename": "Biography-of-Li-Jie.png" - } - ] + { + "url": "http://106.12.111.150:8000/f/cfb44c4a96234a939ed2/?dl=1", + "filename": "vampire-like.png" + }, + { + "url": "http://106.12.111.150:8000/f/85e956b2a4f14ff9bca8/?dl=1", + "filename": "geometry-tower-defense.png" + }, + { + "url": "http://106.12.111.150:8000/f/7f6ac5bd1b094db5ae95/?dl=1", + "filename": "CPU-Renderer.png" + }, + { + "url": "http://106.12.111.150:8000/f/1ac8ebc9936b490586be/?dl=1", + "filename": "biography-of-lijie.png" + } + ] }, { "target_dir": "public/images/gallery", - "files": - [ - { - "url": "http://106.12.111.150:8000/f/0d357852716f492eb92f/?dl=1", - "filename": "Alphys.png" - }, - { - "url": "http://106.12.111.150:8000/f/ec2e2e282ed7478c8fa0/?dl=1", - "filename": "Asgore.png" - }, - { - "url": "http://106.12.111.150:8000/f/7b7fb8414ab2485ba05a/?dl=1", - "filename": "Asriel.png" - }, - { - "url": "http://106.12.111.150:8000/f/bd8f4b71f3264ce5a36f/?dl=1", - "filename": "AUBURY-farwaytown.png" - }, - { - "url": "http://106.12.111.150:8000/f/3f39dda9122f440aafd8/?dl=1", - "filename": "AUBURY-headspace.png" - }, - { - "url": "http://106.12.111.150:8000/f/92b1355908b74898b7b3/?dl=1", - "filename": "BASIL-farwaytown.png" - }, - { - "url": "http://106.12.111.150:8000/f/9a3bdc09fa5e4216b7e6/?dl=1", - "filename": "BASIL-headspace.png" - }, - { - "url": "http://106.12.111.150:8000/f/00fea1e5adae472796ff/?dl=1", - "filename": "Flowey.png" - }, - { - "url": "http://106.12.111.150:8000/f/edaa7526e5dd4f6e807d/?dl=1", - "filename": "HERO-farwaytown.png" - }, - { - "url": "http://106.12.111.150:8000/f/309a3b70af944247a273/?dl=1", - "filename": "HERO-farwaytown.png" - }, - { - "url": "http://106.12.111.150:8000/f/cf5f1e4459e1453bbdd6/?dl=1", - "filename": "KEL-farwaytown.png" - }, - { - "url": "http://106.12.111.150:8000/f/221394e33b3746e89406/?dl=1", - "filename": "KEL-headspace.png" - }, - { - "url": "http://106.12.111.150:8000/f/5e129d4d015149e28df8/?dl=1", - "filename": "Kris-dark.png" - }, - { - "url": "http://106.12.111.150:8000/f/c5a27832d49f4e5a8fa2/?dl=1", - "filename": "Kris-light.png" - }, - { - "url": "http://106.12.111.150:8000/f/2dc36c44d04540d29253/?dl=1", - "filename": "MARI-farwaytown.png" - }, - { - "url": "http://106.12.111.150:8000/f/37c25836770c481bb22c/?dl=1", - "filename": "MARI-headspace.png" - }, - { - "url": "http://106.12.111.150:8000/f/accd21bb40ed48de8c48/?dl=1", - "filename": "Mettation.png" - }, - { - "url": "http://106.12.111.150:8000/f/b441f2cb16434bf38974/?dl=1", - "filename": "Noelle-dark.png" - }, - { - "url": "http://106.12.111.150:8000/f/01e300bc2e6e4b3faf4b/?dl=1", - "filename": "Noelle-light.png" - }, - { - "url": "http://106.12.111.150:8000/f/a3688e213aa249a6bcbb/?dl=1", - "filename": "OMORI.png" - }, - { - "url": "http://106.12.111.150:8000/f/6ea8ec1fc7f84632bf50/?dl=1", - "filename": "Papyrus.png" - }, - { - "url": "http://106.12.111.150:8000/f/806c6cbcee794039b894/?dl=1", - "filename": "Ralsei-hat.png" - }, - { - "url": "http://106.12.111.150:8000/f/d4dbf86997594a1d9b31/?dl=1", - "filename": "Ralsei-nohat.png" - }, - { - "url": "http://106.12.111.150:8000/f/bf5804465283442fbefb/?dl=1", - "filename": "Sans.png" - }, - { - "url": "http://106.12.111.150:8000/f/a06f7a1a8f90404ba79a/?dl=1", - "filename": "SOMETHING.png" - }, - { - "url": "http://106.12.111.150:8000/f/e18e05022ede4e659e8f/?dl=1", - "filename": "SUNNY.png" - }, - { - "url": "http://106.12.111.150:8000/f/bd59853e81dd4c349c96/?dl=1", - "filename": "Susie-dark.png" - }, - { - "url": "http://106.12.111.150:8000/f/80faf6386179400db15b/?dl=1", - "filename": "Susie-light.png" - }, - { - "url": "http://106.12.111.150:8000/f/13e2f6b06db1411bbdeb/?dl=1", - "filename": "Toriel.png" - }, - { - "url": "http://106.12.111.150:8000/f/d309b43c18ca431eaedf/?dl=1", - "filename": "Undyne.png" - }, - { - "url": "http://106.12.111.150:8000/f/c6b19ca33b274ad4b121/?dl=1", - "filename": "狛枝凪斗.png" - }, - { - "url": "http://106.12.111.150:8000/f/10290be473334433848b/?dl=1", - "filename": "不二咲千寻.png" - }, - { - "url": "http://106.12.111.150:8000/f/dcba07ca07ba4467b21f/?dl=1", - "filename": "苗木诚.png" - }, - { - "url": "http://106.12.111.150:8000/f/fe817cb7b51f4d2bad41/?dl=1", - "filename": "七海千秋.png" - }, - { - "url": "http://106.12.111.150:8000/f/5ed86d51cc834745b127/?dl=1", - "filename": "日向创.png" - }, - { - "url": "http://106.12.111.150:8000/f/36129927521c4f8eac1c/?dl=1", - "filename": "十神白夜.png" - }, - { - "url": "http://106.12.111.150:8000/f/8ed6188acc87487faf38/?dl=1", - "filename": "雾切响子.png" - }, - { - "url": "http://106.12.111.150:8000/f/d8a1d002c0324ca59e58/?dl=1", - "filename": "小泉真昼.png" - } + "files": [ + { + "url": "http://106.12.111.150:8000/f/0d357852716f492eb92f/?dl=1", + "filename": "Alphys.png" + }, + { + "url": "http://106.12.111.150:8000/f/ec2e2e282ed7478c8fa0/?dl=1", + "filename": "Asgore.png" + }, + { + "url": "http://106.12.111.150:8000/f/7b7fb8414ab2485ba05a/?dl=1", + "filename": "Asriel.png" + }, + { + "url": "http://106.12.111.150:8000/f/bd8f4b71f3264ce5a36f/?dl=1", + "filename": "AUBURY-farwaytown.png" + }, + { + "url": "http://106.12.111.150:8000/f/3f39dda9122f440aafd8/?dl=1", + "filename": "AUBURY-headspace.png" + }, + { + "url": "http://106.12.111.150:8000/f/92b1355908b74898b7b3/?dl=1", + "filename": "BASIL-farwaytown.png" + }, + { + "url": "http://106.12.111.150:8000/f/9a3bdc09fa5e4216b7e6/?dl=1", + "filename": "BASIL-headspace.png" + }, + { + "url": "http://106.12.111.150:8000/f/00fea1e5adae472796ff/?dl=1", + "filename": "Flowey.png" + }, + { + "url": "http://106.12.111.150:8000/f/edaa7526e5dd4f6e807d/?dl=1", + "filename": "HERO-farwaytown.png" + }, + { + "url": "http://106.12.111.150:8000/f/309a3b70af944247a273/?dl=1", + "filename": "HERO-farwaytown.png" + }, + { + "url": "http://106.12.111.150:8000/f/cf5f1e4459e1453bbdd6/?dl=1", + "filename": "KEL-farwaytown.png" + }, + { + "url": "http://106.12.111.150:8000/f/221394e33b3746e89406/?dl=1", + "filename": "KEL-headspace.png" + }, + { + "url": "http://106.12.111.150:8000/f/5e129d4d015149e28df8/?dl=1", + "filename": "Kris-dark.png" + }, + { + "url": "http://106.12.111.150:8000/f/c5a27832d49f4e5a8fa2/?dl=1", + "filename": "Kris-light.png" + }, + { + "url": "http://106.12.111.150:8000/f/2dc36c44d04540d29253/?dl=1", + "filename": "MARI-farwaytown.png" + }, + { + "url": "http://106.12.111.150:8000/f/37c25836770c481bb22c/?dl=1", + "filename": "MARI-headspace.png" + }, + { + "url": "http://106.12.111.150:8000/f/accd21bb40ed48de8c48/?dl=1", + "filename": "Mettation.png" + }, + { + "url": "http://106.12.111.150:8000/f/b441f2cb16434bf38974/?dl=1", + "filename": "Noelle-dark.png" + }, + { + "url": "http://106.12.111.150:8000/f/01e300bc2e6e4b3faf4b/?dl=1", + "filename": "Noelle-light.png" + }, + { + "url": "http://106.12.111.150:8000/f/a3688e213aa249a6bcbb/?dl=1", + "filename": "OMORI.png" + }, + { + "url": "http://106.12.111.150:8000/f/6ea8ec1fc7f84632bf50/?dl=1", + "filename": "Papyrus.png" + }, + { + "url": "http://106.12.111.150:8000/f/806c6cbcee794039b894/?dl=1", + "filename": "Ralsei-hat.png" + }, + { + "url": "http://106.12.111.150:8000/f/d4dbf86997594a1d9b31/?dl=1", + "filename": "Ralsei-nohat.png" + }, + { + "url": "http://106.12.111.150:8000/f/bf5804465283442fbefb/?dl=1", + "filename": "Sans.png" + }, + { + "url": "http://106.12.111.150:8000/f/a06f7a1a8f90404ba79a/?dl=1", + "filename": "SOMETHING.png" + }, + { + "url": "http://106.12.111.150:8000/f/e18e05022ede4e659e8f/?dl=1", + "filename": "SUNNY.png" + }, + { + "url": "http://106.12.111.150:8000/f/bd59853e81dd4c349c96/?dl=1", + "filename": "Susie-dark.png" + }, + { + "url": "http://106.12.111.150:8000/f/80faf6386179400db15b/?dl=1", + "filename": "Susie-light.png" + }, + { + "url": "http://106.12.111.150:8000/f/13e2f6b06db1411bbdeb/?dl=1", + "filename": "Toriel.png" + }, + { + "url": "http://106.12.111.150:8000/f/d309b43c18ca431eaedf/?dl=1", + "filename": "Undyne.png" + }, + { + "url": "http://106.12.111.150:8000/f/c6b19ca33b274ad4b121/?dl=1", + "filename": "狛枝凪斗.png" + }, + { + "url": "http://106.12.111.150:8000/f/10290be473334433848b/?dl=1", + "filename": "不二咲千寻.png" + }, + { + "url": "http://106.12.111.150:8000/f/dcba07ca07ba4467b21f/?dl=1", + "filename": "苗木诚.png" + }, + { + "url": "http://106.12.111.150:8000/f/fe817cb7b51f4d2bad41/?dl=1", + "filename": "七海千秋.png" + }, + { + "url": "http://106.12.111.150:8000/f/5ed86d51cc834745b127/?dl=1", + "filename": "日向创.png" + }, + { + "url": "http://106.12.111.150:8000/f/36129927521c4f8eac1c/?dl=1", + "filename": "十神白夜.png" + }, + { + "url": "http://106.12.111.150:8000/f/8ed6188acc87487faf38/?dl=1", + "filename": "雾切响子.png" + }, + { + "url": "http://106.12.111.150:8000/f/d8a1d002c0324ca59e58/?dl=1", + "filename": "小泉真昼.png" + } ] } ]