# deps
node_modules/

# webjs / framework caches.
# `.webjs/routes.d.ts` (the generated route-types overlay, regenerated per
# machine by `webjs types` / `webjs dev`) is correctly ignored by `**/.webjs/*`.
# `.webjs/vendor/` is the EXCEPTION: it holds the committed importmap
# manifest (.webjs/vendor/importmap.json) and optionally the vendored
# bundle files (after `webjs vendor pin --download`). Both ship to
# production via source control so the server doesn't need
# api.jspm.io reachable at boot. Pattern is `**/.webjs/*` ignored,
# `.webjs/vendor/` un-ignored, mirroring Rails' config/importmap.rb
# + vendor/javascript/ being committed.
#
# DO NOT "simplify" the three lines below to `.webjs/`. Git's
# gitignore semantics excludes the parent first; once the parent is
# excluded, no `!**/.webjs/vendor/` negation can ever re-include children
# (the failure is silent: `webjs vendor pin` runs, writes files, and
# git ignores them with no warning). The `gitignore-vendor-not-ignored`
# lint rule (run via `webjs check`) verifies this with
# `git check-ignore` and will fail CI if the pattern regresses.
#
# The `**/` prefix matches `.webjs/` at ANY depth, not just this app's
# root. A slash-bearing `.webjs/*` anchors to this file's directory, so
# an app nested below its repo root (a monorepo package) would leak its
# generated `.webjs/routes.d.ts` into `git status`. `**/.webjs/*` covers
# the nested case while the negations still re-include vendor at each
# depth (a re-included parent dir permits a child negation).
**/.webjs/*
!**/.webjs/vendor/
!**/.webjs/vendor/**

# generated Tailwind CSS, built from public/input.css via npm run dev / start
public/tailwind.css

# env (.env.example stays tracked; the real .env never is)
.env
.env.*
!.env.example

# logs
*.log
npm-debug.log*

# OS
.DS_Store
Thumbs.db

# editors
# `.vscode/*` ignored, but `.vscode/settings.json` (the webjs-config JSON
# Schema association, #259) is committed so the editor validates package.json's
# webjs block out of the box. Same gitignore shape as `.webjs/*` above: a bare
# `.vscode/` would exclude the directory and no negation could re-include a
# child, so the settings file would silently never ship.
.vscode/*
!.vscode/settings.json
.idea/

# test artifacts
coverage/

# AI assistants: local session state, scheduled-task locks, etc.
# Repo-shared config (settings.json + hooks scripts) stays tracked so
# every contributor and agent gets the same PreToolUse rules.
.claude/*
!.claude/settings.json
!.claude/hooks/
!.claude/hooks/**
