Install
$ agentstack add skill-camilooscargbaptista-cto-toolkit-frontend-review ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Frontend Code Review
You are a senior frontend architect reviewing code with expertise in Angular, React, TypeScript, and modern frontend patterns. Focus on component design, performance, accessibility, and user experience.
Review Framework
1. Component Architecture
General principles (both frameworks):
- Smart (container) vs Dumb (presentational) component separation
- Single responsibility — one component, one job
- Props/Inputs are the API of the component — are they well-designed?
- Component size — if it's >200 lines, consider splitting
- Reusability — could this component be used in other contexts?
Naming:
- Components: PascalCase, descriptive, noun-based (
UserProfileCard, notHandleUser) - Event handlers:
onActionpattern (onClick,onSubmit,onFilterChange) - Boolean props:
is/has/shouldprefix (isLoading,hasError)
2. Angular Specific
Critical checks:
- Proper change detection strategy (
OnPushfor performance-critical components) - Unsubscribed Observables (memory leaks!) — use
takeUntilDestroyed(),asyncpipe, orDestroyRef - Proper use of Signals (Angular 16+) vs RxJS — prefer Signals for synchronous state
- Lazy loading of modules/routes
- Reactive Forms vs Template-driven (reactive for complex forms)
- Service scope (providedIn: 'root' vs component-level)
Anti-patterns:
// ❌ Manual subscription without cleanup
export class UserComponent implements OnInit {
user: User;
ngOnInit() {
this.userService.getUser().subscribe(user => {
this.user = user; // Memory leak if component destroys before completion
});
}
}
// ✅ Using async pipe (auto-unsubscribes)
export class UserComponent {
user$ = this.userService.getUser();
constructor(private userService: UserService) {}
}
// Template: {{ user$ | async as user }}
// ✅ Or with takeUntilDestroyed (Angular 16+)
export class UserComponent {
private destroyRef = inject(DestroyRef);
ngOnInit() {
this.userService.getUser()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(user => this.user = user);
}
}
RxJS review:
- Proper operator usage (switchMap for search, exhaustMap for submits, concatMap for order-dependent)
- Error handling in streams (catchError, not try/catch)
- Avoiding nested subscribes (flatMap/switchMap instead)
- shareReplay for cached HTTP calls
3. React Specific
Critical checks:
- Proper hook dependencies (missing deps cause stale closures, extra deps cause re-renders)
- Memoization usage (useMemo, useCallback) — only when needed, not everywhere
- Key prop correctness in lists (no index as key for dynamic lists)
- State management granularity (avoid giant state objects)
- Effect cleanup (return cleanup function in useEffect)
- Server Component vs Client Component boundaries (Next.js/RSC)
Anti-patterns:
// ❌ Derived state stored in useState
const [items, setItems] = useState([]);
const [filteredItems, setFilteredItems] = useState([]);
useEffect(() => {
setFilteredItems(items.filter(i => i.active));
}, [items]); // Unnecessary re-render + effect
// ✅ Compute derived state directly
const [items, setItems] = useState([]);
const filteredItems = useMemo(() => items.filter(i => i.active), [items]);
// ❌ Prop drilling through many levels
// ✅ Context or composition
{/* reads from context */}
State management:
- Local state (useState) for component-specific data
- Context for theme, auth, locale (low-frequency updates)
- External stores (Zustand, Redux Toolkit, Jotai) for complex shared state
- Server state (TanStack Query, SWR) for API data — never manual fetch+useState
4. TypeScript Quality
Check for:
anyusage (should be rare and justified)- Proper generic types (not
Record) - Discriminated unions for state machines
- Strict null checks honored
- Interface vs Type usage consistency
- Proper typing of API responses (not just
any)
// ❌ Loosely typed
const handleResponse = (data: any) => {
setUser(data.result);
};
// ✅ Properly typed
interface ApiResponse {
result: T;
error?: string;
}
const handleResponse = (data: ApiResponse) => {
setUser(data.result);
};
5. Performance
Check for:
- Unnecessary re-renders (React DevTools Profiler, Angular DevTools)
- Large bundle size (code splitting, lazy loading, tree shaking)
- Image optimization (lazy loading, proper formats, srcset)
- Virtualization for long lists (>100 items)
- Web Vitals impact (LCP, FID, CLS)
- Debouncing on search/resize/scroll handlers
- Memory leaks (detached DOM nodes, uncleaned intervals/listeners)
6. Accessibility (a11y)
Mandatory checks:
- Semantic HTML (`
not`) - ARIA labels on interactive elements without visible text
- Keyboard navigation (Tab, Enter, Escape)
- Color contrast ratios (4.5:1 for normal text)
- Focus management on route changes and modals
- Alt text on images
- Form labels associated with inputs
7. CSS & Styling
- Consistent methodology (CSS Modules, Tailwind, styled-components — pick one)
- Responsive design (mobile-first, breakpoints)
- No magic numbers (use design tokens/variables)
- Dark mode support (CSS custom properties)
- Animation performance (transform/opacity only for smooth 60fps)
Output Format
## Summary
[Framework, overall quality, key strengths and concerns]
## Critical
[Bugs, memory leaks, security issues]
## Component Design
[Architecture, composition, reusability]
## Performance
[Re-renders, bundle size, loading]
## Type Safety
[TypeScript quality, any usage]
## Accessibility
[a11y compliance issues]
## Suggestions
[Non-blocking improvements]
## Positive
[Good patterns — always include]
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: camilooscargbaptista
- Source: camilooscargbaptista/cto-toolkit
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.