{"id":50360208,"url":"https://github.com/omnifaces/claude-faces-expert","last_synced_at":"2026-05-30T01:05:00.323Z","repository":{"id":343790399,"uuid":"1179124226","full_name":"omnifaces/claude-faces-expert","owner":"omnifaces","description":"Drop-in Jakarta Faces knowledge base for Claude Code","archived":false,"fork":false,"pushed_at":"2026-04-29T13:10:58.000Z","size":199,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-29T15:14:35.578Z","etag":null,"topics":["ai","balusc","claude-code","claude-rules","claude-skills","jakarta-ee","jakarta-faces","java","jsf","knowledge-base","omnifaces","primefaces"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/omnifaces.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"buy_me_a_coffee":"balusc","custom":["https://paypal.me/balusc"]}},"created_at":"2026-03-11T17:59:35.000Z","updated_at":"2026-04-29T13:57:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/omnifaces/claude-faces-expert","commit_stats":null,"previous_names":["omnifaces/claude-faces-expert"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/omnifaces/claude-faces-expert","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnifaces%2Fclaude-faces-expert","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnifaces%2Fclaude-faces-expert/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnifaces%2Fclaude-faces-expert/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnifaces%2Fclaude-faces-expert/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/omnifaces","download_url":"https://codeload.github.com/omnifaces/claude-faces-expert/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnifaces%2Fclaude-faces-expert/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33676192,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","balusc","claude-code","claude-rules","claude-skills","jakarta-ee","jakarta-faces","java","jsf","knowledge-base","omnifaces","primefaces"],"created_at":"2026-05-30T01:04:59.542Z","updated_at":"2026-05-30T01:05:00.318Z","avatar_url":"https://github.com/omnifaces.png","language":"Shell","funding_links":["https://buymeacoffee.com/balusc","https://paypal.me/balusc"],"categories":[],"sub_categories":[],"readme":"# Claude Faces Expert\n\n*Version 1.2.2*\n\nDrop-in Jakarta Faces knowledge base for [Claude Code](https://claude.com/claude-code).\nMakes Claude Code more aware of Jakarta Faces (formerly JSF) best practices, common pitfalls, and diagnostic decision trees.\nNo special context needed, just make sure that `@.claude/faces/rules.md` is referenced in your `CLAUDE.md`.\n\nCurated by [BalusC](https://balusc.org) based on his Stack Overflow answers to frequently asked Jakarta Faces questions.\n\nWhy is this important? Below is an exampe conversation with Opus 4.6:\n\n\u003e Me: As to terminology, can you tell me what exactly you know about \"view state\" in JSF context? \n\u003e \n\u003e Claude: View state is the serialized snapshot of the UIViewRoot component tree — the structure, component attributes, attached validators/converters, and the state of EditableValueHolder components (submitted values, local values, validity flags).\n\u003e \n\u003e Me: View state does absolutely not contain \"the stucture\" of the component tree. It only contains the delta state. The component tree itself is always freshy rebuilt from scratch on every request. Then its state is adjusted in such way that it matches exactly the state as it was during render response of prior request. Exactly that delta is the \"view state\".\n\u003e \n\u003e Claude: Thank you — that's an important correction. \n\n## What's included\n\n| File | Description |\n|------|-------------|\n| `.claude/faces/rules.md` | Core rules: terminology, view state, namespaces, CDI, scopes, page authoring, resources, components, ajax, common errors |\n| `.claude/faces/topics/configuration.md` | Minimal project configuration (web.xml, taglib, directory structure) |\n| `.claude/faces/topics/diagnostics.md` | Decision trees for 6 common errors (action not invoked, target unreachable, ViewExpiredException, etc.) |\n| `.claude/faces/topics/primefaces.md` | PrimeFaces-specific rules and gotchas |\n| `.claude/faces/topics/omnifaces.md` | OmniFaces utilities: when and how to use them |\n| `.claude/faces/topics/lifecycle.md` | Request processing lifecycle: phases, shortcuts, ajax, PhaseListener |\n| `.claude/faces/topics/conversion-validation.md` | Converters, validators, Bean Validation integration, custom converters/validators |\n| `.claude/faces/topics/examples.md` | Concrete code examples demonstrating best practices |\n| `.claude/skills/faces-review/SKILL.md` | `/faces-review` slash command for reviewing Faces code |\n| `.claude/skills/faces-migrate/SKILL.md` | `/faces-migrate` slash command for migrating between Faces versions |\n\n## Installation\n\n### Project scope (default)\n\nFrom your project root, run:\n\n```sh\ncurl -sL https://raw.githubusercontent.com/omnifaces/claude-faces-expert/main/install.sh | sh\n```\n\nThis copies the knowledge base and slash commands into `./.claude/`, and adds the `@.claude/faces/rules.md` reference to your project's `CLAUDE.md` (creates it if needed). To update later, re-run the same command.\n\n### User scope (applies to all projects)\n\nTo install once into your home directory and have the rules apply to every project Claude Code touches, run:\n\n```sh\ncurl -sL https://raw.githubusercontent.com/omnifaces/claude-faces-expert/main/install.sh | sh -s -- --user\n```\n\nThis copies into `~/.claude/` and adds the `@~/.claude/faces/rules.md` reference to your global `~/.claude/CLAUDE.md` (creates it if needed). The layout under `~/.claude/faces/` is identical to the project layout.\n\n### Manual installation\n\nIf you don't want to run `curl`-based installers, install manually:\n\n```sh\n# Project scope:\ngit clone https://github.com/omnifaces/claude-faces-expert /tmp/claude-faces-expert\nmkdir -p .claude/faces .claude/skills\ncp -r /tmp/claude-faces-expert/.claude/faces/* .claude/faces/\ncp -r /tmp/claude-faces-expert/.claude/skills/* .claude/skills/\nrm -rf /tmp/claude-faces-expert\n```\n\nThen add this line to your `CLAUDE.md` (or `~/.claude/CLAUDE.md` for user scope, with `@~/.claude/faces/rules.md`):\n\n```\nJakarta Faces rules: @.claude/faces/rules.md\n```\n\n### OpenCode\n\nFor [OpenCode](https://opencode.ai/) users, use the OpenCode-specific installer:\n\n**Project scope:**\n\n```sh\ncurl -sL https://raw.githubusercontent.com/omnifaces/claude-faces-expert/main/install-opencode.sh | sh\n```\n\nThis calls the standard installer (which sets up `./.claude/` and `CLAUDE.md`) and additionally creates `opencode.json` and `AGENTS.md` in the project root. The same `.claude/faces/` rules are used by both tools.\n\n**User scope:**\n\n```sh\ncurl -sL https://raw.githubusercontent.com/omnifaces/claude-faces-expert/main/install-opencode.sh | sh -s -- --user\n```\n\nThis installs into `~/.claude/` and `~/.config/opencode/`, applying the rules to all projects.\n\n## How it Works\n\nOnce referenced in `CLAUDE.md`, the expert rules are active.\nYou don't need to change your workflow or use special prompts; Claude simply becomes more capable, providing higher-quality Jakarta Faces code and architectural advice by default.\nIt also adds two helpful slash commands `/faces-review` and `/faces-migrate`.\n\n## Slash Commands\n\n### `/faces-review`\n\nReviews your Faces code against best practices. Checks XHTML files, backing beans, and configuration for common mistakes, anti-patterns, and rule violations.\n\n```\n/faces-review                              # Review entire project\n/faces-review src/main/webapp/page.xhtml   # Review a specific file\n```\n\nFindings are grouped by file with severity levels:\n- **error** — will cause bugs\n- **warning** — anti-pattern or risk\n- **info** — improvement opportunity\n\n### `/faces-migrate`\n\nMigrates your project from one Faces version to another. Detects the current version, determines the migration path, and applies changes step by step with confirmation.\n\n```\n/faces-migrate 4.1       # Migrate to Faces 4.1\n/faces-migrate 4.0       # Migrate to Faces 4.0\n```\n\nSupported migration paths:\n- JSF 1.x → JSF 2.0 (JSP to Facelets)\n- JSF 2.x → JSF 2.3 (`@ManagedBean` to CDI)\n- JSF 2.3 → Faces 3.0 (`javax.*` to `jakarta.*`)\n- Faces 3.0 → Faces 4.0 (new XML namespaces, removed APIs)\n- Faces 4.0 → Faces 4.1\n\n## Covers\n\n- Jakarta Faces 1.0 through 4.1 (JSF and Faces)\n- PrimeFaces component library\n- OmniFaces utility library\n- View state internals (PSS vs FSS, server vs client, delta mechanics)\n- CDI bean management and scope selection\n- Page authoring (templates, includes, tag files, composite components)\n- Common error diagnostics with step-by-step decision trees\n\n## About the Author\n\n\u003e *BalusC is a highly experienced Java developer who uses Claude Code primarily as a code review and bug-fixing partner across a portfolio of serious Jakarta Faces projects. With deep domain expertise that keeps Claude honest, he catches subtle errors and pushes back with precise corrections. His most distinctive quality is steering Claude toward cleaner solutions — preferring specific architectural patterns and redirecting away from plausible-but-wrong approaches. The expert rules in this project are curated from that same deep expertise: years of answering Jakarta Faces questions on Stack Overflow, distilled into actionable guidance that makes Claude genuinely more capable with Faces code.*\n\n— Claude, based on analysis of 83 coding sessions (`/insights`)\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for a list of changes per version.\n\n## License\n\n[Apache License 2.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomnifaces%2Fclaude-faces-expert","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomnifaces%2Fclaude-faces-expert","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomnifaces%2Fclaude-faces-expert/lists"}