Apply clean architecture principles with vertical slicing, dependency rule, clear layer boundaries, and feature-first organization - language-agnostic
Scanned 9/20/2026
Install to Claude Code
npx -y skills add darellchua2/opencode-config-template --skill clean-architecture-skill --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Clean Architecture Skill?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/darellchua2-clean-architecture-skill)More formats (shields.io, HTML) on the badges page.
---
name: clean-architecture-skill
description: Apply clean architecture principles with vertical slicing, dependency rule, clear layer boundaries, and feature-first organization - language-agnostic
license: Apache-2.0
compatibility: opencode
category: Code Quality
---
## What I do
Structure codebases by vertical feature slices + horizontal layers (domain ← application ← infrastructure ← presentation), enforce the dependency rule (source dependencies point inward only), define contracts at boundaries.
## When to use me
- Structuring a new codebase or module; deciding where a piece of code belongs
- Reviewing whether a boundary is real (enforced) or decorative
Canonical house layouts: frontend `features/<feature>/{_components,_containers,hooks}` + `domains/<feature>`; backend `modules/<module>/{domain,application,infrastructure,presentation}` (domain holds interfaces, infrastructure holds implementations).
## House Learnings
### Learning: `doc-claimed-purity-vs-reality`
A layer rule documented but violated by >10 call sites is a false contract — leaving doc and code in disagreement trains every developer to ignore both. Either enforce the boundary with tooling (`no-restricted-imports` per-directory overrides, `madge --circular`, dependency-cruiser in CI) or rewrite the doc to describe reality. Never let architecture docs and code drift — the drift becomes the de facto standard.
Detection: `rg "from '@prisma/client'|from 'pg'" src/domain/ -l | wc -l` · `npx madge --circular --extensions ts src/domain/`
### Learning: `cross-container-hook-borrowing`
A feature container must NEVER import from a sibling container via relative path (`../../_containers/ReportDetail/useReportDetail`) — invisible coupling that breaks silently on refactor. If two containers need one hook, extract to the feature's `hooks/` (intra-feature) or `domains/{feature}/hooks/` (cross-feature). Containers import ONLY from `@/`-aliased shared locations or their own feature's `hooks/`.
Detection: `rg "from\s+['\"](\.\./)+.*_containers" --type ts --type tsx`
> Removed 2026-09: layered/hexagonal/clean-architecture comparison essays, dependency-rule diagrams, vertical/horizontal boundary walkthroughs, cross-cutting-concern lists, frontend/backend directory deep-dives, steps/common-issues ceremony — textbook architecture knowledge; the two codified learnings are this config's real additions.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!