code-review
Review code for Effect-TS patterns, common issues, and project conventions. Use when reviewing PRs, checking code quality, or before committing changes.
When & Why to Use This Skill
This Claude skill provides an automated, high-precision code review mechanism specifically tailored for Effect-TS ecosystems and modern TypeScript projects. It enforces architectural consistency by validating Effect-TS patterns, branded type implementations, and React component conventions, ensuring code quality and type safety across the development lifecycle.
Use Cases
- Pull Request Automation: Streamline the PR review process by automatically checking for Effect-TS anti-patterns, such as improper async/await usage instead of yield*.
- Pre-commit Quality Checks: Validate local code changes against project-specific conventions like Branded IDs and Jotai atom placement before pushing to the repository.
- Technical Debt Reduction: Identify and refactor legacy code patterns, such as unsafe type casts or missing 'satisfies' operators, to improve overall codebase maintainability.
- Frontend Architecture Enforcement: Ensure Next.js and React portal components adhere to strict loading state patterns, barrel export rules, and proper 'use client' directive usage.
- Standardizing Error Handling: Automatically verify that services and layers use Data.TaggedError and proper Context.Tag patterns for robust dependency injection.
| name | code-review |
|---|---|
| description | Review code for Effect-TS patterns, common issues, and project conventions. Use when reviewing PRs, checking code quality, or before committing changes. |
| allowed-tools | Read, Grep, Glob |
Code Review
Read-only review skill for checking code quality against project conventions.
Checklist
Effect-TS Patterns
- Uses
Effect.genwithyield*, not async/await - No type casts (
as Type) - usesatisfiesinstead - Errors are
Data.TaggedErrorwith descriptive payloads - Services use
Context.TagorEffect.Servicepattern - Layers properly compose dependencies
Branded IDs (wowlab-core)
- Schema + Brand dual pattern for IDs
-
eslint-disable no-redeclarecomment present - Validation logic matches between Schema and Brand
Portal Components
- Pages are minimal (just render component)
-
loading.tsxuses*Skeletoncomponent -
"use client"only where needed - Barrel exports in
index.ts - Jotai atoms in domain folders under
atoms/ - Uses
@/lib/formatutilities (not raw.toLocaleString()or manual formatting) - Loading states use Flask components (not Loader2 from lucide)
- Providers export hook + Provider + types from
providers/index.ts
General
- No unused imports or variables
- No
console.login production code - Error handling is comprehensive
- Types are explicit at module boundaries
- Control flow has braces (no single-line if/for)
- No backwards-compat shims or deprecated code
How to Use
- I'll read the files you want reviewed
- Check against the patterns above
- Report issues with file:line references
- Suggest fixes where applicable
Common Issues
Wrong
const data = await fetchData(); // async/await
const x = foo as Bar; // type cast
Right
const data = yield * fetchData(); // Effect.gen
const x = foo satisfies Bar; // satisfies