Imported from Myxogastria0808/website (
AGENTS.md). Install upstream withnpx skills add Myxogastria0808/website. Copyright stays with the author.
Repository Guidelines
Project Structure & Module Organization
This is a Vike + React personal website deployed to Cloudflare Workers. Route files live under pages/; Vike plus-files such as +Page.tsx, +Layout.tsx, +Head.tsx, and +config.ts define pages, layout, metadata, and framework settings. Reusable UI belongs in components/<Name>/index.tsx with scoped styles in index.module.css, then re-exported from components/index.ts when shared. Static data lives in data/, global CSS and custom media definitions live in pages/global.css, and public assets live in public/. Build output is generated in dist/ and should not be edited by hand.
Build, Test, and Development Commands
Use Bun for package scripts:
bun run devstarts the local Vike dev server using the Cloudflare runtime integration.bun run buildcreates a production build.bun run previewbuilds and serves the production preview locally.bun run deploybuilds and deploys to Cloudflare Workers with Wrangler.
bun run typecheck runs tsc --noEmit and is the current validation baseline. No additional lint or test scripts are configured. If adding them, wire them through package.json and document the command here.
Coding Style & Naming Conventions
Write TypeScript and React components using the existing functional component style. Keep component directories PascalCase, for example components/Footer/ or pages/index/Profile/. Use CSS Modules for component styles; do not use inline style={{}}. Every <div> should have a class name. Prefer rem and var(--fs-*) sizing; reserve px for borders or other hairline values. Use breakpoints from pages/global.css via @media (--bp-*). Do not set font-family directly in CSS Modules for non-Noto-Sans fonts; instead apply the global utility class (.font-megrim, .font-wavefont) on the TSX element, for example className={${styles.foo} font-megrim}. Use design tokens from pages/global.css for colors (var(--color-*)), border radius (var(--radius-default)), and borders (var(--border-default)). External links must include target="_blank" rel="noopener noreferrer". Use arrow function syntax (const foo = () => {}) for all functions except export default function page/component declarations; this applies to named exports, local helpers, and in-component functions alike. Do not use individual padding or margin properties (padding-top, padding-right, padding-bottom, padding-left, margin-top, etc.) in CSS Modules; always use the padding or margin shorthand instead (e.g. padding: 0 0 1rem 0 instead of padding-bottom: 1rem).
Testing Guidelines
There is no established test framework or coverage requirement. For now, validate changes with bun run build and, for UI changes, bun run dev or bun run preview. If tests are introduced, place them near the code they cover, use descriptive names such as ComponentName.test.tsx, and keep test commands fast enough for routine PR checks.
Commit & Pull Request Guidelines
The Git history uses concise Conventional Commit prefixes such as feat:, fix:, and chore:. Follow that pattern, for example fix: adjust works layout. Pull requests should include a short summary, affected routes/components, validation performed, linked issues when applicable, and screenshots or recordings for visual changes.
Cloudflare & NixOS Notes
SSR runs inside workerd, not Node.js. Do not use Node APIs unless nodejs_compat is intentionally enabled in wrangler.jsonc. Keep wrangler.jsonc compatibility_date supported by the installed Miniflare version. In the Nix shell, NODE_EXTRA_CA_CERTS must point to the Nix CA bundle for external HTTPS fetches during SSR.