

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1234567# Frontend JS Rules (semantic — ESLint handles syntax/style)89## DOM & Events10- Use `addEventListener`, not inline `onclick` handlers in new code.11- Cache repeated DOM queries into const variables.1213## State Management14- When async operations can be triggered from multiple sources, add dedup guards (e.g., `reloadInFlight` promise pattern).15- Reset ALL navigation/UI state when context changes (scope change, session reload, comment delete).16- When implementing UI state logic that counts comments, account for ALL comment types (file-scoped AND review-level).1718## Persisted Settings (cookies, not localStorage)19- Use cookies for any setting that should persist across `crit` invocations. Crit defaults to a random port (`port=0`), and localStorage is scoped per origin (scheme + host + **port**), so localStorage settings reset every run. Cookies are host-scoped and survive port changes.20- Persisted settings live in a single `crit-settings` JSON cookie via `getSetting(key, fallback)` / `setSetting(key, value)`. The exception is `crit-templates`, which stays in its own cookie because it's user-defined and can be longer.21- localStorage is fine for transient per-session data (e.g., `crit-draft-*` autosave keys that are review-specific anyway).22- Before adding persistence to a setting, ask whether it should be sticky. Transient view state (active filter, sort order on a list) usually shouldn't be — users coming back to a new review with "resolved-only" active would miss new open comments. Persist preferences (theme, width, hide-resolved), not transient views.2324## Error Handling25- Always check `response.ok` after `fetch()` calls. Throw on unexpected statuses.26- Every async operation must have error recovery that restores interactivity (re-attach listeners, undo optimistic UI).27- Never call `.remove()` directly on elements with CSS exit animations. Use class toggle + animationend listener.2829## Accessibility (axe-core in E2E catches missing aria-labels, dialog roles, tab roles)30- Never call `.blur()` on interactive elements — it breaks keyboard navigation. axe-core catches the effect (no focus indicator) but not the cause.3132## SSE Events33- When an SSE event signals a specific data change (e.g., `comments-changed`), only re-fetch that data — not everything.34
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| tomasz-tomczyk/crit.cursor/rules/frontend-architecture.mdc · 903 | Cursor rules | archgitdo-not | 65/100 | today | |
| tomasz-tomczyk/crit.cursor/rules/frontend-css.mdc · 903 | Cursor rules | uido-not | 46/100 | today | |
| tomasz-tomczyk/crit.cursor/rules/go.mdc · 903 | Cursor rules | teststylegitdo-not | 67/100 | today | |
| tomasz-tomczyk/crit.cursor/rules/proxy-auth-transport.mdc · 903 | Cursor rules | securitydo-not | 50/100 | today | |
| tomasz-tomczyk/critAGENTS.md · 903 | AGENTS.md | buildtestlint-formatstyle+2 | 77/100 | today | |
| tomasz-tomczyk/critscripts/AGENTS.md · 903 | AGENTS.md | setupbuildtesttesting-strategy | 77/100 | today |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 14 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 46 | Cursor rules | teststyletesting-strategysecurity+3 | 97/100 | 14 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| skillrecordings/egghead-next.cursor/rules/gh-task-plan.mdc · 1.4k | Cursor rules | teststylearchtypes+2 | 96/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/tomasz-tomczyk-crit-cursor-rules-frontend-js)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.