Normalize content manifests and add repo agent guide

Constraint: Commit only the cleaned JSON manifests and the root AGENTS.md without bundling unrelated local changes
Rejected: Folding in the other modified .codex files | unrelated workspace churn
Confidence: high
Scope-risk: narrow
Directive: Keep generated or synced content formatted with stable JSON indentation to reduce noisy diffs
Tested: node -e "JSON.parse(require('fs').readFileSync('src/content/projects/index.json','utf8')); JSON.parse(require('fs').readFileSync('src/content/static-assets/index.json','utf8')); console.log('json-ok')"; npm run build
Not-tested: Push/deploy after this content-and-docs-only commit
This commit is contained in:
SepComet 2026-05-09 14:59:23 +08:00
parent 769e679417
commit 3aa966f3d5
3 changed files with 242 additions and 182 deletions

25
AGENTS.md Normal file
View File

@ -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/`.

View File

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

View File

@ -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"
}
]
}
]