Project
Contributing
Every entity is a file in git. Pull requests are the contract.
Anatomy of an entry
Data lives in data/<type>/<slug>.ts. Each file exports a single, Zod-parsed entity. Validation runs at module load — if you mis-type a field, the build fails.
data/bosses/false-knight.ts
import { BossSchema, type Boss } from "@/lib/schema";
const data: Boss = BossSchema.parse({
slug: "false-knight",
name: "False Knight",
game: "hk",
hp: { base: 300 },
geo: 200,
area: { slug: "forgotten-crossroads", name: "Forgotten Crossroads" },
summary: "First major boss of Hollow Knight...",
verified: false,
sources: ["https://hollowknight.fandom.com/wiki/False_Knight"],
});
export default data;Adding a new boss
- Fork the repo.
- Add a new file at
data/bosses/<slug>.ts. - Register the import in
data/bosses/index.ts. - Run
npm run devand visit/bosses/<slug>to verify. - Open a PR. Include a wiki link or in-game source in
sources.
Verification
Set verified: true only if you have first-hand confirmation (you played the fight, or you cross-referenced the decompiled Assembly-CSharp.dll). Otherwise leave it false — the UI shows an “unverified” badge.