Skip to content

Latest commit

 

History

History
60 lines (38 loc) · 2.59 KB

File metadata and controls

60 lines (38 loc) · 2.59 KB

OpenWolf

@.wolf/OPENWOLF.md

This project uses OpenWolf for context management. Read and follow .wolf/OPENWOLF.md every session. Check .wolf/cerebrum.md before generating code. Check .wolf/anatomy.md before reading files.

CLAUDE.md

Targeted instructions for Claude. The full codebase guide lives in AGENTS.md — read that first.

Commits

  • No signature lines. Don't append Co-Authored-By: Claude ... or any AI attribution.
  • No emoji. Don't include emoji in commit messages.
  • Conventional Commits: <type>(<scope>): <subject>
    • Types allowed (from commitlint.config.js): feat, fix, docs, style, design, refactor, perf, test, build, ci, chore, revert
    • Subject ≤ 50 chars when possible (hard cap 100)
    • Body explains why the change exists, not what the diff says
    • Imperative mood: "add cart sheet" not "added cart sheet"

Example:

feat(pay): add Instapay receiver hint with copy button

Egyptian buyers expect a one-tap receiver number. The hint zone
appears only when Instapay/Vodafone Cash is selected, surfaces
the canonical number, and offers tel: + clipboard so users never
type the digits.

Pre-commit / pre-push

  • .husky/pre-commit runs pnpm lint && pnpm format:check && pnpm type-check. Fix the underlying issue, never bypass. Don't use --no-verify.
  • .husky/pre-push runs pnpm build. If it fails, fix the build, don't skip.

Sessions

  • Don't run pnpm dev in the same shell as plan/exploration tasks — it blocks the session.
  • Use run_in_background: true for long commands (install, build) and continue with other work; the runtime notifies on completion.

Don't break the loader bug

Workspace dir must not contain apostrophes. Next.js 15 metadata-route loader injects the absolute path into a single-quoted JS string and chokes on '. Folder is Torky Store Mens (no apostrophe). Brand name in copy/SEO is still Torky Store Men's.

Strings + i18n

  • Every user-visible string belongs in src/data/index.ts constants object. If you type a literal in JSX, move it.
  • Keep object keys alphabetically sorted (oxlint sort-keys: error).

Supabase

  • Service role key never reaches the browser. Always use createServiceRoleSupabaseClientHandler server-side only (route handlers).
  • After any schema change, regenerate types via Supabase MCP generate_typescript_types and paste into src/lib/supabase/types.ts.
  • Migrations apply via MCP apply_migration. Never edit production data directly.

Tone

Match the project's Arabic Egyptian register where copy is concerned. No formal MSA stiffness, no over-friendly mall talk. Short imperatives.